Ret2win
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)
Ret2win changamoto ni aina maarufu katika mashindano ya Capture The Flag (CTF), hasa katika kazi zinazohusisha binary exploitation. Lengo ni kutumia udhaifu katika binary iliyotolewa ili kutekeleza kazi maalum, isiyokuwa na mwito ndani ya binary, mara nyingi ikijulikana kama win
, flag
, n.k. Kazi hii, inapotekelezwa, kawaida huprinti bendera au ujumbe wa mafanikio. Changamoto hii kwa kawaida inahusisha kuandika upya anwani ya kurudi kwenye stack ili kuelekeza mtiririko wa utekelezaji kwenye kazi inayotakiwa. Hapa kuna maelezo ya kina zaidi na mifano:
Fikiria programu rahisi ya C yenye udhaifu na kazi ya win
ambayo tunakusudia kuitwa:
Ili kukusanya programu hii bila ulinzi wa stack na ASLR imezimwa, unaweza kutumia amri ifuatayo:
-m32
: Tunga programu kama binary ya 32-bit (hii ni hiari lakini ni ya kawaida katika changamoto za CTF).
-fno-stack-protector
: Zima ulinzi dhidi ya stack overflows.
-z execstack
: Ruhusu utekelezaji wa msimbo kwenye stack.
-no-pie
: Zima Position Independent Executable ili kuhakikisha kwamba anwani ya kazi ya win
haibadiliki.
-o vulnerable
: Patia faili ya matokeo jina vulnerable
.
Kwa exploit, tutatumia pwntools, mfumo wenye nguvu wa CTF wa kuandika exploits. Skripti ya exploit itaunda payload ili kujaa buffer na kuandika anwani ya kurudi kwa anwani ya kazi ya win
.
Ili kupata anwani ya kazi ya win
, unaweza kutumia gdb, objdump, au chombo kingine chochote kinachokuruhusu kukagua faili za binary. Kwa mfano, kwa kutumia objdump
, unaweza kutumia:
Hii amri itaonyesha mkusanyiko wa kazi ya win
, ikiwa ni pamoja na anwani yake ya kuanzia.
Script ya Python inatuma ujumbe ulioandaliwa kwa uangalifu ambao, unaposhughulikiwa na vulnerable_function
, unavunja buffer na kuandika upya anwani ya kurudi kwenye stack kwa anwani ya win
. Wakati vulnerable_function
inarudi, badala ya kurudi kwa main
au kutoka, inaruka kwenda win
, na ujumbe unachapishwa.
PIE inapaswa kuzuiliwa ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa kila wakati sawa na unahitaji kuvuja ili kubaini wapi kazi ya win imepakiwa. Katika baadhi ya matukio, wakati kazi inayosababisha overflow ni read
au sawa, unaweza kufanya Partial Overwrite ya byte 1 au 2 kubadilisha anwani ya kurudi kuwa kazi ya win. Kwa sababu ya jinsi ASLR inavyofanya kazi, nibble tatu za mwisho za hex hazijachanganywa, hivyo kuna 1/16 nafasi (1 nibble) ya kupata anwani sahihi ya kurudi.
Stack Canaries pia zinapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
32bit, hakuna ASLR
64 bits zikiwa na ASLR, na kuvuja kwa anwani ya bin
64 bits, hakuna ASLR
32 bits, hakuna ASLR, overflow ndogo mara mbili, ya kwanza kujaa stack na kuongeza ukubwa wa overflow ya pili
32 bit, relro, hakuna canary, nx, hakuna pie, format string ili kuandika anwani ya fflush
na kazi ya win (ret2win)
32 bit, nx, hakuna kingine, kuandika sehemu ya EIP (1Byte) ili kuita kazi ya win
32 bit, nx, hakuna kingine, kuandika sehemu ya EIP (1Byte) ili kuita kazi ya win
Programu inathibitisha tu byte ya mwisho ya nambari ili kuangalia ukubwa wa ingizo, kwa hivyo inawezekana kuongeza saizi yoyote mradi byte ya mwisho iko ndani ya upeo unaoruhusiwa. Kisha, ingizo linaunda overflow ya buffer inayotumiwa na ret2win.
64 bit, relro, hakuna canary, nx, pie. Kuandika sehemu ili kuita kazi ya win (ret2win)
arm64, PIE, inatoa kuvuja kwa PIE kazi ya win kwa kweli ni kazi 2 hivyo ROP gadget inayopiga kazi 2
ARM64, off-by-one ili kuita kazi ya win
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)