.. | ||
ret2win | ||
stack-shellcode | ||
pointer-redirecting.md | ||
README.md | ||
ret2win.md | ||
stack-pivoting-ebp2ret-ebp-chaining.md | ||
stack-shellcode.md | ||
uninitialized-variables.md |
Stapel Oorloop
{% hint style="success" %}
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Wat is 'n Stapel Oorloop
'n stapel oorloop is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stapel skryf as wat dit toegeken is om te hou. Hierdie oortollige data sal aangrensende geheue ruimte oorskryf, wat lei tot die korrupsie van geldige data, onderbreking van die beheerstroom, en moontlik die uitvoering van kwaadwillige kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op invoer uitvoer nie.
Die hoofprobleem van hierdie oorskrywing is dat die gestoor instruksie-aanwyser (EIP/RIP) en die gestoor basisaanwyser (EBP/RBP) om na die vorige funksie terug te keer, op die stapel gestoor word. Daarom sal 'n aanvaller in staat wees om dit te oorskryf en die uitvoeringsvloei van die program te beheer.
Die kwesbaarheid ontstaan gewoonlik omdat 'n funksie meer bytes binne die stapel kopieer as die hoeveelheid wat daarvoor toegeken is, en kan dus ander dele van die stapel oorskryf.
Sommige algemene funksies wat kwesbaar is hiervoor is: strcpy
, strcat
, sprintf
, gets
... Ook, funksies soos fgets
, read
& memcpy
wat 'n lengte argument neem, kan op 'n kwesbare manier gebruik word as die gespesifiseerde lengte groter is as die toegeken.
Byvoorbeeld, die volgende funksies kan kwesbaar wees:
void vulnerable() {
char buffer[128];
printf("Enter some text: ");
gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer);
}
Vind van Stap Oorloop verskuiwings
Die mees algemene manier om stap oorloop te vind, is om 'n baie groot invoer van A
s te gee (bv. python3 -c 'print("A"*1000)'
) en 'n Segmentation Fault
te verwag wat aandui dat die adres 0x41414141
probeer is om toegang te verkry.
Boonop, sodra jy gevind het dat daar 'n Stap Oorloop kwesbaarheid is, sal jy die verskuiwing moet vind totdat dit moontlik is om die terugadres te oorskry, hiervoor word gewoonlik 'n De Bruijn-sekwensie gebruik. Wat vir 'n gegewe alfabet van grootte k en subreekse van lengte n 'n sikliese sekwensie is waarin elke moontlike subreeks van lengte _n_** presies een keer** as 'n aaneengeskakelde subreeks verskyn.
Op hierdie manier, in plaas daarvan om handmatig uit te vind watter verskuiwing nodig is om die EIP te beheer, is dit moontlik om een van hierdie sekwensies as opvulling te gebruik en dan die verskuiwing van die bytes wat dit oorgeskryf het, te vind.
Dit is moontlik om pwntools hiervoor te gebruik:
from pwn import *
# Generate a De Bruijn sequence of length 1000 with an alphabet size of 256 (byte values)
pattern = cyclic(1000)
# This is an example value that you'd have found in the EIP/IP register upon crash
eip_value = p32(0x6161616c)
offset = cyclic_find(eip_value) # Finds the offset of the sequence in the De Bruijn pattern
print(f"The offset is: {offset}")
of GEF:
#Patterns
pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp
Exploiting Stack Overflows
Tydens 'n oorgang (as die oorgang grootte groot genoeg is) sal jy in staat wees om oor te skryf waardes van plaaslike veranderlikes binne die stapel totdat jy die EBP/RBP en EIP/RIP (of selfs meer) bereik.
Die mees algemene manier om hierdie tipe kwesbaarheid te misbruik, is deur die terug adres te verander sodat wanneer die funksie eindig, die beheer vloei na waar die gebruiker gespesifiseer het in hierdie pointer.
egter, in ander scenario's mag dit net om te skryf van sommige veranderlikes waardes in die stapel genoeg wees vir die uitbuiting (soos in maklike CTF uitdagings).
Ret2win
In hierdie tipe CTF uitdagings, is daar 'n funksie binne die binêre wat nooit aangeroep word en wat jy moet aanroep om te wen. Vir hierdie uitdagings moet jy net die offset vind om die terug adres te oorskryf en die adres van die funksie vind om aan te roep (gewoonlik ASLR sal gedeaktiveer wees) sodat wanneer die kwesbare funksie terugkeer, die verborge funksie aangeroep sal word:
{% content-ref url="ret2win/" %} ret2win {% endcontent-ref %}
Stack Shellcode
In hierdie scenario kan die aanvaller 'n shellcode in die stapel plaas en die beheerde EIP/RIP misbruik om na die shellcode te spring en arbitrêre kode uit te voer:
{% content-ref url="stack-shellcode/" %} stack-shellcode {% endcontent-ref %}
ROP & Ret2... tegnieke
Hierdie tegniek is die fundamentele raamwerk om die hoof beskerming van die vorige tegniek te omseil: Geen uitvoerbare stapel (NX). En dit stel in staat om verskeie ander tegnieke (ret2lib, ret2syscall...) uit te voer wat arbitrêre opdragte sal uitvoer deur bestaande instruksies in die binêre te misbruik:
{% content-ref url="../rop-return-oriented-programing/" %} rop-return-oriented-programing {% endcontent-ref %}
Heap Overflows
'n Oorgang gaan nie altyd in die stapel wees nie, dit kan ook in die heap wees byvoorbeeld:
{% content-ref url="../libc-heap/heap-overflow.md" %} heap-overflow.md {% endcontent-ref %}
Types of protections
Daar is verskeie beskermings wat probeer om die uitbuiting van kwesbaarhede te voorkom, kyk daarna in:
{% content-ref url="../common-binary-protections-and-bypasses/" %} common-binary-protections-and-bypasses {% endcontent-ref %}
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.