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

7 KiB
Raw Blame History

Güç Evi

Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

Kod

  • Bu teknik düzeltildi (burada) ve şu hatayı üretir: malloc(): corrupted top size
  • Test etmek isterseniz buradan kodu deneyebilirsiniz.

Amaç

  • Bu saldırının amacı belirli bir adreste bir parça tahsis edebilmektir.

Gereksinimler

  • Başlık parçasının boyutunu üzerine yazmanızı sağlayan bir taşma (örneğin -1).
  • Yığın tahsis boyutunu kontrol edebilme

Saldırı

Bir saldırgan, bir parçayı P adresine tahsis etmek için burada bir değeri üzerine yazmak isterse. Başlangıçta, başlık parçasının boyutunu -1 ile üzerine yazarak başlar (belki bir taşma ile). Bu, malloc'un herhangi bir tahsis için mmap kullanmayacağından emin olur, çünkü Üst parça her zaman yeterli alanı olacaktır.

Daha sonra, üst parça adresi ile hedef alan arasındaki mesafeyi hesaplayın. Bu, üst parçayı o konuma taşımak için o boyutta bir malloc'un gerçekleştirileceği anlamına gelir. Farkın/boyutun kolayca hesaplanabileceği budur:

// 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)
*/

Bu nedenle, hedef - eski_üst - 4*sizeof(long) boyutunda bir alan ayırmak (4 long, üst parçanın ve ayrıldığında yeni parçanın meta verileri nedeniyle) üst parçayı üzerine yazmak istediğimiz adrese taşıyacaktır.
Sonra, hedef adresi yazmak için verinin başlangıcını içeren bir parçayı almak için başka bir malloc yapın.

Referanslar ve Diğer Örnekler