hacktricks/binary-exploitation/libc-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, aby go przetestować, jeśli chcesz.

Cel

  • Celem tego ataku jest możliwość alokacji fragmentu pamięci pod konkretnym adresem.

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 zrobić 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, aby przenieść top chunk na tę pozycję. 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 target - old_top - 4*sizeof(long) (4 longi, ponieważ metadane top chunka i nowego chunka po alokacji) przesuniemy top chunka pod adres, który chcemy nadpisać.
Następnie wykonujemy kolejne malloc, aby uzyskać chunk zawierający na początku dane do zapisania docelowego adresu.

Odnośniki i Inne Przykłady