House of Force

Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wesprzyj 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, aby nadpisać wartość tutaj. Zaczyna od nadpisania rozmiaru top chunk -1 (może to być z przepełnieniem). 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 docelową przestrzenią do alokacji. Jest to konieczne, ponieważ malloc o takim rozmiarze zostanie wykonany, 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 przydzielenie rozmiaru target - old_top - 4*sizeof(long) (4 longi, ponieważ metadane top chunk i nowego chunka są przydzielane) spowoduje przeniesienie top chunka pod adres, który chcemy nadpisać. Następnie wykonujemy kolejne malloc, aby uzyskać chunka pod docelowym adresem.

Referencje i Inne Przykłady

Last updated