BF Forked & Threaded Stack Canaries
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ikiwa unakutana na binary iliyo na kinga ya canary na PIE (Position Independent Executable) huenda ukahitaji kupata njia ya kuipita.
Kumbuka kwamba checksec
huenda isipate kwamba binary ina kinga ya canary ikiwa hii ilikusanywa kwa njia ya statically na haiwezi kutambua kazi hiyo.
Hata hivyo, unaweza kugundua hili kwa mikono ikiwa unapata kwamba thamani imehifadhiwa kwenye stack mwanzoni mwa wito wa kazi na thamani hii inakaguliwa kabla ya kutoka.
Njia bora ya kuipita canary rahisi ni ikiwa binary ni programu inayo fork watoto mchakato kila wakati unapoanzisha muunganisho mpya nayo (huduma ya mtandao), kwa sababu kila wakati unapojiunga nayo canary ile ile itatumika.
Basi, njia bora ya kuipita canary ni tu kujaribu kwa nguvu kila herufi, na unaweza kugundua ikiwa byte ya canary uliyokisia ilikuwa sahihi kwa kuangalia ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu kazi ina jaribu kwa nguvu canary ya 8 Bytes (x64) na kutofautisha kati ya byte iliyokisiwa sahihi na byte mbaya kwa kuangalia ikiwa jibu linatumwa nyuma na seva (njia nyingine katika hali nyingine inaweza kuwa kutumia jaribu/kukataa):
Mfano huu umewekwa kwa 64bits lakini unaweza kutekelezwa kwa urahisi kwa 32 bits.
Hii imewekwa kwa bit 32, lakini hii inaweza kubadilishwa kwa urahisi kuwa bit 64. Pia kumbuka kwamba kwa mfano huu programu inatarajia kwanza byte moja kuashiria ukubwa wa ingizo na payload.
Threads za mchakato mmoja pia zitashiriki token ya canary sawa, kwa hivyo itakuwa inawezekana kujaribu nguvu canary ikiwa binary inazalisha thread mpya kila wakati shambulio linapotokea.
Zaidi ya hayo, overflow ya buffer katika kazi iliyo na thread iliyolindwa na canary inaweza kutumika kubadilisha canary mkuu iliyohifadhiwa katika TLS. Hii ni kwa sababu, inaweza kuwa inawezekana kufikia nafasi ya kumbukumbu ambapo TLS inahifadhiwa (na kwa hivyo, canary) kupitia bof katika stack ya thread. Kwa matokeo, kinga ni bure kwa sababu ukaguzi unatumika na canaries mbili ambazo ni sawa (ingawa zimebadilishwa). Shambulio hili linafanywa katika andiko: http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads
Angalia pia uwasilishaji wa https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015 ambayo inasema kwamba kwa kawaida TLS inahifadhiwa na mmap
na wakati stack ya thread inaundwa pia inazalishwa na mmap
kulingana na hii, ambayo inaweza kuruhusu overflow kama ilivyoonyeshwa katika andiko la awali.
64 bits, no PIE, nx, BF canary, andika katika kumbukumbu fulani ROP ili kuita execve
na kuruka huko.