hacktricks/binary-exploitation/stack-overflow
2024-06-16 09:03:11 +00:00
..
ret2win Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-05-05 22:31:04 +00:00
stack-shellcode Translated ['binary-exploitation/heap/README.md', 'binary-exploitation/h 2024-04-10 15:34:27 +00:00
pointer-redirecting.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 05:51:42 +00:00
README.md Translated ['binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc 2024-06-16 09:03:11 +00:00
ret2win.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 05:51:42 +00:00
stack-pivoting-ebp2ret-ebp-chaining.md Translated ['binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-e 2024-04-19 14:50:18 +00:00
stack-shellcode.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 05:51:42 +00:00
uninitialized-variables.md Translated ['binary-exploitation/heap/README.md', 'binary-exploitation/h 2024-04-10 15:34:27 +00:00

Stapeloorvloei

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Wat is 'n Stapeloorvloei

'n Stapeloorvloei is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stapel skryf as wat daaraan toegewys is om te hou. Hierdie oortollige data sal aangrensende geheue-ruimte oorskryf, wat lei tot die korrupsie van geldige data, beheerstroom-onderbreking, en moontlik die uitvoering van skadelike kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op insette uitvoer nie.

Die hoofprobleem van hierdie oorskrywing is dat die gestoorde instruksie-aanwyser (EIP/RIP) en die gestoorde basisaanwyser (EBP/RBP) om terug te keer na die vorige funksie 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 bedrag wat daarvoor toegewys is, en kan daarom 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 toegewysde een.

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 Stok Oorvloeiingsafsette

Die mees algemene manier om stok oorvloeiings te vind, is om 'n baie groot inset 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.

Verder, sodra jy gevind het dat daar 'n Stok Oorvloeiingskwesbaarheid is, sal jy die afset moet vind totdat dit moontlik is om die terugkeeradres te oorskryf, hiervoor word gewoonlik 'n De Bruijn-reeks gebruik. Wat vir 'n gegewe alfabet van grootte k en subreeks van lengte n 'n sikliese reeks is waarin elke moontlike subreeks van lengte n presies een keer voorkom as 'n aaneenlopende subreeks.

Op hierdie manier, in plaas daarvan om met die hand te moet uitfigure watter afset nodig is om die EIP te beheer, is dit moontlik om een van hierdie reekse as vulsel te gebruik en dan die afset van die byte te vind wat dit uiteindelik oorskryf het.

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

Uitbuiting van Stok Oorvloei

Tydens 'n oorvloei (onder die aanname dat die oorvloei groot genoeg is) sal jy in staat wees om waardes van plaaslike veranderlikes binne die stok te oorskryf totdat die gestoorde EBP/RBP en EIP/RIP (of selfs meer) bereik word.
Die mees algemene manier om hierdie tipe kwesbaarheid te misbruik, is deur die terugkeeradres te wysig sodat wanneer die funksie eindig, die beheerstroom sal omgelei word na waar die gebruiker dit gespesifiseer het in hierdie aanwysers.

Tog, in ander scenario's mag dit dalk net genoeg wees vir die uitbuiting om sommige veranderlikeswaardes in die stok te oorskryf (soos in maklike CTF-uitdagings).

Ret2win

In hierdie tipe CTF-uitdagings is daar 'n funksie binne die binêre lêer wat nooit geroep word nie en wat jy moet roep om te wen. Vir hierdie uitdagings hoef jy net die verskuiwing te vind om die terugkeeradres te oorskryf en die adres van die funksie te vind om te roep (gewoonlik sal ASLR gedeaktiveer wees) sodat wanneer die kwesbare funksie terugkeer, die verborge funksie geroep sal word:

{% content-ref url="ret2win/" %} ret2win {% endcontent-ref %}

Stok Skelkode

In hierdie scenario kan die aanvaller 'n skelkode in die stok plaas en die beheerde EIP/RIP misbruik om na die skelkode te spring en willekeurige kode uit te voer:

{% content-ref url="stack-shellcode/" %} stack-shellcode {% endcontent-ref %}

ROP & Ret2... tegnieke

Hierdie tegniek is die fundamentele raamwerk om die hoofbeskerming teen die vorige tegniek te omseil: Geen uitvoerbare stok (NX). En dit maak dit moontlik om verskeie ander tegnieke uit te voer (ret2lib, ret2syscall...) wat sal eindig met die uitvoer van willekeurige bevele deur bestaande instruksies in die binêre lêer te misbruik:

{% content-ref url="../rop-return-oriented-programing/" %} rop-return-oriented-programing {% endcontent-ref %}

Stok Oorvloeie

'n Oorvloei gaan nie altyd in die stok wees nie, dit kan ook in die stapel wees byvoorbeeld:

{% content-ref url="../libc-heap/heap-overflow.md" %} heap-overflow.md {% endcontent-ref %}

Tipes van beskerming

Daar is verskeie beskermings wat probeer om die uitbuiting van kwesbaarhede te voorkom, kyk na hulle in:

{% content-ref url="../common-binary-protections-and-bypasses/" %} common-binary-protections-and-bypasses {% endcontent-ref %}

Leer AWS hak van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: