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 enigiets begin uitbuit, is dit interessant om 'n deel van die struktuur van 'n ELF-binêre lêer te verstaan:
ELF Basic InformationMet so baie 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 vloei van 'n program kan beheer:
Stapeloorvloeiings wat die terugkeerpunt van die stapel of die EBP -> ESP -> EIP oorskryf.
Mag dalk 'n Heeltaloorvloeiings moet misbruik om die oorvloei te veroorsaak
Of via Willekeurige Skrywes + Skryf Wat Waar na Uitvoering
Formaatreekse: Misbruik printf
om willekeurige inhoud in willekeurige adresse te skryf.
Reeksindeksering: Misbruik 'n swak ontwerpte indeksering om sekere rye te kan beheer en 'n willekeurige skryf te kry.
Mag dalk 'n Heeltaloorvloeiings moet misbruik om die oorvloei te veroorsaak
bof na WWW via ROP: Misbruik 'n bufferoorvloei om 'n ROP te bou en 'n WWW te kan kry.
Jy kan die Skryf Wat Waar na Uitvoering tegnieke vind in:
Write What Where 2 ExecIets om in ag te neem is dat gewoonlik net een uitbuiting van 'n kwesbaarheid dalk nie genoeg wees om 'n suksesvolle uitbuiting uit te voer nie, veral as sekere beskermings omseil moet word. Daarom is dit interessant om oor sommige opsies te bespreek om 'n enkele kwesbaarheid verskeie kere uitbuitbaar te maak in dieselfde uitvoering van die binêre lêer:
Skryf in 'n ROP-ketting die adres van die main
-funksie of na die adres waar die kwesbaarheid plaasvind.
Deur 'n behoorlike ROP-ketting te beheer, kan jy dalk al die aksies in daardie ketting uitvoer
Skryf die exit
-adres in GOT (of enige ander funksie wat deur die binêre lêer gebruik word voordat dit eindig) die adres om terug te keer na die kwesbaarheid
Soos verduidelik in .fini_array, stoor 2 funksies hier, een om die kwesbaarheid weer te roep en 'n ander om**__libc_csu_fini
** te roep wat weer die funksie van .fini_array
sal roep.
ret2win: Daar is 'n funksie in die kode wat jy moet roep (miskien met sekere spesifieke parameters) om die vlag te kry.
In 'n bof met PIE, sal jy dit moet omseil
In 'n bof met kanarie, sal jy dit moet omseil
As jy verskeie parameters moet instel om die ret2win-funksie korrek te roep, kan jy gebruik maak van:
'n ROP ketting as daar genoeg gadgets is om al die parameters voor te berei
SROP (indien jy hierdie syscall kan roep) om 'n groot aantal registers te beheer
Deur 'n Skryf Wat Waar te gebruik, kan jy ander kwesbaarhede (nie bof nie) misbruik om die wen
-funksie te roep.
Aanwysers wat omleiding gee: In geval die stapel aanwysers bevat na 'n funksie wat geroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (stelsel of printf), is dit moontlik om daardie adres te oorskryf.
Ongeïnisialiseerde veranderlikes: Jy weet nooit.
(Stapel) Skelkode: Dit is nuttig om 'n skelkode in die stapel te stoor voor of na die oorskrywing van die terugkeerpunt en dan daarnaar te spring om dit uit te voer:
In enige geval, as daar 'n kanarie** is, in 'n gewone bof sal jy dit moet omseil (leak)**
Met ASLR sal jy tegnieke soos ret2esp/ret2reg moet gebruik om daarheen te spring
Dit sal skelkode met 'n ROP-ketting meng.
Ret2syscall: Nuttig om execve
te roep om willekeurige bevele uit te voer. Jy moet in staat wees om die gadgets te vind om die spesifieke syscall met die parameters te roep.
SROP kan nuttig wees om die ret2execve voor te berei.
Ret2lib: Nuttig om 'n funksie van 'n biblioteek (gewoonlik van libc
) te roep soos system
met voorbereide argumente (bv. '/bin/sh'
). Jy het die binêre nodig om die biblioteek te laai met die funksie wat jy wil roep (gewoonlik libc).
As staties saamgestel en geen PIE, sal die adres van system
en /bin/sh
nie verander nie, dus is dit moontlik om hulle staties te gebruik.
Sondef ASLR en met kennis van die gelaaide libc weergawe, sal die adres van system
en /bin/sh
nie verander nie, dus is dit moontlik om hulle staties te gebruik.
Gebruik ret2dlresolve
om die adres van system
op te los en dit te roep
Oorbrug ASLR en bereken die adres van system
en '/bin/sh'
in die geheue.
Bypass PIE
Vind die libc
weergawe wat gebruik word (leak 'n paar funksie-adresse)
Kontroleer die vorige scenarios met ASLR om voort te gaan.
Stack Pivoting / EBP2Ret / EBP Chaining: Beheer die ESP om RET te beheer deur die gestoorde EBP in die stapel.
Nuttig vir een-vir-een stapel oorvloei
Nuttig as 'n alternatiewe manier om EIP te beheer terwyl EIP misbruik word om die lading in die geheue te konstrueer en dan daarna te spring via EBP
Pointers Redirecting: In geval die stapel aanwysers bevat na 'n funksie wat geroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (system of printf), is dit moontlik om daardie adres te oorskryf.
Ongeïnisialiseerde veranderlikes: Jy weet nooit