mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
48 lines
3.8 KiB
Markdown
48 lines
3.8 KiB
Markdown
# House of Lore | Small bin Attack
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## Basic Information
|
||
|
||
### Code
|
||
|
||
- Έλεγχος του από [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/)
|
||
- Αυτό δεν λειτουργεί
|
||
- Ή: [https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c)
|
||
- Αυτό δεν λειτουργεί ακόμα και αν προσπαθεί να παρακάμψει κάποιους ελέγχους και εμφανίζει το σφάλμα: `malloc(): unaligned tcache chunk detected`
|
||
- Αυτό το παράδειγμα λειτουργεί ακόμα: [**https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html**](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html)
|
||
|
||
### Goal
|
||
|
||
- Εισάγετε ένα **ψεύτικο μικρό κομμάτι στον μικρό κάδο ώστε να είναι δυνατή η κατανομή του**.\
|
||
Σημειώστε ότι το μικρό κομμάτι που προστίθεται είναι το ψεύτικο που δημιουργεί ο επιτιθέμενος και όχι ένα ψεύτικο σε τυχαία θέση.
|
||
|
||
### Requirements
|
||
|
||
- Δημιουργήστε 2 ψεύτικα κομμάτια και συνδέστε τα μεταξύ τους και με το νόμιμο κομμάτι στον μικρό κάδο:
|
||
- `fake0.bk` -> `fake1`
|
||
- `fake1.fd` -> `fake0`
|
||
- `fake0.fd` -> `legit` (πρέπει να τροποποιήσετε έναν δείκτη στο ελεύθερο μικρό κομμάτι μέσω κάποιας άλλης ευπάθειας)
|
||
- `legit.bk` -> `fake0`
|
||
|
||
Έτσι θα μπορείτε να κατανεμηθείτε `fake0`.
|
||
|
||
### Attack
|
||
|
||
- Ένα μικρό κομμάτι (`legit`) κατανεμήθηκε, στη συνέχεια, ένα άλλο κατανεμήθηκε για να αποτραπεί η συγχώνευση με το κορυφαίο κομμάτι. Στη συνέχεια, το `legit` απελευθερώνεται (μετακινώντας το στη λίστα των αταξινόμητων κομματιών) και ένα μεγαλύτερο κομμάτι κατανεμήθηκε, **μετακινώντας το `legit` στον μικρό κάδο.**
|
||
- Ένας επιτιθέμενος δημιουργεί μερικά ψεύτικα μικρά κομμάτια και κάνει την απαραίτητη σύνδεση για να παρακάμψει τους ελέγχους εγκυρότητας:
|
||
- `fake0.bk` -> `fake1`
|
||
- `fake1.fd` -> `fake0`
|
||
- `fake0.fd` -> `legit` (πρέπει να τροποποιήσετε έναν δείκτη στο ελεύθερο μικρό κομμάτι μέσω κάποιας άλλης ευπάθειας)
|
||
- `legit.bk` -> `fake0`
|
||
- Ένα μικρό κομμάτι κατανεμήθηκε για να αποκτήσει το legit, κάνοντάς το **`fake0`** στην κορυφή της λίστας των μικρών κάδων
|
||
- Ένα άλλο μικρό κομμάτι κατανεμήθηκε, αποκτώντας το `fake0` ως κομμάτι, επιτρέποντας δυνητικά την ανάγνωση/γραφή δεικτών μέσα σε αυτό.
|
||
|
||
## References
|
||
|
||
- [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/)
|
||
- [https://heap-exploitation.dhavalkapil.com/attacks/house_of_lore](https://heap-exploitation.dhavalkapil.com/attacks/house_of_lore)
|
||
- [https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|