reGeorg简要分析
字数 2617 2025-08-15 21:32:47
reGeorg代理工具深入分析与使用指南
一、reGeorg简介
reGeorg是一款基于HTTP/HTTPS协议的Socks代理工具,主要用于内网穿透场景。它通过Web服务器作为跳板,将本地流量转发到内网目标服务器。
二、环境搭建
基础环境要求
- 靶机环境:PHP环境(推荐phpstudy)
- 代理工具:Proxifier
- 客户端:reGeorgSocksProxy.py(Python脚本)
- 隧道文件:tunnel.nosocket.php或tunnel.php
隧道文件选择
tunnel.php:需要加载php_sockets.dll模块(PHP 5.3以下版本可用)tunnel.nosocket.php:无需socket模块,兼容性更好
三、核心组件分析
reGeorgSocksProxy.py客户端
1. 程序入口
- 使用argparse模块接收参数:
-l:本地监听地址(默认127.0.0.1)-p:本地监听端口(默认8888)-r:每次发送数据量(默认1024字节)-u:目标隧道地址(必须指定)-v:详细输出级别(默认info)
2. askGeorg方法
- 功能:检测远程代理服务器是否正常
- 实现:
- 判断使用http还是https协议
- 连接到tunnel地址
- 检查响应码是否为200
- 确认响应内容包含"Georg says, 'All seems fine'"
3. Socket编程
- 绑定本地地址和端口(默认127.0.0.1:8888)
- 使用servSock.accept()等待TCP连接(如Proxifier的流量)
session类
包含7个核心方法:
parseSocks5:解析socks5协议parseSocks4:解析socks4协议handleSocks:处理socks代理setupRemoteSession:设置sessioncloseRemoteSession:关闭sessionreader:读取数据writer:写入数据
工作流程:
- 初始化 → 2. run → 3. handleSocks → 4. parseSocks5/4 → 5. setupRemoteSession → 6. reader/writer → 7. closeRemoteSession
parseSocks5方法详解
- 检测SocksVersion5
- 接收1字节判断atyp(目标类型):
- IPV4
- hostname
- IPV6
- 接收4字节为IP地址(转换为标准格式)
- 接收2字节为端口号(转换为十进制)
- 使用gethostbyname解析主机名
setupRemoteSession方法
- 发送POST请求,Headers包含:
X-CMD: CONNECTX-TARGET: targetX-PORT: port
- 响应码200且x-status为ok时,获取set-cookie
reader方法
- 发送POST请求,Headers包含:
X-CMD: READCookie: self.cookieConnection: Keep-Alive
- 读取响应数据并通过socks发送
writer方法
- 发送POST请求,Headers包含:
X-CMD: FORWARDCookie: self.cookie
- 直接发送data数据包
closeRemoteSession方法
- 发送POST请求,Headers包含:
X-CMD: DISCONNECTCookie: self.cookie
tunnel.nosocket.php服务端
1. CONNECT处理
- 使用fsockopen()连接目标地址和端口
- 返回X-STATUS: OK或FAIL
- 进入while循环:
- fwrite()写入数据
- fgets()读取结果
2. DISCONNECT处理
- 设置$_SESSION["run"] = false
- 关闭session
3. READ处理
- 检查$_SESSION["run"]
- 输出$_SESSION["readbuf"]
4. FORWARD处理
- 使用file_get_contents获取php://input内容
- 保存到$_SESSION["writebuf"]
- 通过while循环读取数据并追加到$readBuff
四、协议分析
SOCKS5协议判断
-
第一个数据包(4字节):
- 05 02 00 02
- 05:Socks5协议
- 02 00:nmethods和methods
- 02:保留字段
- 05 02 00 02
-
第二个数据包(10字节):
- 05 01 00 01 0a d3 37 04 00 50
- 05 01 00 01:协议和命令
- 0a d3 37 04:目标IP(10.211.55.4)
- 00 50:目标端口(80)
- 05 01 00 01 0a d3 37 04 00 50
五、实战问题解决
1. Proxifier出现多个IP
- 原因:浏览器启动时会请求多个域名
- 解决方案:过滤无关请求或使用更精确的代理配置
2. 代理成功判断标准
- 隧道文件返回"Georg says, 'All seems fine'"
- 实际端口可用性不影响代理功能本身
六、免杀技巧
1. fsockopen()函数绕过
- 提前引用函数:
$f = 'fsockopen'; $f(...);
2. php://input绕过
- 使用str_rot13混淆:
$php = str_rot13('c!c!cuc');
$str = explode('!',$php)[2];
$pql = $str."://";
$phpinput = $pql."input";
3. Base64编码
- 对整个脚本进行base64编码再解码执行
七、调试技巧
-
使用debug模式跟踪执行流程
-
Wireshark抓包分析:
- 过滤规则:
tcp.port == 8888 - 关注本地lo网卡流量
- 过滤规则:
-
控制台输出调试:
- 在关键位置添加print语句
- 如
print(str(ord(atype)))
八、使用流程总结
- 上传隧道文件到目标Web服务器
- 本地运行reGeorgSocksProxy.py
- 配置Proxifier或其他代理工具
- 验证代理连通性
- 开始内网访问
九、注意事项
- PHP版本兼容性(特别是tunnel.php的使用)
- 防火墙设置(确保隧道端口可访问)
- 流量加密(建议使用HTTPS隧道)
- 会话管理(及时关闭无用session)
通过以上详细分析,可以全面掌握reGeorg的工作原理和使用方法,在实际渗透测试中灵活应用。