WWW2Exec - .dtors & .fini_array
.dtors
Leo ni kigeni sana kupata faili ya binary na sehemu ya .dtors!
Waharibifu ni kazi ambazo zina tekelezwa kabla ya programu kukamilika (baada ya kazi ya main
kukamilika).
Anwani za kazi hizi zimehifadhiwa ndani ya sehemu ya .dtors
ya binary na kwa hivyo, ikiwa utaweza kuandika anwani ya shellcode katika __DTOR_END__
, hiyo itatekelezwa kabla ya programu kukamilika.
Pata anwani ya sehemu hii na:
Kawaida utapata alama za DTOR kati ya thamani ffffffff
na 00000000
. Kwa hivyo ikiwa unaona thamani hizo tu, inamaanisha kwamba hakuna kazi iliyoandikishwa. Kwa hivyo badilisha 00000000
na anwani ya shellcode ili kuitekeleza.
Kwa hakika, kwanza unahitaji kupata mahali pa kuhifadhi shellcode ili baadaye uitee.
.fini_array
Kimsingi hii ni muundo na kazi ambazo zitaitwa kabla ya programu kukamilika, 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 kutumia udhaifu mara ya pili.
Mzunguko wa milele
Ili kutumia .fini_array
kupata mzunguko wa milele unaweza angalia kilichofanyika hapa: Ikiwa una angalau vitu 2 katika .fini_array
, unaweza:
Tumia andika yako ya kwanza kuita kazi ya andika isiyo na mpangilio tena
Kisha, hesabu anwani ya kurudi kwenye stakabadilishwa na
__libc_csu_fini
(kazi inayoitwa na.fini_array
zote) na weka huko anwani ya__libc_csu_fini
Hii itafanya
__libc_csu_fini
kuita yenyewe tena ikitekeleza kazi za.fini_array
tena ambayo itaita kazi ya WWW isiyo na kinga mara 2: moja kwa andika isiyo na mpangilio na nyingine kwa kubadilisha tena anwani ya kurudi ya__libc_csu_fini
kwenye stakabadilisha kuita yenyewe tena.
Tambua kwamba na Full RELRO, sehemu ya .fini_array
inafanywa kuwa soma-tu. Katika toleo jipya, hata na [Partial RELRO] sehemu ya .fini_array
inafanywa kuwa soma-tu pia.
Last updated