前言
在網絡安全領域,內網滲透技術相較于外網攻擊技術,往往不易掌握,因為內網數據一般較為敏感,安全從業者不易取得滲透測試授權,從而難以積累經驗,本文將闡述如何使用VMware搭建較一個較復雜的企業內網環境,便于安全從業者練習內網滲透或者ctf組織方搭建內網滲透環境。
0×01 網絡拓撲
完整的網絡拓撲圖如下:
圖中黃色部分的網絡完全由VMware虛擬機實現,環境搭建需要一臺最低配置為32G內存8核CPU、120G空余磁盤空間的主機,搭建完畢后,滲透練習者只需按圖左側部分準備一臺windows實體機,安裝滲透測試軟件及kali虛擬機,然后與已經搭建好滲透測試平臺的主機進行連接,即可進行環境配置及練習。
架設過程中用到的系統鏡像下載地址如下:
0×02架設過程
首先架設公網部分,即下圖中藍色部分:
公網部分包含攻擊者的公網出口路由、企業的公網出口路由、攻擊者使用的公網windows(win7)和linux(kali)。下面為具體架設過程:
1. 在虛擬機的虛擬網絡編輯器中添加4個虛擬網段(VMnet2、VMnet3、VMnet4、VMnet5):
注意將4個網段均設置為“僅主機模式”,且都要取消“將主機虛擬器適配器連接到此網絡”以及“使用本地DHCP服務將IP地址分配給虛擬機”選項,4個網段ip設置及作用如下:
VMnet2 111.111.0.0 mask 255.255.0.0 作用:模擬公網網段
VMnet3 172.168.2.0 mask 255.255.255.0 作用:模擬第一層內網網段
VMnet4 10.10.10.0 mask 255.255.255.0 作用:模擬第二層內網網段
VMnet5 192.168.222.0 mask 255.255.255.0 作用:模擬第三層內網網段
2.架設本地出口路由(攻擊者的出口路由)
環境中的虛擬路由用的都是愛快路的鏡像,安裝完畢后的界面如下(系統版本號可能與下載的不太一樣,我用的是兩年前下載的鏡像,不過操作應該是一樣的):
安裝完畢后,將其初始網卡設為橋接模式,然后再為其添加一張網卡,設為VMnet2模式,同時將兩張網卡的mac地址記錄下來,因為后面要在虛擬路由設置界面中設置哪張網卡是wan,哪張是lan:
然后選擇虛擬路由菜單選項8重啟(如果不重啟可能導致讀取mac地址不正常)。
重啟過后,選擇菜單1設置網卡綁定,這里需要根據剛才記錄下來的mac地址來判斷哪張是橋接模式的網卡,哪張是VMnet2的網卡,將那張橋接模式的網卡設置為lan1,VMnet2那張網卡設置為wan1,lan1就是與第一層內網相連的網卡,wan1就是與公網網段相連的網卡,如判斷eth0為橋接模式的網卡,則用“set lan1 eth0”來將其設為lan1,然后“set wan1 eth1”將eth1設為虛擬路由的wan口:
然后選擇軟路由菜單2設置lan地址,依據網絡拓撲圖,我這里設置路由器1的出口地址為192.168.1.120:
然后選擇虛擬路由菜單3設置web端口,我這里設置為8080,隨后就可以通過本地實體機訪問http://192.168.1.120:8080來繼續配置路由器(注意本地實體機要訪問虛擬公網,有兩種方法:1是設置默認網關為192.168.1.120;2是執行route add 111.111.0.0 mask 255.255.0.0 192.168.1.120添加一條路由):
默認用戶名、密碼均為admin,登錄后,進入外網設置菜單,
設置參數如下圖,將router1的wan口地址設置為111.111.111.1:
這樣,本地出口路由就設置完畢!
3.架設攻擊者的公網vps
安裝公網win7及kali都很簡單,安裝完win7后,設置其網卡模式為VMnet2,進入系統后,設置其ip地址為111.111.111.2,設置密碼,并為其開啟遠程桌面;安裝完kali后,設置其網卡模式為VMnet2,進入系統,設置其ip地址為111.111.111.4,然后/etc/init.d/networking restart重啟網絡服務,但由于kali默認沒有開啟ssh遠程登錄,需要按下列步驟為其配置ssh遠程連接:
(1)修改/etc/ssh/sshd_config文件,將#PasswordAuthentication no的注釋去掉,并將NO修改為YES,將PermitRootLogin without-password修改為PermitRootLogin yes
(2)重啟ssh服務:/etc/init.d/ssh restart
(3)設置系統自啟動ssh服務:update-rc.d ssh enable
配置完畢后,在本地攻擊機遠程桌面公網win7,成功則配置正常,在本地用ssh軟件(推薦xshell)遠程連接公網kali,成功則配置正常。
4.架設軟路由router2(企業的出口路由)
配置router2的過程大致與router1相同,注意將其初始的網卡模式設為VMnet2,然后為其添加一塊網卡模式為VMnet3,同樣記下兩張網卡的mac地址,用于稍后的網卡綁定,在網卡綁定中,設置VMnet3模式的網卡為LAN1,設置VMnet2模式的網卡為WAN1,然后配置LAN1的地址為172.168.2.3,web管理端口為8080:
隨后進一步的配置需要同樣處于VMnet3模式的一臺主機訪問才能進行,所以我們先安裝第一層內網中的一臺win7(也就是IP地址為172.168.2.200的那臺win7),安裝完畢后,將在虛擬機設置中將這臺win7其網卡模式配置為VMnet3,進入系統,設置ip為172.168.2.200,掩碼255.255.255.0,默認網關172.168.2.3(router2的lan1的地址),設置完成后,通過瀏覽器訪問,默認用戶名admin密碼admin登錄路由web界面,配置router2的外網地址如下圖:
配置完畢后,從本地攻擊主機ping 111.111.111.3這個地址(即router2的wan1地址),如果正常,則說明配置成功。
至此,模擬環境的公網部分配置完畢了,接下來配置第一層內網,也就是下圖中黃色部分:
該層內網中有1臺server2008(172.168.2.2)服務器,充當企業對外的門戶網站,一臺win7作為管理員主機,1臺雙網卡的centos7(172.168.2.120&&10.10.10.110),代替路由作為第一層與第二層的橋梁。Win7剛剛已經配置過,下面配置server2008與centos7,
安裝完畢server2008后設置其網卡模式為VMnet3,ip地址設為172.168.2.2,掩碼255.255.255.0,默認網關172.168.2.3(即router2的lan1地址),然后在其上安裝phpstudy,并架設一個存在漏洞的cms,作為外網突破點,為了讓外網能夠訪問這臺server2008上的web服務,必須在router2上做一端口映射,具體操作如下,利用ip地址為172.168.2.200的win7登錄router2的web管理界面http://172.168.2.3:8080,做一個端口映射:
讓server2008的網站能夠暴露在公網上,端口映射配置參數如下:
配置完成后,從本地攻擊機訪問http://111.111.111.3,可以看到,我們已經可以訪問到內網中server2008上的網站了。
然后在172.168.2.200這臺win7上啟動一個機器人腳本,其內容如下:
While True
set obj = createobject("w.shell")
obj.run "cmd /c iexplore http://172.168.2.2/pdf1.html"
W.Sleep(1000*30)
obj.run "taskkill /IM iexplore.exe"
W.Sleep(1000*30)
Wend
這個腳本的作用是每隔一段時間訪問server2008網站上的指定頁面,因為等我們拿下server2008后需要對win7做釣魚,所以做個機器人比較方便。
然后安裝centos7,為了減小系統開銷,我用的是最小化安裝,安裝完畢后將其初始網卡模式配置為VMnet3,其為再添加一塊網卡,模式配置為VMnet4,centos7配置雙網卡工作的坑稍多,說一下步驟:
進入系統,首先輸入命令“ip addr”,查看兩張網卡名稱,這里分別為ens33與ens37:
根據MAC地址,判斷哪張網卡需要連接第一層內網,另一張則連接第二層內網,例如確定ens33這張網卡連接第一層內網,則
“cd /etc/sysconfig/network-s/”進入網絡配置文件目錄,ls查看,
這里的ifcfg-ens33這個配置文件對應ens33這張網卡的配置,我們要配置ens33的網絡參數,就要編輯這個文件,vi ifcfg-ens33,編輯文件內容如下:
然后退出vi,下面要編輯ens37這張網卡,先cp ifcfg-ens33 ifcfg-ens37,復制一份配置文件,然后vi ifcfg-ens37,編輯文件內容如下圖:
注意:里面的UUID可能需要用uuidgen命令生成。
配置好ens37,使用命令“nmcli con up ens37”,啟動ens37,如果沒有報錯,則“service network restart”重啟網絡服務,然后用該層內網中win7 ping 172.168.2.120,如果回顯正常則說明配置成功。
然后為win7安裝ssh軟件,登錄centos7,將其密碼改為win7相同的密碼(因為我們要實現一個同密碼攻擊).
至此,第一層內網配置完畢。
下面配置第二層內網,即下圖中黃色部分:
這一層內網模擬企業辦公網,所有主機均在域中,首先安裝域控主機,即ip為10.10.10.56的server2008主機。
安裝完畢server2008系統后,將其網卡模式配置為VMnet4,ip地址設為10.10.10.56,掩碼設置為255.255.255.0,默認網關設為10.10.10.254,DNS設為127.0.0.1(因為域中一定需要一臺DNS服務器,我們稍后會將DNS服務也安裝到這臺域控上,所以這里可以設置為127.0.0.1),然后用服務器管理器“添加角色”,添加Active Directory域服務(域名稱為domainTest1.com)以及DNS服務器(DNS服務器也可以安裝在其他server級別的主機上,不過如果將兩者分開安裝,需要先安裝DNS服務,并在DNS服務的正向查找區域中添加要安裝Active Directory域服務的域解析記錄,并在安裝Active Directory域服務之前正確設置域控主機的dns服務器地址,比較麻煩,所以這里采用域控與DNS服務合并的辦法),安裝完畢后,需要在DNS的正向查找區域中添加一條主要區域(即域的解析記錄):
區域名稱填:
添加完成后,域就可以正常工作。如果對這一部分不太清楚,可以讀一讀《windows server2008R2 Active Directory配置指南》的1-3章相關內容。
域控安裝完畢后,我們繼續安裝該層內網中的其他主機:ip地址為10.10.10.3的win7與10.10.10.88的server2008,安裝完畢后將它們的網卡模式均配置為VMnet4,ip地址依照拓撲圖上設置,掩碼255.255.255.0,網關10.10.10.254,注意DNS都要設置為域控的ip地址即10.10.10.56,設置完畢后,登錄兩臺主機將它們加入域,以win7為例,加入域的方法為:
右擊計算機–>計算機名稱、域與工作組設置–>更改設置–>計算機名選項頁–>更改,將“隸屬于”單選框切換到“域”選項:
輸入域的名稱domainTest1.com,點確定,彈出對話框:
這里輸入域管理員的賬戶及密碼,確定后,彈出如下對話框:
表明這臺win7成功加入了域domainTest1.com域,重啟win7,以域內賬號登陸即可。
Server2008加入域的步驟與win7類似,不再贅述,待server2008加入域后,以域管理員賬戶登陸,安裝phpstudy,在8080端口上架設一個企業內部的OA系統:
然后在這臺server2008上利用服務器管理器添加角色,安裝iis,使其在80端口上能夠被第二層內網正常訪問,為其添加一個asp頁面。該頁面通過第三個虛擬路由router3連接到第三層內網的sqlserver2008。至此,第二層內網環境架設完畢。
接下來架設第三層內網,第三層內網模擬企業的核心數據網,與第二層之間使用路由器進行隔離,下圖中黃色部分為第三層內網部分:
首先架設虛擬路由,依然先安裝愛快路虛擬路由,安裝完畢后,虛擬機設置中將其初始網卡模式設為VMnet4(與LAN2相連),然后再為其添加一張網卡,模式設為VMnet5(與LAN3相連),記錄下兩張網卡的MAC地址,然后進入虛擬路由設置界面,設置網卡綁定為:VMnet4模式的網卡為lan1,VMnet5模式的網卡為lan2:
在設置lan地址中設置lan1地址為10.10.10.200,設置web端口為8080,然后用第二層內網中的win7訪問http://10.10.10.200:8080,設置lan2的地址為192.168.222.22
第二層內網的server2008(10.10.10.88)需要訪問第三層sqlserver2008數據庫(192.168.222.200:1433),而第三層的win10(192.168.222.77)需要訪問第二層的server2008上的web服務(10.10.10.88:80),所以需要分別在虛擬路由的lan1與lan2的高級設置中設置“允許其他LAN訪問此LAN”:
但如果只是打開LAN互訪控制,則第二層內網與第三層內網就會無限制相互訪問,降低了安全性,所以添加6條ACL規則:
添加并啟用后,可以保證第二層內網內只有ip為10.10.10.88的主機能夠訪問第三層內網的192.168.222.200的1433端口,在第三層內網中只有192.168.222.77的主機能夠訪問第二層內網的10.10.10.88的80端口。
第三個虛擬路由安裝完畢后,接下來安裝第三層內網中的server2008與win10,安裝完系統后,分別依照拓撲圖設置ip,掩碼255.255.255.0,默認網關192.168.222.22。然后在server2008上安裝sqlserver2008,并創建名為“test”數據庫,執行test.sql數據庫腳本,導入test.data的數據,并配置sqlserver2008可以為外網訪問,這里配置稍微繁瑣,簡答介紹一下:
打開SQLserver配置管理器,如下圖設置SQLServer網絡配置:
然后雙擊TCP/IP協議,切換到IP地址選項卡,將所有的IP地址下的“活動”、“已啟用”均切換為是,也就是讓SQLserver在所有IP地址上監聽:
最后,在這臺主機的“高級安全windows防火墻”配置中添加一條規則,設置通過1433端口:
最后安裝ip地址為192.168.222.77的win10,安裝完畢后,配置網卡模式為VMnet5,ip地址為192.168.222.77,掩碼255.255.255.0,網關192.168.222.22,然后用瀏覽器訪問http://10.10.10.88/index.asp?id=1,出現如下界面,說明第三層內網配置成功。
最后在win10上啟動一個vbs腳本機器人,讓其自動訪問http://10.10.10.88上的頁面,因為我們那些第二層內網后要對第三層內的win10做釣魚攻擊。
至此這個三層內網的滲透靶場架設完畢,至此本文的篇幅已經夠長了,所以這個靶場的writeup就不仔細寫了,下面簡單介紹一下攻擊思路。
0×03 攻擊思路 1. 外網突破
掃描111.111.111.0/24段,發現111.111.111.3:80開放,登錄發現網站,awvs掃描發現網站存在SQL注入漏洞,于是注入獲取用戶名及密碼,登錄成功后獲取網站物理路徑,在網站后臺中試圖上傳webshell不成功,通過御劍掃描網站,發現phpmyadmin,用弱口令登錄phpmyadmin,試圖用MySQL寫webshell,發現mysql開啟了secure-file-priv開關限制了寫文件目錄,使用mysql開啟日志文件,將日志文件的位置設置為剛才在后臺中發現的網站物理路徑位置,在sql查詢語句中寫webshell,成功拿到webshell。
2. 第一層內網滲透
利用webshell上傳反向socks5代理軟件frpc等,在公網windows上運行frps,使得這臺webshell主機的代理客戶端與公網windows主機上的代理服務端相連接,這樣在本地windows攻擊機上安裝Proxifier、SocksCap64等軟件(kali用proxychains),就可以將攻擊流量發送至第一層內網。
通過在本地掃描webshell網段,可以發現172.168.2.200(linux)、172.168.2.120(windows)兩臺主機,在webshell主機的Apache日志中可以發現172.168.2.120這臺主機在不斷訪問這個頁面(robot.vbs的作用),于是用CVE-2018-8174對172.168.2.120進行釣魚(用法詳見壓縮包),釣魚成功后,獲取172.168.2.120的msf反彈回話,上傳getpass進行密碼抓取,然后利用msf的遠程桌面開啟腳本轉出3389到公網kali,遠程桌面登錄后發現管理員桌面上有ssh軟件,聯想到該層內網還有一臺linux主機,所以猜測這臺主機的密碼與linux相同,于是嘗試用相同密碼登錄,登錄成功,于是拿下linux,第一層內網滲透完畢!
3. 第二層內網滲透
在linux上搜集信息發現雙網卡,在10.10.10.0/24網段上進行掃描發現3臺主機存活,并且10.10.10.88這臺主機上開放了80、8080端口,訪問發現phpoa系統,利用任意文件上傳POC拿到webshell,然后判斷環境為域環境,并且當前登錄賬戶為域管理員賬戶,于是上傳getpass拿到域控密碼,利用ipc入侵,拿下域內其他兩臺主機,第二層內網滲透完畢!
4. 第三層內網滲透
在10.10.10.88上發現還打開了80端口,上面運行著iis服務,并且連接著192.168.222.200上的sqlserver數據庫,于是利用sqlserver存儲過程執行命令,不過由于router3的acl規則很嚴格,所以無法進行回話反彈。另外審查10.10.10.88的iis日志,發現192.168.222.77的ie瀏覽器對其有規律性的訪問記錄,所以可以利用CVE-2018-15982對其進行釣魚,不過需要注意的一點是192.168.222.77是一臺win10,自帶殺毒軟件,所以需要對可執行payload進行免殺處理。
架設過程中用到的素材我已上傳到網盤:鏈接:https://pan.baidu.com/s/1NIOIZgVDLgkg7j6Ch5pjwA 提取碼:kws9 ,如果在架設過程中遇到問題,歡迎私信聯系我。
*本文原創作者:Zzzxbug,本文屬于FreeBuf原創獎勵計劃,未經許可禁止轉載