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

6.9 KiB
Raw Blame History

Force Evi

{% hint style="success" %} AWS Hacking'i öğrenin ve uygulayın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)

HackTricks'i Destekleyin
{% endhint %}

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ızı sağlayan bir taşma (örneğin -1).
  • Yığın tahsis boyutunu kontrol edebilme yeteneği

Saldırı

Bir saldırgan, bir değeri buraya yazmak için bir parça tahsis etmek isterse, işe -1 ile başlık üst parçasını üzerine yazarak başlar (belki bir taşma ile). Bu, malloc'un Top parçasının her zaman yeterli alanı olacağından mmap'ı herhangi bir tahsis için kullanmayacağını sağlar.

Ardından, başlık üst parçasının adresi ile hedef alan arasındaki mesafeyi hesaplayın. 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/mesafe kolayca hesaplanabilir. Bu, farkın/boyutun nasıl kolayca hesaplanabileceğidir:

// 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.
Ardından, hedef adreste bir parça almak için başka bir malloc yapın.

Referanslar ve Diğer Örnekler