Print Stack Canary
Ongeza stack iliyochapishwa
Fikiria hali ambapo programu inayoweza kudhurika na kujaa kwa stack inaweza kutekeleza kazi ya puts ikionyesha sehemu ya kujaa kwa stack. Mshambuliaji anajua kwamba baiti ya kwanza ya canary ni baiti tupu (\x00
) na sehemu iliyobaki ya canary ni baiti za kubahatisha. Kisha, mshambuliaji anaweza kuunda kujaa ambalo linaharibu stack hadi kufikia baiti ya kwanza ya canary.
Kisha, mshambuliaji anaita utendaji wa puts katikati ya mzigo ambao utachapisha canary yote (isipokuwa baiti tupu ya kwanza).
Kwa habari hii, mshambuliaji anaweza kutengeneza na kutuma shambulio jipya akijua canary (katika kikao kimoja cha programu).
Kwa wazi, mkakati huu ni mdogo sana kwani mshambuliaji lazima aweze kuchapisha maudhui ya mzigo wake ili kuchota canary na kisha aweze kuunda mzigo mpya (katika kikao kimoja cha programu) na kutuma kujaa kwa buffer halisi.
Mifano ya CTF:
Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kujaa hadi baiti 0x00 ya canary kisha kuita puts na kuvuja. Kwa canary, kifaa cha ROP kinachoitwa kwa kutumia puts kuvuja anwani ya puts kutoka kwa GOT na kifaa cha ROP kuita
system('/bin/sh')
Biti 32, ARM, hakuna relro, canary, nx, hakuna pie. Kujaa na wito wa puts juu yake kuvuja canary + ret2lib kuita
system
na mnyororo wa ROP kwa pop r0 (arg/bin/sh
) na pc (anwani ya system)
Kusoma Kiholela
Kwa kusoma kiholela kama ile inayotolewa na vistringi vya muundo inaweza kuwa inawezekana kuvuja canary. Angalia mfano huu: https://ir0nstone.gitbook.io/notes/types/stack/canaries na unaweza kusoma kuhusu kutumia vistringi vya muundo kusoma anwani za kumbukumbu za kiholela katika:
pageFormat StringsChangamoto hii inatumia njia ya kawaida sana ya vistringi vya muundo kusoma canary kutoka kwa stack
Last updated