Ret2win
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ret2win uitdagings is 'n gewilde kategorie in Capture The Flag (CTF) kompetisies, veral in take wat binarie uitbuiting behels. Die doel is om 'n kwesbaarheid in 'n gegewe binêre te benut om 'n spesifieke, nie-aangeroep funksie binne die binêre uit te voer, wat dikwels iets soos win
, flag
, ens. genoem word. Hierdie funksie, wanneer dit uitgevoer word, druk gewoonlik 'n vlag of 'n suksesboodskap uit. Die uitdaging behels tipies die oorskryding van die terug adres op die stapel om die uitvoeringsvloei na die gewenste funksie te lei. Hier is 'n meer gedetailleerde verduideliking met voorbeelde:
Oorweeg 'n eenvoudige C-program met 'n kwesbaarheid en 'n win
funksie wat ons van plan is om aan te roep:
Om hierdie program te kompileer sonder stapelbeskerming en met ASLR gedeaktiveer, kan jy die volgende opdrag gebruik:
-m32
: Compile die program as 'n 32-bit binêre (dit is opsioneel maar algemeen in CTF uitdagings).
-fno-stack-protector
: Deaktiveer beskerming teen stapel oorgange.
-z execstack
: Laat uitvoering van kode op die stapel toe.
-no-pie
: Deaktiveer Posisie Onafhanklike Uitvoerbare om te verseker dat die adres van die win
funksie nie verander nie.
-o vulnerable
: Noem die uitvoer lêer vulnerable
.
Vir die exploit, sal ons pwntools gebruik, 'n kragtige CTF raamwerk vir die skryf van exploits. Die exploit skrip sal 'n payload skep om die buffer te oorloop en die terugkeer adres met die adres van die win
funksie te oorskryf.
Om die adres van die win
funksie te vind, kan jy gdb, objdump, of enige ander hulpmiddel gebruik wat jou toelaat om binêre lêers te ondersoek. Byvoorbeeld, met objdump
, kan jy gebruik:
This command will show you the assembly of the win
function, including its starting address.
Die Python-skrip stuur 'n sorgvuldig saamgestelde boodskap wat, wanneer dit deur die vulnerable_function
verwerk word, die buffer oorloop en die terugkeeradres op die stapel met die adres van win
oorskryf. Wanneer vulnerable_function
terugkeer, in plaas daarvan om na main
terug te keer of te verlaat, spring dit na win
, en die boodskap word gedruk.
PIE moet gedeaktiveer word sodat die adres betroubaar is oor uitvoerings of die adres waar die funksie gestoor sal word nie altyd dieselfde sal wees nie en jy 'n lek nodig sal hê om uit te vind waar die win-funksie gelaai is. In sommige gevalle, wanneer die funksie wat die oorloop veroorsaak read
of soortgelyk is, kan jy 'n Deeltelike Oorskrywing van 1 of 2 bytes doen om die terugkeeradres na die win-funksie te verander. Vanweë hoe ASLR werk, is die laaste drie hex nibble nie gerandomiseer nie, so daar is 'n 1/16 kans (1 nibble) om die korrekte terugkeeradres te kry.
Stack Canaries moet ook gedeaktiveer word of die gecompromitteerde EIP terugkeeradres sal nooit gevolg word nie.
32bit, geen ASLR
64 bits met ASLR, met 'n lek van die bin adres
64 bits, geen ASLR
32 bits, geen ASLR, dubbele klein oorloop, eerste om die stapel oor te loop en die grootte van die tweede oorloop te vergroot
32 bit, relro, geen kanarie, nx, geen pie, formaat string om die adres fflush
met die win-funksie (ret2win) te oorskryf
32 bit, nx, niks anders nie, gedeeltelike oorskrywing van EIP (1Byte) om die win-funksie aan te roep
32 bit, nx, niks anders nie, gedeeltelike oorskrywing van EIP (1Byte) om die win-funksie aan te roep
Die program valideer slegs die laaste byte van 'n getal om die grootte van die invoer te kontroleer, daarom is dit moontlik om enige grootte by te voeg solank die laaste byte binne die toegelate reeks is. Dan skep die invoer 'n buffer oorloop wat met 'n ret2win uitgebuit word.
64 bit, relro, geen kanarie, nx, pie. Gedeeltelike oorskrywing om die win-funksie (ret2win) aan te roep
arm64, PIE, dit gee 'n PIE lek die win-funksie is eintlik 2 funksies so ROP gadget wat 2 funksies aanroep
ARM64, off-by-one om 'n win-funksie aan te roep
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)