hacktricks/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md

5.9 KiB
Raw Blame History

WWW2Exec - __malloc_hook & __free_hook

AWS hackleme konusunda sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

Malloc Hook

Resmi GNU sitesinde belirtildiği gibi, __malloc_hook değişkeni, malloc() çağrıldığında libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir. Bu nedenle, bu adres örneğin bir One Gadget ile üzerine yazılırsa ve malloc çağrılırsa, One Gadget çağrılacaktır.

Malloc'ı çağırmak için programın onu çağırmasını beklemek mümkündür veya printf("%10000$c") çağrılarak da mümkündür, bu da çok fazla bayt ayırarak libc'in bunları yığında ayırmak için malloc çağırmasını sağlar.

One Gadget hakkında daha fazla bilgi için:

{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %} one-gadget.md {% endcontent-ref %}

{% hint style="warning" %} Kancaların GLIBC >= 2.34 için devre dışı bırakıldığını unutmayın. Modern GLIBC sürümlerinde kullanılabilecek diğer teknikler bulunmaktadır. Bakınız: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md. {% endhint %}

Free Hook

Bu, bir sıralı olmayan bin saldırısını kötüye kullanıp hızlı bir bin saldırısını kötüye kullanan sayfadan bir örnekte kötüye kullanılmıştır:

{% content-ref url="../heap/unsorted-bin-attack.md" %} unsorted-bin-attack.md {% endcontent-ref %}

Şimdi bir hızlı bin saldırısı gerçekleştiriliyor:

  • İlk olarak, __free_hook konumunda 200 boyutunda hızlı parçalarla çalışmanın mümkün olduğu keşfedilir:
  • gef➤  p &__free_hook
    

$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook> gef➤ x/60gx 0x7ff1e9e607a8 - 0x59 0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200 0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000

  • Eğer bu konumda 0x200 boyutunda hızlı bir parça elde edilirse, yürütülecek bir işlev işaretçisini üzerine yazmak mümkün olacaktır
  • Bunun için, boyutu 0xfc olan yeni bir parça oluşturulur ve birleştirilmiş işlev bu işaretçiyle iki kez çağrılır, bu şekilde hızlı bir parçanın boyutu 0xfc*2 = 0x1f8 olan bir serbest bırakılmış parçanın işaretçisine ulaşılır.
  • Ardından, bu hızlı parçanın fd adresini önceki __free_hook işlevine işaret etmesi için bu parçada düzenleme işlevi çağrılır.
  • Daha sonra, hızlı bir parçadan önceki gereksiz parçayı almak için boyutu 0x1f8 olan bir parça oluşturulur, böylece __free_hook'ta hızlı bir parça parçası alınır ve üzerine system işlevinin adresiyle üzerine yazılır.
  • Ve son olarak, /bin/sh\x00 dizesini içeren bir parça serbest bırakılarak silme işlevi çağrılır, __free_hook işlevi tetiklenir ve /bin/sh\x00 parametresiyle sistem işlevine işaret eder.

Referanslar

AWS hackleme konusunda sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları: