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
7968c5a4a2
commit
ccc8adbdce
@ -1,11 +1,104 @@
|
||||
# Υπερχείλιση Ακεραίου
|
||||
# Integer Overflow (Web Applications)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Έλεγχος:
|
||||
> Αυτή η σελίδα εστιάζει στο πώς **οι υπερχειλίσεις/κοπές ακεραίων μπορούν να εκμεταλλευτούν σε διαδικτυακές εφαρμογές και προγράμματα περιήγησης**. Για τις πρωτογενείς εκμεταλλεύσεις μέσα σε εγγενείς δυαδικούς κώδικες μπορείτε να συνεχίσετε να διαβάζετε τη σελίδα που είναι αφιερωμένη σε αυτό:
|
||||
>
|
||||
> {{#ref}}
|
||||
> ../../binary-exploitation/integer-overflow.md
|
||||
> {{#endref}}
|
||||
|
||||
{{#ref}}
|
||||
../../binary-exploitation/integer-overflow.md
|
||||
{{#endref}}
|
||||
---
|
||||
|
||||
## 1. Γιατί η αριθμητική ακεραίων εξακολουθεί να έχει σημασία στο διαδίκτυο
|
||||
|
||||
Ακόμα και αν η πλειονότητα της επιχειρηματικής λογικής σε σύγχρονες στοίβες είναι γραμμένη σε *ασφαλείς μνήμες* γλώσσες, η υποκείμενη εκτέλεση (ή οι βιβλιοθήκες τρίτων) τελικά υλοποιείται σε C/C++. Όποτε χρησιμοποιούνται αριθμοί που ελέγχονται από τον χρήστη για την κατανομή μνημών, τον υπολογισμό μετατοπίσεων ή την εκτέλεση ελέγχων μήκους, **μια περιτύλιξη 32-bit ή 64-bit μπορεί να μετατρέψει μια φαινομενικά αβλαβή παράμετρο σε ανάγνωση/γραφή εκτός ορίων, παράκαμψη λογικής ή DoS**.
|
||||
|
||||
Τυπική επιφάνεια επίθεσης:
|
||||
|
||||
1. **Αριθμητικές παράμετροι αιτήματος** – κλασικά πεδία `id`, `offset`, ή `count`.
|
||||
2. **Επικεφαλίδες μήκους/μεγέθους** – `Content-Length`, μήκος πλαισίου WebSocket, HTTP/2 `continuation_len`, κ.λπ.
|
||||
3. **Μεταδεδομένα μορφής αρχείου που αναλύονται από τον διακομιστή ή τον πελάτη** – διαστάσεις εικόνας, μεγέθη τμημάτων, πίνακες γραμματοσειρών.
|
||||
4. **Μετατροπές σε επίπεδο γλώσσας** – υπογεγραμμένες↔μη υπογεγραμμένες μετατροπές σε PHP/Go/Rust FFI, JS `Number` → `int32` κοπές μέσα στο V8.
|
||||
5. **Αυθεντικοποίηση & επιχειρηματική λογική** – αξία κουπονιού, τιμή ή υπολογισμοί υπολοίπου που υπερχειλίζουν σιωπηλά.
|
||||
|
||||
---
|
||||
|
||||
## 2. Πρόσφατες πραγματικές ευπάθειες (2023-2025)
|
||||
|
||||
| Έτος | Συστατικό | Ρίζα αιτίας | Επιπτώσεις |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2023 | **libwebp – CVE-2023-4863** | Υπερβολή πολλαπλασιασμού 32-bit κατά τον υπολογισμό του μεγέθους των αποκωδικοποιημένων εικονοστοιχείων | Προκάλεσε ένα 0-day Chrome (`BLASTPASS` σε iOS), επέτρεψε *εκτέλεση απομακρυσμένου κώδικα* μέσα στο sandbox του renderer. |
|
||||
| 2024 | **V8 – CVE-2024-0519** | Κοπή σε 32-bit κατά την αύξηση ενός `JSArray` οδηγεί σε OOB εγγραφή στο backing store | Εκτέλεση απομακρυσμένου κώδικα μετά από μία μόνο επίσκεψη. |
|
||||
| 2025 | **Apollo GraphQL Server** (μη δημοσιευμένο patch) | Υπογεγραμμένος ακεραίος 32-bit χρησιμοποιείται για τα args σε σελιδοποίηση `first/last`; αρνητικές τιμές περιτυλίγονται σε τεράστιες θετικές | Παράκαμψη λογικής & εξάντληση μνήμης (DoS). |
|
||||
|
||||
---
|
||||
|
||||
## 3. Στρατηγική δοκιμών
|
||||
|
||||
### 3.1 Φύλλο συμβουλών οριακής τιμής
|
||||
|
||||
Στείλτε **ακραίες υπογεγραμμένες/μη υπογεγραμμένες τιμές** όπου αναμένεται ένας ακεραίος:
|
||||
```
|
||||
-1, 0, 1,
|
||||
127, 128, 255, 256,
|
||||
32767, 32768, 65535, 65536,
|
||||
2147483647, 2147483648, 4294967295,
|
||||
9223372036854775807, 9223372036854775808,
|
||||
0x7fffffff, 0x80000000, 0xffffffff
|
||||
```
|
||||
Άλλες χρήσιμες μορφές:
|
||||
* Hex (`0x100`), οκταδική (`0377`), επιστημονική (`1e10`), JSON big-int (`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 βιβλιοθήκες & runtimes
|
||||
|
||||
* **AFL++/Honggfuzz** με `libFuzzer` harness γύρω από τον parser (π.χ., WebP, PNG, protobuf).
|
||||
* **Fuzzilli** – fuzzing με γνώση γραμματικής των μηχανών JavaScript για να χτυπήσουν τις περικοπές ακέραιων αριθμών V8/JSC.
|
||||
* **boofuzz** – fuzzing πρωτοκόλλων δικτύου (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 χωρίς απώλειες πολλαπλασίασε το πλάτος εικόνας × ύψος × 4 (RGBA) μέσα σε ένα 32-bit `int`. Ένα κατασκευασμένο αρχείο με διαστάσεις `16384 × 16384` υπερχειλίζει τον πολλαπλασιασμό, εκχωρεί ένα μικρό buffer και στη συνέχεια γράφει **~1GB** αποσυμπιεσμένων δεδομένων πέρα από τον σωρό – οδηγώντας σε RCE σε κάθε πρόγραμμα περιήγησης βασισμένο σε Chromium πριν από την έκδοση 116.0.5845.187.
|
||||
|
||||
### 4.3 Αλυσίδα XSS/RCE βασισμένη σε πρόγραμμα περιήγησης
|
||||
1. **Υπερχείλιση ακέραιου** στο V8 δίνει αυθαίρετη ανάγνωση/γραφή.
|
||||
2. Ξεφύγετε από το sandbox με ένα δεύτερο σφάλμα ή καλέστε εγγενή APIs για να ρίξετε ένα payload.
|
||||
3. Το payload στη συνέχεια εισάγει ένα κακόβουλο script στο αρχικό πλαίσιο → αποθηκευμένο XSS.
|
||||
|
||||
---
|
||||
|
||||
## 5. Κατευθυντήριες γραμμές άμυνας
|
||||
|
||||
1. **Χρησιμοποιήστε ευρείες τύπους ή ελεγμένα μαθηματικά** – π.χ., `size_t`, Rust `checked_add`, Go `math/bits.Add64`.
|
||||
2. **Επικυρώστε τα εύρη νωρίς**: απορρίψτε οποιαδήποτε τιμή εκτός του επιχειρηματικού τομέα πριν από την αριθμητική.
|
||||
3. **Ενεργοποιήστε τους απολυμαντές του μεταγλωττιστή**: `-fsanitize=integer`, UBSan, ανιχνευτής αγώνων Go.
|
||||
4. **Υιοθετήστε fuzzing στο CI/CD** – συνδυάστε την ανατροφοδότηση κάλυψης με όρια corpora.
|
||||
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