sqli-labs靶場實現(九)【寬位元組注入(1)、寬位元組注入(2)】(less-33、less-32具體步驟+圖文詳解)

A&&K發表於2021-01-03

一)寬位元組注入(1)
1)寬位元組注入基礎
2)寬位元組注入程式碼分析
3)寬位元組SQL隱碼攻擊演示(less-33)
4)sqlmap安全檢測

二)寬位元組注入(2)
1)寬位元組注入基礎
2)寬位元組注入程式碼分析
3)寬位元組SQL隱碼攻擊演示(less32)
4)sqlmap安全檢測

——————————————————————————————————————————————————————


一)寬位元組注入

1)寬位元組注入基礎

GBK編碼是佔用兩個位元組,ASCII編碼是佔用一個位元組。在PHP中的編碼方式為GBK,在函式執行新增的是ASCII編碼,在mysql中國預設字符集是GBK等寬位元組字符集(GBK屬於寬字符集中的一種),而mysql中使用的預設的GBK編碼方式是導致寬位元組注入的根源。

產生的原因是:%DF' 會被PHP中的 addslashes函式 轉義為 %DF\' ,而 \ 其實就是URL中的 %5c ,因此最終 %DF' 會被轉義為 %DF%5c%27 ,此時網站如果設定了GBK編碼方式那麼就會將 %DF%5c 認定為一個寬字元,也就是中文“”,此時 %DF%5c%27 就變成了 縗%27 ,也就是 縗' ,此時 縗' 的單引號就和前面id的單引號成功進行了和閉合。

2)寬位元組注入程式碼分析
在這裡插入圖片描述

根據以上程式碼得出結論:如果要能成功利用寬字元注入,就要滿足兩個條件:
    1)採用了addslashes函式進行了轉義;
    2)網站採用的是GBK編碼方式。


3)寬位元組SQL隱碼攻擊演示

當我們輸入 \ 會發現 \ 也被進行了轉義:
在這裡插入圖片描述
輸入 ' 會發現 ' 也被進行了轉義:
在這裡插入圖片描述
在這裡插入圖片描述
輸入 1%df'在這裡插入圖片描述
發現報錯資訊中提示多了一個單引號,這是沒有進行單引號閉合,所以我們使用 --+ 進行單引號閉合:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述


4)sqlmap安全檢測
在這裡插入圖片描述

二)寬位元組注入(2)


[1)寬位元組注入基礎

前面我們已將講解過寬位元組注入的原理,其實就是mysql使用了GDK編碼方式,結合 %df'==>%df%5c%27 ==>縗',但是利用%df只是其中的一個在寬位元組注入中最長使用的而已,其實並不是只有這一個字元可以利用,只要第一個ascii碼大於128就可以利用,例如:ascii碼為129的0x81,加上十六進位制%就變成了%81。所以總而言之就是GBK首位元組在0x81~0xFE範圍內、尾位元組在 0x40~0xFE(除了0x7F外) 都可以利用。


2)寬位元組注入程式碼分析
在這裡插入圖片描述

解析:

在check_addslashes函式中通過三個preg_replace()函式分別將所有的 /、'、" 都進
行\/、\'、\"方式的過濾。此時我們通過原始碼中利用\進行轉義的過濾機制,很容易就會想到利用
寬位元組注入,所以我們接著往下檢視原始碼中mysql是否使用GDK編碼方式,發現
mysql_query("set NAMES gbk"),此時利用寬位元組注入的必須滿足的兩個條件:採用了
addslashes函式進行了轉義;網站採用的是GBK編碼方式 都有了,那麼就可以利用寬位元組注入了。

mysql_real_escape_string()addslashes() 其實是等效的,所以如果沒有使
用addslashes()而是使用了mysql_real_escape_string()那麼也是可以的。


3)寬位元組SQL隱碼攻擊演示(less32)
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

4)sqlmap安全檢測

利用寬位元組注入我們可以使用sqlmap中的一個指令碼:unmagicquotes.py(專門針對寬位元組注入的指令碼)

python sqlmap.py -u "" --tamper=unmagicquotes.py

在這裡插入圖片描述
在這裡插入圖片描述
結論:存在布林盲注、報錯注入、union注入、and/or時間盲注。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述





相關文章