House of Roman
Last updated
Last updated
AWS Hacking'ı öğrenin ve uygulayın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'ini öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Bu, sızıntısız RCE'ye olanak tanıyan, sahte fastbins, sıralanmamış_bin saldırısı ve göreceli üzerine yazma ile RCE sağlayan çok ilginç bir teknikti. Ancak yamalandı.
Örneği https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c adresinde bulabilirsiniz.
Göreceli işaretçileri kötüye kullanarak RCE
Fastbin ve sıralanmamış bin işaretçilerini düzenleme
12 bitlik rastgelelik zorunlu olarak kaba kuvvet uygulanmalıdır (%0.02 şansı çalışma)
Birkaç parça oluşturun:
fastbin_victim
(0x60, ofset 0): Daha sonra yığın işaretçisini LibC değerine işaret etmek üzere düzenlenecek UAF parçası.
chunk2
(0x80, ofset 0x70): İyi hizalamak için
main_arena_use
(0x80, ofset 0x100)
relative_offset_heap
(0x60, ofset 0x190): 'main_arena_use' parçasındaki göreceli ofset
Ardından main_arena_use
serbest bırakılır, bu parçayı sıralanmamış listeye yerleştirir ve hem fd
hem de bk
işaretçilerinde main_arena + 0x68
'e bir işaretçi alır.
Şimdi fd
ve bk
işaretçilerinde main_arena + 0x68
'e işaretçiler içereceği için yeni bir parça olan fake_libc_chunk(0x60)
ayrılmıştır.
Ardından relative_offset_heap
ve fastbin_victim
serbest bırakılır.
fastbin_victim
adlı bir fd
, relative_offset_heap
'e işaret ediyor
relative_offset_heap
, fake_libc_chunk
'tan uzaklık olarak bir ofsete sahiptir ve bu da main_arena + 0x68
'i işaret eden bir işaretçi içerir
fastbin_victim.fd
'nin son baytını değiştirerek fastbin_victim
'ı main_arena + 0x68
'i işaret edecek şekilde yapmak mümkündür
Önceki eylemler için saldırganın, fastbin_victim
'ın fd
işaretçisini değiştirebilme yeteneğine sahip olması gerekir.
Ardından, main_arena + 0x68
çok ilginç değildir, bu yüzden işaretçinin __malloc_hook
'u işaret etmesini sağlayacak şekilde değiştirelim.
__memalign_hook
genellikle 0x7f
ile başlar ve ondan önce sıfırlar bulunur, bu nedenle 0x70
hızlı binde bir değer olarak sahteleyebilir. Çünkü adresin son 4 biti rastgele olduğundan, adresin istediğimiz yere işaret etmesi için 2^4=16
olasılık vardır. Bu nedenle, bir BF saldırısı burada gerçekleştirilir, böylece parça şu şekilde sonlanır: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
.
(Geri kalan baytlar hakkında daha fazla bilgi için how2heap örneğindeki açıklamaya bakın). BF çalışmazsa program çöker (bu yüzden çalışana kadar tekrar başlayın).
Ardından, 2 malloc işlemi gerçekleştirilir ve 2 başlangıç hızlı bin parçası kaldırılır ve üçüncüsü, bir parçayı __malloc_hook:
'ta almak için ayrılır.
Daha fazla bilgi için şu adrese bakabilirsiniz:
Ancak temelde, chunk->bk
içinde belirtilen konuma main_arena + 0x68
yazmamızı sağlar. Saldırı için __malloc_hook
'u seçiyoruz. Sonra, üzerine yazdıktan sonra bir one_gadget
'a işaret etmek için bir göreceli yazma işlemi kullanacağız.
Bunun için bir parça alıp onu sıralanmamış bin'e koyarak başlarız:
Bu parçada bir UAF kullanarak unsorted_bin_ptr->bk
'yi __malloc_hook
adresine işaret etmek için kullanıyoruz (bu daha önce brute force ile yapıldı).
Bu saldırı, unsorted bin'i bozar (bu nedenle küçük ve büyük de). Bu nedenle şimdi sadece hızlı binlerden tahsisleri kullanabiliriz (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir), bunu tetiklemek için aynı boyutta tahsis yapmalıyız ya da program çöker.
Bu nedenle, __malloc_hook
'u unsorted_bin_ptr->bk
'ye ayarladıktan sonra main_arena + 0x68
'e yazmayı tetiklemek için sadece malloc(0x80)
yapmamız gerekiyor.
Adım birde __malloc_hook
içeren bir parçayı kontrol etmeyi bitirdik (değişken malloc_hook_chunk
içinde) ve ikinci adımda buraya main_arena + 0x68
yazmayı başardık.
Şimdi, malloc_hook_chunk
içindeki kısmi bir yazmayı kötüye kullanarak oraya yazdığımız libc adresini (main_arena + 0x68
) kullanarak bir one_gadget
adresine işaret etmek için.
İşte burada 12 bitlik rastgeleliği brute force etmek gerekiyor (daha fazla bilgi için how2heap örneğine bakın).
Son olarak, doğru adres üzerine yazıldığında, malloc
'ı çağırın ve one_gadget
'ı tetikleyin.
AWS Hacking'i öğrenin ve uygulayın:HackTricks Eğitimi AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve uygulayın: HackTricks Eğitimi GCP Red Team Expert (GRTE)