WWW2Exec - .dtors & .fini_array
Last updated
Last updated
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)
Günümüzde bir binary dosyası bulmak çok garip bir durum!
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:
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.
Tabii ki, daha sonra onu çağırmak için shellcode'ı saklamak için bir yer bulmanız gerekiyor.
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.
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.
.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.
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.
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)