首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 高階注入技術(七):二次注入、長度限制繞過與 sp_password 隱藏攻擊

     編輯:關於SqlServer

二次注入實戰

攻擊者註冊用戶名 admin'--,程式正確轉義存入 admin''--。後續修改密碼功能若直接拼接資料庫讀回的用戶名:

sql = "UPDATE users SET password = '" + newPwd + "' WHERE username = '" + rso("username") + "'";

實際執行變為:

UPDATE users SET password = 'attacker_pwd' WHERE username = 'admin'--'

成功竄改 admin 密碼。根因:信任資料庫內資料,未在二次使用時參數化。

長度限制繞過組合拳

  • 用戶名 16 字元:aaaaaaaaaaaaaaa' → 過濾雙引號 → 截斷 → aaaaaaaaaaaaaa'
  • 密碼 16 字元:'; SHUTDOWN--
  • 拼接後:username='aaaaaaaaaaaaaa'' AND password=''; SHUTDOWN-- 執行關機命令。

sp_password 隱藏審計

SQL Server 追蹤若偵測到批次含 sp_password,會以安全理由替換為註解,導致完整攻擊語句不記錄。攻擊者只需在註解後加入 --sp_password 即可繞過審計。

防禦建議

  1. 全鏈路參數化:含資料庫讀回資料再次用於動態 SQL 時,同樣使用參數化或 sp_executesql。
  2. 拒絕動態 SQL 拼接:若必須動態,嚴格白名單驗證每個拼接片段。
  3. 審計策略調整:啟用擴充事件 或 伺服器端追蹤捕獲完整批次文本,不依賴預設追蹤。
  4. 長度驗證在過濾前執行,避免截斷重組攻擊面。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved