// Attacker overwrites a pointer that is about to be 'freed' // Point to .fd as it's the start of the content of the chunk ptr = (void *)&fake_chunks[0].fd;
Należy utworzyć drugi kawałek w celu ominięcia pewnych kontroli poprawności.
Przykłady
CTF
Wyciek informacji z Libc: Poprzez przepełnienie możliwe jest zmienienie wskaźnika tak, aby wskazywał na adres GOT w celu wycieku adresu Libc poprzez akcję odczytu CTF
House of Spirit: Wykorzystując licznik, który zlicza liczbę "karabinów", możliwe jest wygenerowanie fałszywego rozmiaru pierwszego fałszywego kawałka, a następnie wykorzystanie "wiadomości", aby sfałszować drugi rozmiar kawałka, a następnie wykorzystanie przepełnienia, aby zmienić wskaźnik, który zostanie zwolniony, więc nasz pierwszy fałszywy kawałek zostanie zwolniony. Następnie możemy go zaalokować, a wewnątrz będzie adres, pod którym przechowywana jest "wiadomość". Następnie możliwe jest skierowanie tego do wpisu scanf w tabeli GOT, dzięki czemu możemy nadpisać go adresem do systemu.
Następnym razem gdy zostanie wywołane scanf, możemy wysłać wejście "/bin/sh" i uzyskać dostęp do powłoki.
Wyciek Glibc: Niezainicjowany bufor stosu.
House of Spirit: Możemy zmodyfikować pierwszy indeks globalnej tablicy wskaźników na stercie. Za pomocą jednobajtowej modyfikacji używamy free na fałszywym kawałku wewnątrz poprawnego kawałka, dzięki czemu po ponownej alokacji otrzymujemy sytuację nakładających się kawałków. Dzięki temu atak trucizny Tcache działa, aby uzyskać arbitralne pisanie.
Odnośniki
Naucz się i ćwicz Hacking AWS:
Naucz się i ćwicz Hacking GCP:
</details>
### Cel
* Być w stanie dodać adres do tcache / fast bin, aby później można go było zaalokować
### Wymagania
* Ten atak wymaga, aby atakujący mógł stworzyć kilka fałszywych szybkich kawałków wskazujących poprawną wartość rozmiaru i następnie zwolnić pierwszy fałszywy kawałek, aby trafił do pojemnika.
### Atak
* Stwórz fałszywe kawałki omijające kontrole bezpieczeństwa: będziesz potrzebował 2 fałszywych kawałków, wskazujących w odpowiednich pozycjach poprawne rozmiary
* W jakiś sposób zwolnij pierwszy fałszywy kawałek, aby trafił do pojemnika fast lub tcache, a następnie zaalokuj go, aby nadpisać ten adres
**Kod od** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **jest świetny do zrozumienia ataku.** Chociaż ten schemat z kodu dobrze go podsumowuje:
```c
/*
this will be the structure of our two fake chunks:
assuming that you compiled it for x64
+-------+---------------------+------+
| 0x00: | Chunk # 0 prev size | 0x00 |
+-------+---------------------+------+
| 0x08: | Chunk # 0 size | 0x60 |
+-------+---------------------+------+
| 0x10: | Chunk # 0 content | 0x00 |
+-------+---------------------+------+
| 0x60: | Chunk # 1 prev size | 0x00 |
+-------+---------------------+------+
| 0x68: | Chunk # 1 size | 0x40 |
+-------+---------------------+------+
| 0x70: | Chunk # 1 content | 0x00 |
+-------+---------------------+------+
for what we are doing the prev size values don't matter too much
the important thing is the size values of the heap headers for our fake chunks
*/