Basic Stack Binary Exploitation Methodology
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Voordat jy begin om enigiets te exploiteer, is dit interessant om 'n deel van die struktuur van 'n ELF binêre te verstaan:
Met soveel tegnieke is dit goed om 'n skema te hê wanneer elke tegniek nuttig sal wees. Let daarop dat dieselfde beskermings verskillende tegnieke sal beïnvloed. Jy kan maniere vind om die beskermings in elke beskermingsafdeling te omseil, maar nie in hierdie metodologie nie.
Daar is verskillende maniere waarop jy die stroom van 'n program kan beheer:
Stap Oorloop wat die terugwysers van die stap of die EBP -> ESP -> EIP oorskryf.
Mag nodig wees om 'n Heelgetal Oorloop te misbruik om die oorloop te veroorsaak.
Of via Arbitraire Skrywe + Skryf Wat Waar na Uitvoering.
Formaat stringe: Misbruik printf
om arbitraire inhoud in arbitraire adresse te skryf.
Array Indeksasie: Misbruik 'n swak ontwerpte indeksasie om sekere arrays te kan beheer en 'n arbitraire skrywe te verkry.
Mag nodig wees om 'n Heelgetal Oorloop te misbruik om die oorloop te veroorsaak.
bof na WWW via ROP: Misbruik 'n bufferoorloop om 'n ROP te konstrueer en in staat te wees om 'n WWW te verkry.
Jy kan die Skryf Wat Waar na Uitvoering tegnieke in:
Iets om in ag te neem is dat gewoonlik net een eksploit van 'n kwesbaarheid dalk nie genoeg is om 'n suksesvolle eksploit uit te voer nie, veral omdat sommige beskermings omseil moet word. Daarom is dit interessant om 'n paar opsies te bespreek om 'n enkele kwesbaarheid verskeie kere exploiteerbaar te maak in dieselfde uitvoering van die binêre:
Skryf in 'n ROP ketting die adres van die main
funksie of na die adres waar die kwesbaarheid voorkom.
Deur 'n behoorlike ROP-ketting te beheer, mag jy in staat wees om al die aksies in daardie ketting uit te voer.
Skryf in die exit
adres in GOT (of enige ander funksie wat deur die binêre gebruik word voordat dit eindig) die adres om terug na die kwesbaarheid te gaan.
Soos verduidelik in .fini_array, stoor 2 funksies hier, een om die kwesbaarheid weer aan te roep en 'n ander om __libc_csu_fini
aan te roep wat die funksie van .fini_array
weer sal aanroep.
ret2win: Daar is 'n funksie in die kode wat jy moet aanroep (miskien met 'n paar spesifieke parameters) om die vlag te verkry.
In 'n bof met PIE, sal jy dit moet omseil.
In 'n bof met canary, sal jy dit moet omseil.
As jy verskeie parameters moet stel om die ret2win funksie korrek aan te roep, kan jy gebruik maak van:
'n ROP ketting as daar genoeg gadgets is om al die parameters voor te berei.
SROP (in die geval jy hierdie syscall kan aanroep) om baie registers te beheer.
Via 'n Skryf Wat Waar kan jy ander kwesbaarhede (nie bof nie) misbruik om die win
funksie aan te roep.
Wysers Herlei: In die geval die stap wysers bevat na 'n funksie wat gaan aangeroep word of na 'n string wat deur 'n interessante funksie (system of printf) gaan gebruik word, is dit moontlik om daardie adres te oorskryf.
Ongeïnitialiseerde veranderlikes: Jy weet nooit.
(Stap) Shellcode: Dit is nuttig om 'n shellcode in die stap te stoor voordat of nadat die terugwyser oorgeskryf is en dan na dit te spring om dit uit te voer:
In enige geval, as daar 'n canary, in 'n regte bof sal jy dit moet omseil (leak).
Met ASLR sal jy tegnieke soos ret2esp/ret2reg moet gebruik om daarheen te spring.
Dit sal shellcode met 'n ROP-ketting meng.
Ret2syscall: Nuttig om execve
aan te roep om arbitraire opdragte uit te voer. Jy moet in staat wees om die gadgets te vind om die spesifieke syscall met die parameters aan te roep.
SROP kan nuttig wees om die ret2execve voor te berei.
Ret2lib: Nuttig om 'n funksie van 'n biblioteek (gewoonlik van libc
) soos system
met 'n paar voorbereide argumente (bv. '/bin/sh'
) aan te roep. Jy moet die binêre laat laai die biblioteek met die funksie wat jy wil aanroep (libc gewoonlik).
As statisch gecompileer en geen PIE, sal die adres van system
en /bin/sh
nie verander nie, so dit is moontlik om dit staties te gebruik.
Sonder ASLR en kennis van die libc weergawe wat gelaai is, sal die adres van system
en /bin/sh
nie verander nie, so dit is moontlik om dit staties te gebruik.
Gebruik ret2dlresolve
om die adres van system
op te los en dit aan te roep.
Oorwin ASLR en bereken die adres van system
en '/bin/sh'
in geheue.
Oorwin PIE.
Vind die libc
weergawe wat gebruik word (leak 'n paar funksie adresse).
Kontroleer die vorige scenario's met ASLR om voort te gaan.
Stap Pivoting / EBP2Ret / EBP Chaining: Beheer die ESP om RET deur die gestoor EBP in die stap te beheer.
Nuttig vir off-by-one stap oorloope.
Nuttig as 'n alternatiewe manier om EIP te beheer terwyl EIP misbruik word om die payload in geheue te konstrueer en dan daarheen te spring via EBP.
Wysers Herlei: In die geval die stap wysers bevat na 'n funksie wat gaan aangeroep word of na 'n string wat deur 'n interessante funksie (system of printf) gaan gebruik word, is dit moontlik om daardie adres te oorskryf.
Ongeïnitialiseerde veranderlikes: Jy weet nooit.
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)