概述
搭載了海洋CMS與phpOA CMS環(huán)境的虛擬機進行內(nèi)網(wǎng)轉(zhuǎn)發(fā)與代理的滲透測試,按照實驗要求對以上這兩個環(huán)境進行滲透測試工作,得以下分析報告。
實驗環(huán)境搭建與配置
環(huán)境搭建
海洋CMS是用windows 2008 R2系統(tǒng)搭建,PHPOA用linux系統(tǒng)搭建,由于實驗環(huán)境是事先搭建好了的,所以在這里就不重復了。
環(huán)境配置→網(wǎng)絡(luò)配置
首先我們做的是內(nèi)網(wǎng)的滲透,所以我們需要配置海洋CMS兩個虛擬網(wǎng)卡,兩個不同網(wǎng)段的IP,也就是相當于一個是內(nèi)網(wǎng),一個是外網(wǎng),內(nèi)網(wǎng)連接網(wǎng)的段是跟PHPOA為同一個網(wǎng)段(192.168.80.0/24),內(nèi)網(wǎng)之間網(wǎng)絡(luò)要能ping通,外網(wǎng)跟攻擊者一個網(wǎng)段(192.168.1.0/24),也要能ping通,攻擊者不能直接訪問內(nèi)網(wǎng),Windows海洋CMS的IP配置(如圖1),攻擊者IP配置(如圖2),Linux的內(nèi)網(wǎng)IP配置(如圖3)。

圖1

圖2

圖3
防火墻配置
海洋CMS服務(wù)器防火墻必須開啟,防火墻加上兩條規(guī)則保證web服務(wù)能夠訪問,通過控制面板打開Windows防火墻,點擊高級設(shè)置,在入站規(guī)則和出站規(guī)則加上80端口允許連接的規(guī)則;而PHPOA 的Linux服務(wù)器需要配置以下幾條規(guī)則(如圖4)。
iptables -P INPUT DROP 禁止所有進站鏈接
iptables -I INPUT -p tcp --dport 80 -j DROP 禁止所有80端口的鏈接
iptables -I INPUT -s 192.168.80.10 -p tcp --dport 80 -j ACCEPT只允許指定的內(nèi)網(wǎng)IP訪問80端口

圖4
3.實驗原理
海洋CMS漏洞原理:
通過代碼審計,利用area參數(shù)處理過的地方經(jīng)過字符是否非法判斷之后,調(diào)用echoSearchPage()函數(shù),因為能執(zhí)行PHP代碼一般就是eval()函數(shù),利用area參數(shù)把eval函數(shù)帶入進去執(zhí)行。
lcx端口轉(zhuǎn)發(fā)原理:
lcx工作原理是使不同端口之間形成一個回路,這樣就可以進行端口轉(zhuǎn)發(fā),常用于外網(wǎng)連接內(nèi)網(wǎng)3389端口。
這個程序主要采用Socket來實現(xiàn),有幾個比較重要的函數(shù):bind2bind、bind2conn、conn2conn及transmitdata。transmitdata函數(shù)是核心,這個函數(shù)作用是使得不同端口之間的數(shù)據(jù)形成一個回路
內(nèi)網(wǎng)代理原理:
正向代理:Lhost為了訪問到Rhost,向proxy發(fā)送了一個請求并且指定目標是Rhost,然后proxy向Rhost轉(zhuǎn)交請求并將獲得的內(nèi)容返回給Lhost,簡單來說正向代理就是proxy代替了我們?nèi)ピL問Rhost。
反向代理:Lhost只向proxy發(fā)送普通的請求,具體讓他轉(zhuǎn)到哪里,proxy自己判斷,然后將返回的數(shù)據(jù)遞交回來,這樣的好處就是在某些防火墻只允許proxy數(shù)據(jù)進出的時候可以有效的進行穿透
而我們平常使用的reDuh、tunna,和reGeorg一樣,都是正向代理。一般都是用戶上傳一個代理腳本到服務(wù)器端,本地的程序去連接服務(wù)器上的腳本,腳本程序做代理轉(zhuǎn)發(fā)端口和流量。
滲透測試步驟
利用到的工具中國菜刀,lcx.exe轉(zhuǎn)發(fā)軟件,Proxifier代理軟件。
進行外網(wǎng)web滲透→拿外網(wǎng)webshell
海洋web通過代碼審計可以得出area參數(shù)里利用eval()函數(shù)把一句話木馬帶入,把變量打印出來。
Payload:http://192.168.1.109/search.php?searchtype=5&tid=&area=eval($_POST[hah])
之后直接用菜刀鏈接,密碼是hah(如圖5),直接就能拿到webshell,而且還是system權(quán)限的(如圖6)。

圖5

圖6
通過端口轉(zhuǎn)發(fā)遠程連接服務(wù)器
之后通過菜刀的虛擬終端創(chuàng)建我們的管理員用戶嘗試開啟服務(wù)器的3389端口遠程連接登錄并控制該服務(wù)器。(如圖7,圖8)

圖7

圖8
由于服務(wù)器開啟了防火墻屏蔽了3389端口了(如圖9),不能遠程登錄到web服務(wù)器,所以我們可以利用端口轉(zhuǎn)發(fā)來連接服務(wù)器。

圖9
通過菜刀直接可以上傳我們需要的轉(zhuǎn)發(fā)工具lcx.exe(如圖10),執(zhí)行以下命令(如圖11,圖12),再嘗試連接,連接成功(圖13)。

圖10

圖11

圖12

圖13
內(nèi)網(wǎng)代理與滲透→內(nèi)網(wǎng)代理
通過最簡單的arp –a地址解析協(xié)議就可以查到內(nèi)網(wǎng)還存在的一臺主機IP地址(如圖14),當然真正的內(nèi)網(wǎng)掃描會有很多的主機,所以必須得利用其它的掃描工具,比如nmap,在這里就不演示了。內(nèi)網(wǎng)的web服務(wù)器外網(wǎng)是無法訪問的,只能內(nèi)網(wǎng)訪問,所以我們可以利用內(nèi)網(wǎng)代理來實現(xiàn)外網(wǎng)主機訪問內(nèi)網(wǎng)主機。

圖14
還是由菜刀來把我們事先準備好的reGeorg的對應(yīng)腳本tunnel.nosocket.php文件上傳到web服務(wù)器的web目錄下(如圖15),再通過網(wǎng)頁運行一下該文件(如圖16)沒問題,正常運行,接著打開攻擊者reGeorg的對應(yīng)目錄下CMD運行reGeorgSocksProxy.py -p 8888 -u
http://192.168.1.109/include/tunnel.nosocket.php命令(如圖17),之后直接打開我們的代理軟件Proxifier設(shè)置代理,成功利用內(nèi)網(wǎng)代理訪問內(nèi)網(wǎng)的主機(如圖18)。

圖15

圖16

圖17

圖18
內(nèi)網(wǎng)滲透
既然我們能通過內(nèi)網(wǎng)代理直接訪問內(nèi)網(wǎng)主機就可以開始對該內(nèi)網(wǎng)服務(wù)器進行滲透,首先我們可以看到站點直接就是在登錄頁面的,而且登錄不需要驗證碼,可以嘗試密碼爆破,這個時間會比較長,所以我們在這期間可以找找有沒有別的漏洞,相對于這個PHPOA的CMS漏洞,網(wǎng)上可以找到的是屬于文件上傳漏洞,那么我們可以嘗試下該CMS漏洞還存不存在。
要想把一個php木馬掛到網(wǎng)站上首先要在本地構(gòu)造上傳地址。下圖就是我構(gòu)建的上傳地址(如圖19)。此路徑也是由代碼審計得出的。

圖19
利用我們構(gòu)造好的本地上傳html把PHP木馬上傳到內(nèi)網(wǎng)的服務(wù)器主機上,第一個上傳的是隨便一個TXT文件,第二個選擇我們的PHP一句話木馬文件(如圖20)。上傳成功后給出了一個文件的上傳路徑(如圖21),然后嘗試菜刀連接(如圖22),沒問題,內(nèi)網(wǎng)的webshell也已經(jīng)拿到了。

圖20

圖21

圖22
實驗總結(jié)
總結(jié)
通過本次滲透測試實驗可以看出海洋CMS與PHPOA的安全防護結(jié)果不是很理想,外網(wǎng)內(nèi)置參數(shù)與函數(shù)過濾不夠嚴格,權(quán)限策略設(shè)置不當,從而導致一步就能拿到webshell以及最高權(quán)限。而內(nèi)網(wǎng)存在文件上傳漏洞,權(quán)限中存在漏洞或者權(quán)限策略做的不夠得當。本次滲透的突破口主要是分為內(nèi)網(wǎng)和外網(wǎng),外網(wǎng)設(shè)備存在注入和弱口令破解。內(nèi)網(wǎng)由于arp防火墻策略做的不是很嚴密。導致內(nèi)網(wǎng)淪陷。
安全加固建議
對本次滲透給予安全加固建議:
1. 對用戶可控的變量進行嚴格的檢查和過濾;
2. 文件上傳使用隨機數(shù)改寫文件名和文件路徑,上傳目錄無執(zhí)行權(quán)限;
3. 還有一些加固建議暫時沒明白,待續(xù)。