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

7.1 KiB
Raw Blame History

Force Evi

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

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 üst parçasının boyutunu üzerine yazmanıza izin veren bir taşma (örneğin -1).
  • Yığın tahsis boyutunu kontrol edebilme yeteneği

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 üst 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, başlık üst parçasının adresi ile hedef alan arasındaki mesafeyi hesaplayın ve tahsis edilecek alanın boyutunu kontrol edin. Bu, başlık üst parçasını o konuma taşımak için o boyutta bir malloc işlemi gerçekleştirileceğinden fark/kapasite kolayca hesaplanabilir:

// 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 yüzden, 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