WWW2Exec - .dtors & .fini_array
Last updated
Last updated
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Günümüzde bir .dtors bölümüne sahip bir ikili bulmak çok garip!
Yıkıcılar, program tamamlanmadan ö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__
içine bir shellcode adresi yazmayı başarırsanız, bu, program sona ermeden önce çalıştırılacaktır.
Bu bölümün adresini almak için:
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.
Tabii ki, önce shellcode'u daha sonra çağırmak için saklayacak bir yer bulmanız gerekiyor.
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 açığı ikinci kez istismar etmek için tekrar main'e dönmeniz gereken durumlarda ilginçtir.
Not edin ki .fini_array
'dan 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
'daki girişlerin ters sırayla çağrıldığını unutmayın, bu nedenle muhtemelen sonuncusundan yazmaya başlamak istersiniz.
.fini_array
'ı kötüye kullanarak bir sonsuz döngü elde etmek için burada ne yapıldığını kontrol edebilirsiniz: Eğer .fini_array
'da en az 2 girişiniz varsa, şunları yapabilirsiniz:
İlk yazmanızı vulnerable arbitrary write function'ı tekrar çağırmak için kullanın
Ardından, __libc_csu_fini
tarafından saklanan yığın içindeki 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 vulnerable WWW fonksiyonunu 2 kez çağıracaktır: biri arbitrary write için ve diğeri de yığında __libc_csu_fini
'nin dönüş adresini tekrar yazmak için kendisini tekrar çağırmak üzere.
Full RELRO ile dikkat edin, .fini_array
bölümü salt okunur hale getirilmiştir. Daha yeni sürümlerde, [Partial RELRO] ile bile .fini_array
bölümü salt okunur hale getirilmiştir.
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)