WWW2Exec - .dtors & .fini_array
Reading time: 3 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
.dtors
caution
Günümüzde bir .dtors bölümüne sahip bir ikili bulmak çok garip!
Yıkıcılar, program sona ermeden önce (main fonksiyonu döndükten sonra) çalıştırılan fonksiyonlardır.
Bu fonksiyonların adresleri, ikilinin .dtors
bölümünde saklanır ve bu nedenle, eğer __DTOR_END__
adresine bir shellcode yazmayı başarırsanız, bu, program sona ermeden önce çalıştırılacaktır.
Bu bölümün adresini almak için:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
Genellikle DTOR işaretlerini ffffffff
ve 00000000
değerleri arasında bulursunuz. Yani bu değerleri gördüğünüzde, kayıtlı bir fonksiyon yoktur anlamına gelir. Bu yüzden 00000000
değerini shellcode'un adresine overwrite edin.
warning
Elbette, önce shellcode'u saklayacak bir yer bulmanız gerekiyor, böylece daha sonra çağırabilirsiniz.
.fini_array
Temelde bu, program sona ermeden önce çağrılacak fonksiyonlar ile bir yapıdır, tıpkı .dtors
gibi. Bu, shellcode'unuzu sadece bir adrese atlayarak çağırabiliyorsanız veya vulnerabiliteyi ikinci kez istismar etmek için tekrar main
'e dönmeniz 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 edin ki .fini_array
'den bir fonksiyon çalıştırıldığında bir sonraki fonksiyona geçer, bu nedenle birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak burada yer alan fonksiyonun yalnızca 1 çalıştırılmasını sağlar.
.fini_array
'deki girişlerin ters sırayla çağrıldığını unutmayın, bu nedenle sonuncusundan yazmaya başlamanız muhtemelen daha iyi olacaktır.
Sonsuz döngü
.fini_array
'i kötüye kullanarak bir sonsuz döngü elde etmek için burada ne yapıldığını kontrol edebilirsiniz: Eğer .fini_array
'de en az 2 girişiniz varsa, şunları yapabilirsiniz:
- İlk yazmanızı savunmasız rastgele yazma fonksiyonunu tekrar çağırmak için kullanın
- Ardından,
__libc_csu_fini
tarafından saklanan yığın üzerindeki dönüş adresini hesaplayın (tüm.fini_array
fonksiyonlarını çağıran fonksiyon) ve oraya__libc_csu_fini
'nin adresini koyun - Bu,
__libc_csu_fini
'nin kendisini tekrar çağırmasına neden olacak ve.fini_array
fonksiyonlarını tekrar çalıştıracak, bu da savunmasız WWW fonksiyonunu 2 kez çağıracaktır: biri rastgele yazma için ve diğeri de yığında__libc_csu_fini
'nin dönüş adresini tekrar yazmak için kendisini tekrar çağırmak üzere.
caution
Full RELRO, bölüm .fini_array
salt okunur hale getirilmiştir.
Daha yeni sürümlerde, [Partial RELRO] ile bile bölüm .fini_array
salt okunur hale getirilmiştir.
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.