# Επίθεση Large Bin
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Μάθετε & εξασκηθείτε στο GCP Hacking: [**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Υποστηρίξτε το HackTricks
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
{% endhint %}
## Βασικές Πληροφορίες
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα μεγάλο bin ελέγξτε αυτήν τη σελίδα:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Είναι δυνατόν να βρείτε ένα εξαιρετικό παράδειγμα στο [**how2heap - large bin attack**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
Βασικά εδώ μπορείτε να δείτε πώς, στην τελευταία "τρέχουσα" έκδοση του glibc (2.35), δεν γίνεται έλεγχος: **`P->bk_nextsize`** επιτρέποντας την τροποποίηση μιας αυθαίρετης διεύθυνσης με την τιμή ενός κομματιού μεγάλου bin αν πληρούνται συγκεκριμένες συνθήκες.
Σε εκείνο το παράδειγμα μπορείτε να βρείτε τις ακόλουθες συνθήκες:
* Ένα μεγάλο κομμάτι είναι εκχωρημένο
* Ένα μεγάλο κομμάτι μικρότερο από το πρώτο αλλά στον ίδιο δείκτη είναι εκχωρημένο
* Πρέπει να είναι μικρότερο ώστε στο bin να πάει πρώτο
* (Δημιουργείται ένα κομμάτι για να αποτρέψει τη συγχώνευση με το κομμάτι στην κορυφή)
* Στη συνέχεια, το πρώτο μεγάλο κομμάτι απελευθερώνεται και εκχωρείται ένα νέο κομμάτι μεγαλύτερο από αυτό -> Το Κομμάτι1 πηγαίνει στο μεγάλο bin
* Στη συνέχεια, το δεύτερο μεγάλο κομμάτι απελευθερώνεται
* Τώρα, η ευπάθεια: Ο επιτιθέμενος μπορεί να τροποποιήσει το `chunk1->bk_nextsize` σε `[target-0x20]`
* Στη συνέχεια, εκχωρείται ένα μεγαλύτερο κομμάτι από το κομμάτι 2, έτσι το κομμάτι2 εισάγεται στο μεγάλο bin αντικαθιστώντας τη διεύθυνση `chunk1->bk_nextsize->fd_nextsize` με τη διεύθυνση του κομματιού 2
{% hint style="success" %}
Υπάρχουν και άλλα πιθανά σενάρια, το θέμα είναι να προστεθεί στο μεγάλο bin ένα κομμάτι που είναι **μικρότερο** από ένα τρέχον X κομμάτι στο bin, έτσι πρέπει να εισαχθεί ακριβώς πριν από αυτό στο bin, και πρέπει να μπορούμε να τροποποιήσουμε το **`bk_nextsize`** του X καθώς εκεί θα γραφτεί η διεύθυνση του μικρότερου κομματιού.
{% endhint %}
Αυτός είναι ο σχετικός κώδικας από το malloc. Έχουν προστεθεί σχόλια για καλύτερη κατανόηση του πώς έγινε η αντικατάσταση της διεύθυνσης:
{% code overflow="wrap" %}
```c
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}
```
{% endcode %}
Αυτό μπορεί να χρησιμοποιηθεί για **να αντικαταστήσετε την καθολική μεταβλητή `global_max_fast`** της libc για να εκμεταλλευτείτε έπειτα μια επίθεση fast bin με μεγαλύτερα κομμάτια.
Μπορείτε να βρείτε μια άλλη εξαιρετική εξήγηση αυτής της επίθεσης στο [**guyinatuxedo**](https://guyinatuxedo.github.io/32-largebin\_attack/largebin\_explanation0/index.html).
### Άλλα παραδείγματα
* [**La casa de papel. HackOn CTF 2024**](https://7rocky.github.io/en/ctf/other/hackon-ctf/la-casa-de-papel/)
* Επίθεση large bin στην ίδια κατάσταση όπως εμφανίζεται στο [**how2heap**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
* Η γραφή primitive είναι πιο πολύπλοκη, επειδή η `global_max_fast` είναι άχρηστη εδώ.
* Απαιτείται FSOP για να ολοκληρωθεί η εκμετάλλευση.
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Μάθετε & εξασκηθείτε στο GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Υποστηρίξτε το HackTricks
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην ομάδα [**Discord**](https://discord.gg/hRep4RUj7f) ή στην ομάδα [**telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
{% endhint %}