hacktricks/binary-exploitation/heap/house-of-force.md

6.9 KiB

Dom Siły

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe Informacje

Kod

  • Ta technika została załatana (tutaj) i powoduje ten błąd: malloc(): corrupted top size
  • Możesz wypróbować kod stąd, jeśli chcesz go przetestować.

Cel

  • Celem tego ataku jest możliwość alokacji fragmentu pamięci w określonym adresie.

Wymagania

  • Przepełnienie, które pozwala nadpisać rozmiar nagłówka top chunk (np. -1).
  • Możliwość kontrolowania rozmiaru alokacji sterty

Atak

Jeśli atakujący chce zaalokować fragment pamięci pod adresem P w celu nadpisania wartości, zaczyna od nadpisania rozmiaru top chunk -1 (może to być wykonane poprzez przepełnienie). Zapewnia to, że malloc nie będzie używał mmap do żadnej alokacji, ponieważ Top chunk zawsze będzie miał wystarczająco dużo miejsca.

Następnie oblicz odległość między adresem top chunk a docelowym miejscem alokacji. Jest to konieczne, ponieważ alokacja malloc o takim rozmiarze zostanie wykonana w celu przeniesienia top chunk do tej pozycji. Tak można łatwo obliczyć różnicę/rozmiar:

// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/

Dlatego alokując rozmiar cel - old_top - 4*sizeof(long) (4 longi, ponieważ metadane top chunk i nowego chunka po alokacji) przesunie top chunk na adres, który chcemy nadpisać.
Następnie wykonaj kolejne malloc, aby uzyskać chunk zawierający na początku danych do zapisania docelowego adresu.

Odnośniki i Inne Przykłady