sqli-labs靶場實現(九)【寬位元組注入(1)、寬位元組注入(2)】(less-33、less-32具體步驟+圖文詳解)
一)寬位元組注入(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時間盲注。
相關文章
- sqli-labs靶場實現(十)【二次注入(二階注入)】(less-24、具體步驟+圖文詳解)SQL
- C10-08-寬位元組注入-mysql注入之getshell-sqlmapMySql
- 最新寬位元組注入攻擊和程式碼分析技術
- sqli-labs————寬位元組注入(可以用於繞過濾了單引號或者\的WAF)SQL
- sqli-labs————Less-34(寬位元組繞過、水平越權、盲注)SQL
- 位元組碼詳解
- sqli-labs靶場實現(二)【不顯示錯誤內容的盲注(布林、時間)】(less-8~10、具體步驟+圖文詳解)SQL
- Python struct(位元組流,組包拆包實現)模組詳解PythonStruct
- C/C++位元組詳解C++
- Unity從圖片的位元組資料裡面獲取圖片的寬和高Unity
- 位元組碼檔案結構詳解
- pick靶場-sql注入SQL
- C/C++ 結構體位元組對齊詳解C++結構體
- C語言:記憶體位元組對齊詳解C語言記憶體
- 什麼是位元組碼?python位元組碼詳細介紹!Python
- 從1+1=2來理解Java位元組碼Java
- 位元組流
- JVMClass詳解之二Method位元組碼指令JVM
- 記憶體位元組對齊記憶體
- c++記憶體中位元組對齊問題詳解C++記憶體
- 詳解Android Gradle生成位元組碼流程AndroidGradle
- Java Class 位元組碼檔案結構詳解Java
- Java 位元組碼Java
- 理解位元組序
- 位元組對齊
- 位元組碼指令
- Go語言實現位元組記錄鎖Go
- Oracle實驗(01):字元 & 位元組Oracle字元
- 【C/C++】5.位元組對齊和位元組填充C++
- 移動寬頻接入 WiMAX組網方式詳解(轉)
- 淺談位元組碼增強技術系列1-位元組碼增強概覽
- 關於安裝DNS伺服器的新增步驟具體圖文詳解DNS伺服器
- iOS 記憶體位元組對齊iOS記憶體
- 位元組跳動近日申請多個“位元組遊戲”商標遊戲
- .NET刪除位元組陣列中的0位元組陣列
- 位元組碼基礎
- JS 位元組流 解析JS
- 位元組陣列流陣列