攻擊者註冊用戶名 admin'--,程式正確轉義存入 admin''--。後續修改密碼功能若直接拼接資料庫讀回的用戶名:
sql = "UPDATE users SET password = '" + newPwd + "' WHERE username = '" + rso("username") + "'";
實際執行變為:
UPDATE users SET password = 'attacker_pwd' WHERE username = 'admin'--'
成功竄改 admin 密碼。根因:信任資料庫內資料,未在二次使用時參數化。
aaaaaaaaaaaaaaa' → 過濾雙引號 → 截斷 → aaaaaaaaaaaaaa''; SHUTDOWN--username='aaaaaaaaaaaaaa'' AND password=''; SHUTDOWN-- 執行關機命令。SQL Server 追蹤若偵測到批次含 sp_password,會以安全理由替換為註解,導致完整攻擊語句不記錄。攻擊者只需在註解後加入 --sp_password 即可繞過審計。
sp_executesql。