2.9 KiB
WWW2Exec - .dtors & .fini_array
{{#include ../../banners/hacktricks-training.md}}
.dtors
Caution
Sasa ni ajabu sana kupata binary yenye sehemu ya .dtors!
Destructors ni kazi ambazo zina fanywa kabla ya programu kumalizika (baada ya main function kurudi).
Anwani za kazi hizi zimehifadhiwa ndani ya .dtors sehemu ya binary na kwa hivyo, ikiwa utaweza kuandika anwani kwenye shellcode katika __DTOR_END__, hiyo itakuwa fanywa kabla ya programu kumalizika.
Pata anwani ya sehemu hii kwa:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
Kawaida utaona alama za DTOR katikati ya thamani ffffffff na 00000000. Hivyo basi, ikiwa unaona tu hizo thamani, inamaanisha kwamba hakuna kazi iliyosajiliwa. Hivyo andika upya 00000000 na anwani ya shellcode ili kuitekeleza.
Warning
Bila shaka, kwanza unahitaji kupata mahali pa kuhifadhi shellcode ili baadaye uweze kuikalia.
.fini_array
Kimsingi hii ni muundo wenye kazi ambazo zitaitwa kabla ya programu kumalizika, kama .dtors. Hii ni ya kuvutia ikiwa unaweza kuita shellcode yako kwa kuruka kwenye anwani, au katika hali ambapo unahitaji kurudi kwenye main tena ili ku exploit udhaifu mara ya pili.
objdump -s -j .fini_array ./greeting
./greeting: file format elf32-i386
Contents of section .fini_array:
8049934 a0850408
#Put your address in 0x8049934
Kumbuka kwamba wakati kazi kutoka .fini_array inatekelezwa inahamia kwenye inayofuata, hivyo haitatekelezwa mara nyingi (kuzuia mizunguko isiyo na mwisho), lakini pia itakupa tu utekelezaji wa kazi iliyowekwa hapa.
Kumbuka kwamba entries katika .fini_array zinaitwa kwa mpangilio wa kinyume, hivyo labda unataka kuanza kuandika kutoka kwa ya mwisho.
Mzunguko wa milele
Ili kutumia .fini_array kupata mzunguko wa milele unaweza kuangalia kilichofanywa hapa: Ikiwa una angalau entries 2 katika .fini_array, unaweza:
- Tumia andiko lako la kwanza kuitisha kazi ya kuandika isiyo salama tena
- Kisha, hesabu anwani ya kurudi kwenye stack iliyohifadhiwa na
__libc_csu_fini(kazi inayoitisha kazi zote za.fini_array) na weka hapo anwani ya__libc_csu_fini - Hii itafanya
__libc_csu_finiitishe mwenyewe tena ikitekeleza kazi za.fini_arraytena ambazo zitaiteka kazi isiyo salama ya WWW mara 2: moja kwa kuandika isiyo salama na nyingine tena kuandika anwani ya kurudi ya__libc_csu_finikwenye stack ili kuitisha mwenyewe tena.
Caution
Kumbuka kwamba na Full RELRO, sehemu ya
.fini_arrayimefanywa kusomeka tu. Katika toleo jipya, hata na [Partial RELRO] sehemu ya.fini_arrayimefanywa kusomeka tu pia.
{{#include ../../banners/hacktricks-training.md}}