Translated ['src/pentesting-web/xss-cross-site-scripting/integer-overflo

This commit is contained in:
Translator 2025-07-24 16:26:17 +00:00
parent 6e8dec117f
commit fd37e3be1e

View File

@ -1,11 +1,104 @@
# Integer Overflow
# Integer Overflow (Web Applications)
{{#include ../../banners/hacktricks-training.md}}
जांचें:
> यह पृष्ठ इस पर केंद्रित है कि **integer overflows/truncations को वेब अनुप्रयोगों और ब्राउज़रों में कैसे दुरुपयोग किया जा सकता है**। स्थानीय बाइनरी में शोषण प्राइमिटिव के लिए आप समर्पित पृष्ठ पढ़ना जारी रख सकते हैं:
>
> {{#ref}}
> ../../binary-exploitation/integer-overflow.md
> {{#endref}}
{{#ref}}
../../binary-exploitation/integer-overflow.md
{{#endref}}
---
## 1. वेब पर integer गणित का महत्व
हालांकि आधुनिक स्टैक्स में अधिकांश व्यवसाय-तर्क *मेमोरी-सेफ* भाषाओं में लिखा गया है, अंतर्निहित रनटाइम (या तृतीय-पक्ष पुस्तकालय) अंततः C/C++ में लागू किया गया है। जब भी उपयोगकर्ता-नियंत्रित संख्याओं का उपयोग बफर आवंटित करने, ऑफसेट की गणना करने, या लंबाई की जांच करने के लिए किया जाता है, **एक 32-बिट या 64-बिट रैप-अराउंड एक स्पष्ट रूप से हानिरहित पैरामीटर को एक आउट-ऑफ-बाउंड पढ़ने/लिखने, एक लॉजिक बायपास या एक DoS में बदल सकता है**
टिपिकल अटैक सतह:
1. **संख्यात्मक अनुरोध पैरामीटर** क्लासिक `id`, `offset`, या `count` फ़ील्ड।
2. **लंबाई / आकार हेडर** `Content-Length`, WebSocket फ़्रेम लंबाई, HTTP/2 `continuation_len`, आदि।
3. **फाइल-फॉर्मेट मेटाडेटा जो सर्वर-साइड या क्लाइंट-साइड पर पार्स किया गया** छवि आयाम, टुकड़े के आकार, फ़ॉन्ट तालिकाएँ।
4. **भाषा-स्तरीय रूपांतरण** PHP/Go/Rust FFI में signed↔unsigned कास्ट, V8 के अंदर JS `Number``int32` ट्रंकशन।
5. **प्रमाणीकरण और व्यवसाय तर्क** कूपन मूल्य, कीमत, या बैलेंस गणनाएँ जो चुपचाप ओवरफ्लो होती हैं।
---
## 2. हाल की वास्तविक दुनिया की कमजोरियाँ (2023-2025)
| वर्ष | घटक | मूल कारण | प्रभाव |
|------|-----------|-----------|--------|
| 2023 | **libwebp CVE-2023-4863** | डिकोडेड पिक्सेल आकार की गणना करते समय 32-बिट गुणा ओवरफ्लो | Chrome 0-day (`BLASTPASS` on iOS) को ट्रिगर किया, *remote code execution* को रेंडरर सैंडबॉक्स के अंदर अनुमति दी। |
| 2024 | **V8 CVE-2024-0519** | `JSArray` को बढ़ाते समय 32-बिट में ट्रंकशन बैकिंग स्टोर पर OOB लिखने की ओर ले जाती है | एकल विज़िट के बाद रिमोट कोड निष्पादन। |
| 2025 | **Apollo GraphQL Server** (अप्रकाशित पैच) | `first/last` पेजिनेशन आर्ग्स के लिए 32-बिट साइन किया गया पूर्णांक; नकारात्मक मान विशाल सकारात्मक में लपेटते हैं | लॉजिक बायपास और मेमोरी थकावट (DoS)। |
---
## 3. परीक्षण रणनीति
### 3.1 सीमा-मूल्य चीट-शीट
जहाँ भी एक पूर्णांक की अपेक्षा की जाती है, वहाँ **अत्यधिक साइन किए गए/अनसाइन किए गए मान** भेजें:
```
-1, 0, 1,
127, 128, 255, 256,
32767, 32768, 65535, 65536,
2147483647, 2147483648, 4294967295,
9223372036854775807, 9223372036854775808,
0x7fffffff, 0x80000000, 0xffffffff
```
अन्य उपयोगी प्रारूप:
* हेक्स (`0x100`), ऑक्टल (`0377`), वैज्ञानिक (`1e10`), JSON बड़ा-इंट (`9999999999999999999`).
* बहुत लंबे अंक स्ट्रिंग (>1kB) कस्टम पार्सर्स को हिट करने के लिए।
### 3.2 Burp Intruder टेम्पलेट
```
§INTEGER§
Payload type: Numbers
From: -10 To: 4294967300 Step: 1
Pad to length: 10, Enable hex prefix 0x
```
### 3.3 Fuzzing पुस्तकालय और रनटाइम
* **AFL++/Honggfuzz** के साथ `libFuzzer` पार्सर के चारों ओर (जैसे, WebP, PNG, protobuf)।
* **Fuzzilli** JavaScript इंजनों का व्याकरण-जानकारी वाला फज़िंग जो V8/JSC पूर्णांक ट्रंकशन को लक्षित करता है।
* **boofuzz** नेटवर्क-प्रोटोकॉल फज़िंग (WebSocket, HTTP/2) जो लंबाई के क्षेत्रों पर ध्यान केंद्रित करता है।
---
## 4. शोषण पैटर्न
### 4.1 सर्वर-साइड कोड में लॉजिक बायपास (PHP उदाहरण)
```php
$price = (int)$_POST['price']; // expecting cents (0-10000)
$total = $price * 100; // ← 32-bit overflow possible
if($total > 1000000){
die('Too expensive');
}
/* Sending price=21474850 → $total wraps to 2147483648 and check is bypassed */
```
### 4.2 इमेज डिकोडर के माध्यम से हीप ओवरफ्लो (libwebp 0-day)
WebP लॉसलेस डिकोडर ने 32-बिट `int` के अंदर इमेज चौड़ाई × ऊँचाई × 4 (RGBA) को गुणा किया। `16384 × 16384` के आयामों के साथ एक तैयार की गई फ़ाइल गुणा को ओवरफ्लो करती है, एक छोटा बफर आवंटित करती है और इसके बाद **~1GB** अव्यवस्थित डेटा हीप के पार लिखती है - जो हर Chromium-आधारित ब्राउज़र में RCE की ओर ले जाती है जो 116.0.5845.187 से पहले है।
### 4.3 ब्राउज़र-आधारित XSS/RCE श्रृंखला
1. V8 में **Integer overflow** मनमाना पढ़ने/लिखने की अनुमति देता है।
2. एक दूसरे बग के साथ सैंडबॉक्स से बाहर निकलें या एक पेलोड छोड़ने के लिए स्थानीय APIs को कॉल करें।
3. पेलोड फिर मूल संदर्भ में एक दुर्भावनापूर्ण स्क्रिप्ट इंजेक्ट करता है → संग्रहीत XSS।
---
## 5. रक्षात्मक दिशानिर्देश
1. **चौड़े प्रकारों या चेक किए गए गणित का उपयोग करें** जैसे, `size_t`, Rust `checked_add`, Go `math/bits.Add64`
2. **सीमाओं को जल्दी मान्य करें**: गणितीय कार्यों से पहले व्यापार डोमेन के बाहर किसी भी मान को अस्वीकार करें।
3. **कंपाइलर सैनीटाइजर्स सक्षम करें**: `-fsanitize=integer`, UBSan, Go रेस डिटेक्टर।
4. **CI/CD में फज़िंग अपनाएं** कवरेज फीडबैक को सीमा कॉर्पोरा के साथ मिलाएं।
5. **पैच किए रहें** ब्राउज़र के इंटीजर ओवरफ्लो बग अक्सर हफ्तों के भीतर हथियारबंद किए जाते हैं।
---
## संदर्भ
* [NVD CVE-2023-4863 libwebp Heap Buffer Overflow](https://nvd.nist.gov/vuln/detail/CVE-2023-4863)
* [Google Project Zero "Understanding V8 CVE-2024-0519"](https://googleprojectzero.github.io/)
{{#include ../../banners/hacktricks-training.md}}