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
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
.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_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
- Angalia mpango wa usajili!
- Jiunge na π¬ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter π¦ @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.