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方法

  • 功能:检测远程代理服务器是否正常
  • 实现:
    1. 判断使用http还是https协议
    2. 连接到tunnel地址
    3. 检查响应码是否为200
    4. 确认响应内容包含"Georg says, 'All seems fine'"

3. Socket编程

  • 绑定本地地址和端口(默认127.0.0.1:8888)
  • 使用servSock.accept()等待TCP连接(如Proxifier的流量)

session类

包含7个核心方法:

  1. parseSocks5:解析socks5协议
  2. parseSocks4:解析socks4协议
  3. handleSocks:处理socks代理
  4. setupRemoteSession:设置session
  5. closeRemoteSession:关闭session
  6. reader:读取数据
  7. writer:写入数据

工作流程:

  1. 初始化 → 2. run → 3. handleSocks → 4. parseSocks5/4 → 5. setupRemoteSession → 6. reader/writer → 7. closeRemoteSession

parseSocks5方法详解

  1. 检测SocksVersion5
  2. 接收1字节判断atyp(目标类型):
    • IPV4
    • hostname
    • IPV6
  3. 接收4字节为IP地址(转换为标准格式)
  4. 接收2字节为端口号(转换为十进制)
  5. 使用gethostbyname解析主机名

setupRemoteSession方法

  • 发送POST请求,Headers包含:
    • X-CMD: CONNECT
    • X-TARGET: target
    • X-PORT: port
  • 响应码200且x-status为ok时,获取set-cookie

reader方法

  • 发送POST请求,Headers包含:
    • X-CMD: READ
    • Cookie: self.cookie
    • Connection: Keep-Alive
  • 读取响应数据并通过socks发送

writer方法

  • 发送POST请求,Headers包含:
    • X-CMD: FORWARD
    • Cookie: self.cookie
  • 直接发送data数据包

closeRemoteSession方法

  • 发送POST请求,Headers包含:
    • X-CMD: DISCONNECT
    • Cookie: 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协议判断

  1. 第一个数据包(4字节):

    • 05 02 00 02
      • 05:Socks5协议
      • 02 00:nmethods和methods
      • 02:保留字段
  2. 第二个数据包(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)

五、实战问题解决

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编码再解码执行

七、调试技巧

  1. 使用debug模式跟踪执行流程

  2. Wireshark抓包分析:

    • 过滤规则:tcp.port == 8888
    • 关注本地lo网卡流量
  3. 控制台输出调试:

    • 在关键位置添加print语句
    • print(str(ord(atype)))

八、使用流程总结

  1. 上传隧道文件到目标Web服务器
  2. 本地运行reGeorgSocksProxy.py
  3. 配置Proxifier或其他代理工具
  4. 验证代理连通性
  5. 开始内网访问

九、注意事项

  1. PHP版本兼容性(特别是tunnel.php的使用)
  2. 防火墙设置(确保隧道端口可访问)
  3. 流量加密(建议使用HTTPS隧道)
  4. 会话管理(及时关闭无用session)

通过以上详细分析,可以全面掌握reGeorg的工作原理和使用方法,在实际渗透测试中灵活应用。

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 :设置session closeRemoteSession :关闭session reader :读取数据 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: CONNECT X-TARGET: target X-PORT: port 响应码200且x-status为ok时,获取set-cookie reader方法 发送POST请求,Headers包含: X-CMD: READ Cookie: self.cookie Connection: Keep-Alive 读取响应数据并通过socks发送 writer方法 发送POST请求,Headers包含: X-CMD: FORWARD Cookie: self.cookie 直接发送data数据包 closeRemoteSession方法 发送POST请求,Headers包含: X-CMD: DISCONNECT Cookie: 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:保留字段 第二个数据包(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) 五、实战问题解决 1. Proxifier出现多个IP 原因:浏览器启动时会请求多个域名 解决方案:过滤无关请求或使用更精确的代理配置 2. 代理成功判断标准 隧道文件返回"Georg says, 'All seems fine'" 实际端口可用性不影响代理功能本身 六、免杀技巧 1. fsockopen()函数绕过 提前引用函数: $f = 'fsockopen'; $f(...); 2. php://input绕过 使用str_ rot13混淆: 3. Base64编码 对整个脚本进行base64编码再解码执行 七、调试技巧 使用debug模式跟踪执行流程 Wireshark抓包分析: 过滤规则: tcp.port == 8888 关注本地lo网卡流量 控制台输出调试: 在关键位置添加print语句 如 print(str(ord(atype))) 八、使用流程总结 上传隧道文件到目标Web服务器 本地运行reGeorgSocksProxy.py 配置Proxifier或其他代理工具 验证代理连通性 开始内网访问 九、注意事项 PHP版本兼容性(特别是tunnel.php的使用) 防火墙设置(确保隧道端口可访问) 流量加密(建议使用HTTPS隧道) 会话管理(及时关闭无用session) 通过以上详细分析,可以全面掌握reGeorg的工作原理和使用方法,在实际渗透测试中灵活应用。