Integer Overflow (Web Applications)
Reading time: 5 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Ukurasa huu unazingatia jinsi overflow/truncation za integer zinavyoweza kutumika vibaya katika programu za wavuti na vivinjari. Kwa mbinu za unyakuzi ndani ya binaries asilia unaweza kuendelea kusoma ukurasa uliojitolea:
{{#ref}}
../../binary-exploitation/integer-overflow.md {{#endref}}
1. Kwa nini hesabu za integer bado ni muhimu kwenye wavuti
Ingawa mantiki nyingi za biashara katika stack za kisasa zimeandikwa katika lugha za memory-safe, runtime ya chini (au maktaba za wahusika wengine) hatimaye inatekelezwa kwa C/C++. Kila wakati nambari zinazodhibitiwa na mtumiaji zinapotumika kugawa buffers, kuhesabu offsets, au kufanya ukaguzi wa urefu, kuzunguka kwa 32-bit au 64-bit kunaweza kubadilisha parameter inayonekana kuwa isiyo na madhara kuwa kusoma/kandika nje ya mipaka, kupita kwa mantiki au DoS.
Uso wa shambulio wa kawaida:
- Parameta za ombi za nambari β viwanja vya kawaida vya id, offset, au count.
- Vichwa vya urefu / saizi β Content-Length, urefu wa fremu ya WebSocket, HTTP/2 continuation_len, n.k.
- Metadata ya muundo wa faili inayosindika upande wa seva au upande wa mteja β vipimo vya picha, saizi za chunk, meza za font.
- Mabadiliko ya kiwango cha lugha β signedβunsigned casts katika PHP/Go/Rust FFI, JS Number β int32 truncations ndani ya V8.
- Uthibitishaji & mantiki ya biashara β thamani ya kuponi, bei, au hesabu za salio ambazo zinapita kimya.
2. Uthibitisho wa hivi karibuni wa udhaifu wa kweli (2023-2025)
Mwaka | Kipengele | Sababu kuu | Athari |
---|---|---|---|
2023 | libwebp β CVE-2023-4863 | Kuongezeka kwa 32-bit wakati wa kuhesabu saizi ya pikseli iliyotafsiriwa | Ilisababisha Chrome 0-day (BLASTPASS kwenye iOS), iliruhusu utendaji wa msimbo wa mbali ndani ya sandbox ya renderer. |
2024 | V8 β CVE-2024-0519 | Truncation hadi 32-bit wakati wa kukua JSArray inasababisha OOB kuandika kwenye duka la nyuma | Utendaji wa msimbo wa mbali baada ya kutembelea mara moja. |
2025 | Apollo GraphQL Server (patch isiyotolewa) | Integer ya 32-bit iliyosainiwa inatumika kwa argumeti za pagination za kwanza/mwisho; thamani hasi zinazunguka kuwa kubwa chanya | Kupita kwa mantiki & uchovu wa kumbukumbu (DoS). |
3. Mkakati wa kupima
3.1 Cheat-sheet ya thamani za mpaka
Tuma thamani za juu za signed/unsigned popote ambapo integer inatarajiwa:
-1, 0, 1,
127, 128, 255, 256,
32767, 32768, 65535, 65536,
2147483647, 2147483648, 4294967295,
9223372036854775807, 9223372036854775808,
0x7fffffff, 0x80000000, 0xffffffff
Mifumo mingine ya manufaa:
- Hex (0x100), octal (0377), kisayansi (1e10), JSON big-int (9999999999999999999).
- Mifumo ya nambari ndefu sana (>1kB) ili kufikia parser maalum.
3.2 Kiolezo cha Burp Intruder
Β§INTEGERΒ§
Payload type: Numbers
From: -10 To: 4294967300 Step: 1
Pad to length: 10, Enable hex prefix 0x
3.3 Fuzzing libraries & runtimes
- AFL++/Honggfuzz na libFuzzer harness kuzunguka parser (mfano, WebP, PNG, protobuf).
- Fuzzilli β fuzzing inayojua sarufi ya injini za JavaScript ili kugonga V8/JSC integer truncations.
- boofuzz β fuzzing ya itifaki ya mtandao (WebSocket, HTTP/2) ikilenga uwanja wa urefu.
4. Exploitation patterns
4.1 Logic bypass in server-side code (PHP example)
$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 Heap overflow kupitia decoder ya picha (libwebp 0-day)
Decoder ya WebP isiyo na hasara iliongeza upana wa picha Γ urefu Γ 4 (RGBA) ndani ya int ya 32-bit. Faili iliyoundwa kwa vipimo 16384 Γ 16384 inazidi kuzidisha, inatenga buffer fupi na kisha inaandika ~1GB ya data iliyoshughulikiwa kupita heap β ikisababisha RCE katika kila kivinjari kinachotegemea Chromium kabla ya 116.0.5845.187.
4.3 Mnyororo wa XSS/RCE unaotegemea kivinjari
- Integer overflow katika V8 inatoa kusoma/kandika bila mipaka.
- Kimbia kwenye sandbox kwa hitilafu ya pili au piga API za asili ili kuangusha payload.
- Payload kisha inaingiza script mbaya katika muktadha wa asili β XSS iliyohifadhiwa.
5. Miongozo ya kujihami
- Tumia aina pana au hesabu zilizokaguliwa β e.g., size_t, Rust checked_add, Go math/bits.Add64.
- Thibitisha mipaka mapema: kataa thamani yoyote nje ya eneo la biashara kabla ya hesabu.
- Washa sanitizers za kompyuta: -fsanitize=integer, UBSan, Go race detector.
- Pokea fuzzing katika CI/CD β changanya mrejesho wa kufunika na mipaka ya data.
- Baki na sasisho β hitilafu za integer overflow za kivinjari mara nyingi zinatumika kama silaha ndani ya wiki chache.
Marejeo
- NVD CVE-2023-4863 β libwebp Heap Buffer Overflow
- Google Project Zero β "Understanding V8 CVE-2024-0519"
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.