5.3 KiB
WWW2Exec - .dtors & .fini_array
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- 💬 Discord grubuna katılın veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live** takip edin**.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking püf noktalarını paylaşın.
.dtors
{% hint style="danger" %} Günümüzde bir binary dosyası bulmak çok garip bir durum! {% endhint %}
Yıkıcılar, programın bitişinden önce (ana işlev geri döndükten sonra) çalıştırılan işlevlerdir.
Bu işlevlerin adresleri, binary dosyanın .dtors
bölümünde saklanır ve bu nedenle, __DTOR_END__
içine bir shellcode adresi yazmayı başarırsanız, bu, programın sona ermeden önce çalıştırılacaktır.
Bu bölümün adresini şu şekilde alın:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
Genellikle DTOR işaretçilerini ffffffff
ve 00000000
değerleri arasında bulacaksınız. Yani eğer sadece bu değerleri görüyorsanız, bu kayıtlı herhangi bir fonksiyonun olmadığı anlamına gelir. Bu yüzden 00000000
değerini shellcode'ın adresiyle üzerine yazın ve onu çalıştırın.
{% hint style="warning" %} Tabii ki, daha sonra onu çağırmak için shellcode'ı saklamak için bir yer bulmanız gerekiyor. {% endhint %}
.fini_array
Temelde bu, programın bitişinden önce çağrılacak fonksiyonlar içeren bir yapıdır, .dtors
gibi. Bu, sadece bir adrese atlayarak shellcode'ınızı çağırabiliyorsanız veya zafiyeti ikinci kez sömürmek için tekrar main
'e gitmeniz gereken durumlarda ilginçtir.
objdump -s -j .fini_array ./greeting
./greeting: file format elf32-i386
Contents of section .fini_array:
8049934 a0850408
#Put your address in 0x8049934
Not: Bir .fini_array
işlevi çalıştırıldığında bir sonrakine geçer, bu nedenle birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak yalnızca buraya yerleştirilen bir işlevin yürütülmesini sağlar.
Not: .fini_array
içindeki girişler ters sırayla çağrılır, bu nedenle muhtemelen en sondan yazmaya başlamak istersiniz.
Sonsuz döngü
.fini_array
'yi sonsuz bir döngü elde etmek için kötüye kullanmak için burada ne yapıldığını kontrol edebilirsiniz: En az 2 girişiniz varsa .fini_array
içinde, şunları yapabilirsiniz:
- İlk yazmanızı zafiyetli keyfi yazma işlevini çağırmak için kullanın
- Ardından,
__libc_csu_fini
tarafından depolanan yığında dönüş adresini hesaplayın (tüm.fini_array
işlevlerini çağıran işlev) ve oraya__libc_csu_fini
adresini koyun - Bu,
__libc_csu_fini
'nin kendisini tekrar çağırmasını sağlayacak ve.fini_array
işlevlerini tekrar çalıştıracak, bu da zafiyetli WWW işlevini 2 kez çağıracak: biri için keyfi yazma ve diğeri__libc_csu_fini
'nin yığında tekrar dönüş adresini üzerine yazmak için kendisini tekrar çağırmak için.
{% hint style="danger" %}
Tam RELRO** ile,** bölüm .fini_array
salt okunur hale getirilir.
Yeni sürümlerde, [Kısmi RELRO] ile bile bölüm .fini_array
salt okunur hale getirilir.
{% endhint %}
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Destek HackTricks
- Abonelik planlarını kontrol edin!
- 💬 Discord grubuna katılın veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live** takip edin.**
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking püf noktalarını paylaşın.