mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/integer-overflo
This commit is contained in:
parent
6e8dec117f
commit
fd37e3be1e
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user