Code Red、Nimda 等蠕蟲將 IIS 漏洞自動化利用,手工攻擊 IIS 已成過去式。資料庫伺服器往往被忽略,實則為核心資產存放地,且與作業系統深度綁定(特別是 SQL Server),是入侵者奪取系統控制權的關鍵跳板。
Function Filter_SQL(strData)
Dim strFilter, blnFlag, i, arr
strFilter = "',;,//,--,@,_,exec,declare" ' 自行擴充
blnFlag = False
arr = Split(strFilter, ",")
For i = 0 To UBound(arr)
If InStr(strData, arr(i)) > 0 Then blnFlag = True : Exit For
Next
If blnFlag Then Response.Redirect "error.asp" Else Filter_SQL = strData
End Function
所有 Request 參數經過濾後再拼接 SQL,或改用參數化查詢徹底解決。
xp_cmdshell:以 SQL Server 服務帳號權限執行作業系統命令。預設僅 sysadmin 可執行,但可授權給其他使用者。早期版本以 SQLExecutiveCmdExec/SQLAgentCmdExec 代理帳號執行;SQL 2000 直接以服務帳號執行。sa (空密碼) 或具 xp_cmdshell 權限帳號:EXEC xp_cmdshell 'net user hacker P@ssw0rd /add';
EXEC xp_cmdshell 'net localgroup administrators hacker /add';
即在系統建立管理員帳號,完全控制伺服器。
| 程序 | 功能 |
|---|---|
| xp_fileexist | 檢測檔案是否存在 |
| xp_getfiledetails | 取得檔案詳細屬性 |
| xp_dirtree | 遞歸列舉目錄結構 |
| xp_getnetname | 取得伺服器網路名稱 |
雖不直接破壞,但協助攻擊者偵察環境。
xp_regaddmultistring, xp_regdeletekey, xp_regdeletevalue, xp_regenumvalues, xp_regread (Public 可執行), xp_regremovemultistring, xp_regwritexp_regread 可讀取 HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account 等敏感鍵值,配合破解工具可離線破解系統管理員密碼。sa 設定高強度密碼,日常管理使用專屬低權限帳號。USE master; EXEC sp_dropextendedproc 'xp_cmdshell';
-- 同理移除 xp_regread, xp_dirtree 等非必要程序
guest 使用者:EXEC sp_revokedbaccess 'guest' (各資料庫)。findstr /C:"登錄" "D:\Microsoft SQL Server\MSSQL\LOG\*.*"
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;
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll' (SQL 7.0) / xpstar.dll (SQL 2000) 恢復。pwdump 系列工具,以 xp_cmdshell 執行導出 SAM 雜湊,再離線破解。xp_regread 'HKEY_LOCAL_MACHINE','SECURITY\SAM\Domains\Account','F',SQL 服務帳號為 LocalSystem,權限高於 Administrator。資料庫伺服器常與 Web 伺服器隔離部署,導致日記檔鮮少被檢視,成為管理盲區。同 DNS、郵件伺服器一樣,資料庫伺服器是入侵者側寫跳板的高價值目標。請將資料庫安全納入核心防禦體系,持續巡檢與強化。