WWW2Exec - .dtors & .fini_array

Reading time: 3 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

.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:

bash
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.

bash
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_fini itishe mwenyewe tena ikitekeleza kazi za .fini_array tena ambazo zitaiteka kazi isiyo salama ya WWW mara 2: moja kwa kuandika isiyo salama na nyingine tena kuandika anwani ya kurudi ya __libc_csu_fini kwenye stack ili kuitisha mwenyewe tena.

caution

Kumbuka kwamba na Full RELRO, sehemu ya .fini_array imefanywa kusomeka tu. Katika toleo jipya, hata na [Partial RELRO] sehemu ya .fini_array imefanywa kusomeka tu pia.

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks