内网隧道代理技术

前言:在学习内网的过程中,我们不得不提到隧道的概念,隧道的搭建在内网渗透有着不可或缺的作用,那么隧道到底是什么呢?它在内网渗透又起到什么样的作用呢?下面由我来带领各位童鞋们一步步揭晓内网隧道代理技术的层层迷雾

目录

隧道的概念

代理的概念

代理和隧道技术的区别

隧道代理技术的使用

隧道代理技术的描述

隧道的分类

从流量层分类

从作用上分类

Http代理和Socks代理(隧道)

端口转发和端口映射

正向代理和反向代理

端口转发工具

LCX

SSH

全局代理工具

SSTAP

Shadswsocks

应用层代理工具

Proxyifile

ProxyChains

内网代理工具

EW

NPS

FRP


隧道的概念

隧道通常指的是在一个网络连接上创建一个加密的数据通道

隧道技术是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将这些其他协议的数据帧或包重新封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络传递

被封装的数据包在隧道的两个端点之间通过公共互联网络进行路由。被封装的数据包在公共互联网络上传递时所经过的逻辑路径称为隧道。一旦到达网络终点,数据将被解包并转发到最终目的地

注:隧道技术是指包括数据封装、传输和解包在内的全过程

代理的概念

服务端处理socks、http(s)等协议请求时,将请求数据包和响应数据包进行转发,担任中间人的角色,可以搭建链路访问内部网络或原本无法访问的站点

代理一般分为正向代理和反向代理两类:

正向代理:被控主机监听端口,通过这个端口形成一个正向的隧道,我们访问内网的流量由被控主机转发到内网并返回相关信息,网络拓扑图如下:

反向代理:由内网主机主动连接到代理机器,然后本地去连接形成反向代理。例如:VPS监听本地端口,已控内网服务器来连接此端口,形成一个隧道

利用代理工具将目标内网的流量代理到本地进行访问,这样就可以对目标内网进行下一步渗透

网络拓扑图如下:

代理和隧道技术的区别

代理主要解决网络访问通讯问题,还可以隐藏本地IP

隧道技术解决在网络中的流量加密传输等

隧道代理技术的应用

提到隧道,我们先来回想一下我们现实生活中的隧道,两个地方要通车,但是中间有重重大山阻挡,怎么办?当然是挖穿它,建立一条可以通车的通道,这个通道称为隧道,这里隧道的作用是使得两个地方能够通车

而在内网渗透中,当我们拿下了某台边界主机,要对边界主机整个内网进行渗透时,首先要在被控主机内网进行信息收集,但是被控制的主机中没有趁手工具对内网进行探测,而我们在家或者在公司的电脑空有工具却无法访问被控主机内网,怎么办?

这个时候我们就要像现实生活中一样,建立一个通道,一条直通被控主机内网中的通道,使得我们在办公网络中的电脑能直接访问到被控主机内网中,而这个通道称为隧道,我们本地需要通过代理到搭建的隧道来访问被控主机内网,这整个过程称为隧道代理技术

隧道代理技术的描述

我们通过边界主机进入内网,往往会利用它当跳板进行横向渗透,但现在的内部网络大多部署了很多安全设备,网络结构更是错综复杂,对于某些系统的访问会受到各种阻挠,这就需要借助代理去突破这些限制,因此面对不同的网络环境对于代理的选择及使用显得格外重要

隧道的分类

关于隧道的分类大体可以从两个方面进行分类

从流量层分类

  1. 应⽤层:HTTP、SOCKS、DNS、SSH
  2. 传输层:TCP、UDP
  3. ⽹络层:ICMP、IPV6

从作用上分类

  1. 端口转发(LCX SSH iptables telnet)
  2. 端口映射(LCX NPS FRP)
  3. 正向代理(EW NPS FRP)
  4. 反向代理(EW NPS FRP)

Http代理和Socks代理(隧道)

我们在内网渗透的时候,大多数用到的代理就是http和socks

Http代理用的是Http协议,工作在应用层,主要是用来代理浏览器访问网页

Socks代理用的是Socks协议,工作在会话层,可以用来传递所有流量的数据包

socks 代理又分为 Socks4 和 Sock5,Socks4只支持TCP,而 Socks5 支持 TCP 和 UDP 并且支持数据加密传输

端口转发和端口映射

端口转发,有时被称为做隧道,是安全壳(SSH)为网络安全通信使用的一种方法简单来说,端口转发就是将一个端口收到的流量转发到另一个端口

攻击者往往利用端口转发来进入内网对某个特定的服务进行攻击,或者是为了绕过本地防火墙的策略(比如:3389端口不出网,我们可以将其转发至出网的53端口)

端口映射是 NAT 的一种,功能是把在公网的地址转成私有地址。简单来说,端口映射就是将一个端口映射到另一个端口供其他人使用

端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务

正向代理和反向代理

正向是从攻击者电脑主动访问目标机器,例如通过主动访问目标建立Shell是正向Shell

反向是从目标机器主动连接攻击者电脑,例如通过在目标机器执行操作访问攻击者电脑建立的Shell是反向Shell

端口转发工具

LCX

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

SSH通过网络远程访问主机提供保护,可以对客户端和服务端之间的数据传输进行压缩和加密,有身份验证、SCP、SFTP、和端口转发的功能

SSH转发常用的参数介绍:

参数作用
-C请求压缩所有数据
-D动态转发,即socks代理
-f后台执行SSH指令
-g允许远程主机连接主机的转发端口
-L本地转发
-N不执行远程命令,处于等待状态
-R远程转发
正向转发

反向转发
动态转发

Netsh

全局代理工具

当我们想让我们的电脑全局都走代理的时候,就需要使用到全局代理,设置了全局代理我们的所有工具不需要再做任何的配置,所有使用的工具如dirsearch、BP、浏览器等都不用做任何的配置,默认就走代理,这种方式最推荐

SSTAP

Shadswsocks

应用层代理工具

Proxyifile 和 ProxyChains 都是非常出名代理连接工具,Proxyifile 一般是Windows代理连接的工具,而 ProxyChains 是 Linux 代理连接工具

Proxyifile

Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS或代理链

ProxyChains

ProxyChains 是 Linux 和其他 Unix 下的代理工具,它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持 HTTP、SOCKS4 和 SOCKS5 类型的代理服务器, 并且可配置多个代理

内网代理工具

EW

Earthworm简称EW,是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透

该工具已经停止维护和下载:EarthWorm

该工具支持端口转发,正向代理,反向代理,多级代理等方式,可以打通一条网络隧道,直达网络深处

下载地址:https://github.com/idlefire/ew

一级正向代理
二级正向代理
一级反向代理
二级反向代理

FRP

 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的启动

frp工具不管是Linux启动还是Windows上启动选项命令都一致

服务端配置

服务端代理配置文件名为frps.toml,frp安装包中自带,下面会详细介绍其配置文件

代理启动命令,使用 frps 运行 frp.toml 配置文件

 ./frps -c ./frps.toml

客户端配置

客户端代理配置文件名为frpc.toml,在frp安装包中自带

代理启动命令,使用 frpc 运行 frpc.toml 配置文件

./frpc -c ./frpc.toml
FRP配置文件

服务端

[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实战演示

我们这里实战演示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

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流量非常稳定,一般企业会使用这个工具将内网的服务穿透到公网服务器上供日常使用

NPS的使用

总结

在内网渗透中常用的几种代理技术

  1. 端口转发
  2. 隧道代理
  3. 路由回话

上面主要是介绍了端口转发和隧道代理,但其实在内网渗透中还有另一种技术非常常见,那就是利用msf来添加路由回话,我这里顺道提一嘴,感兴趣的小伙伴自己去了解下

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值