BF Forked & Threaded Stack Canaries
Last updated
Last updated
Jifunze & zoezi la AWS Hacking:Mafunzo ya HackTricks AWS Red Team Expert (ARTE) Jifunze & zoezi la GCP Hacking: Mafunzo ya HackTricks GCP Red Team Expert (GRTE)
Ikiwa unakabiliana na binary iliyolindwa na canary na PIE (Position Independent Executable) labda unahitaji kupata njia ya kuzipuuza.
Tambua kwamba checksec
inaweza isigundue kuwa binary imekingwa na canary ikiwa ilikompiliwa tuli na haiwezi kutambua kazi.
Hata hivyo, unaweza kugundua hii kwa mikono ikiwa unagundua kwamba thamani imesave kwenye stack mwanzoni mwa wito wa kazi na thamani hii inachunguzwa kabla ya kutoka.
Njia bora ya kuzipuuza canary rahisi ni ikiwa binary ni programu inayoforka michakato ya watoto kila wakati unapounda uhusiano mpya nayo (huduma ya mtandao), kwa sababu kila wakati unapounganisha canary ile ile itatumika.
Kwa hivyo, njia bora ya kuzipuuza canary ni kwa kuzipiga kwa nguvu char kwa char, na unaweza kugundua ikiwa byte ya canary iliyoguessed ilikuwa sahihi kwa kuangalia ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu, kazi inazipiga kwa nguvu 8 Bytes canary (x64) na kutofautisha kati ya byte iliyoguessed kwa usahihi na byte mbaya tu kwa kuchunguza ikiwa jibu limetumwa na server (njia nyingine katika hali nyingine inaweza kuwa kutumia jaribu/kinyume):
Mfano huu umetekelezwa kwa 64bits lakini unaweza kutekelezwa kwa urahisi kwa bits 32.
Hii imeboreshwa kwa bits 32, lakini inaweza kubadilishwa kwa urahisi kuwa bits 64. Pia eleza kwamba kwa mfano huu programu inatarajia kwanza byte kuashiria ukubwa wa matokeo na mzigo.
Vitambulisho vya mchakato huo huo pia vitashiriki ishara sawa ya canary, hivyo itakuwa inawezekana kufanya nguvu ya brute kwa canary ikiwa binary inazalisha wima mpya kila wakati shambulio linatokea.
Zaidi ya hayo, kujaza kijazo katika kazi iliyofungwa iliyolindwa na canary inaweza kutumika kubadilisha canary kuu iliyohifadhiwa kwenye TLS. Hii ni kwa sababu, inaweza kuwa inawezekana kufikia nafasi ya kumbukumbu ambapo TLS inahifadhiwa (na kwa hiyo, canary) kupitia bof kwenye steki ya wima. Kama matokeo, kinga ni bure kwa sababu ukaguzi unatumika na vitambulisho viwili ambavyo ni sawa (ingawa vimebadilishwa). Shambulio hili hutekelezwa 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 ambao unataja kwamba kawaida TLS inahifadhiwa na mmap
na wakati steki ya wima inapoundwa pia inazalishwa na mmap
kulingana na hili, ambalo linaweza kuruhusu kujaza kama ilivyoonyeshwa katika andiko la awali.
Biti 64, hakuna PIE, nx, BF canary, andika kwenye kumbukumbu fulani ROP kuita execve
na ruka hapo.