Ret2win - arm64
Ret2win - arm64
Vind 'n inleiding tot arm64 in:
Introduction to ARM64v8Code
Compile sonder pie en canary:
Finding the offset
Pattern option
Hierdie voorbeeld is geskep met behulp van GEF:
Stat gdb met gef, skep patroon en gebruik dit:
arm64 sal probeer om terug te keer na die adres in die register x30 (wat gecompromitteer is), ons kan dit gebruik om die patroon offset te vind:
Die offset is 72 (9x48).
Stapel offset opsie
Begin deur die stapeladres te kry waar die pc-register gestoor is:
Stel nou 'n breekpunt in na die read()
en gaan voort totdat die read()
uitgevoer is en stel 'n patroon soos 13371337 in:
Vind waar hierdie patroon in geheue gestoor is:
Dan: 0xfffffffff148 - 0xfffffffff100 = 0x48 = 72
Geen PIE
Gereeld
Kry die adres van die win
funksie:
Eksploiteer:
Off-by-1
Werklik gaan dit meer soos 'n off-by-2 wees in die gestoor PC in die stapel. In plaas daarvan om al die terugkeeradresse te oorskryf, gaan ons slegs die laaste 2 bytes met 0x06c4
oorskryf.
Jy kan 'n ander off-by-one voorbeeld in ARM64 vind in https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/, wat 'n werklike off-by-one in 'n fiktiewe kwesbaarheid is.
Met PIE
Compileer die binêre sonder die -no-pie
argument
Off-by-2
Sonder 'n leak weet ons nie die presiese adres van die wen-funksie nie, maar ons kan die offset van die funksie vanaf die binêre weet en, aangesien die terugadres wat ons oorskryf reeds na 'n nabygeleë adres wys, is dit moontlik om die offset na die wen-funksie (0x7d4) in hierdie geval te lek en net daardie offset te gebruik:
```python from pwn import *
Configuration
binary_name = './ret2win' p = process(binary_name)
Prepare the payload
offset = 72 ret2win_addr = p16(0x07d4) payload = b'A' * offset + ret2win_addr
Send the payload
p.send(payload)
Check response
print(p.recvline()) p.close()
Last updated