记一次实战getshell
字数 1261 2025-08-10 22:18:18

ThinkPHP5 RCE漏洞利用与绕过disable_functions技术详解

漏洞发现与初步探测

  1. 目标识别:发现一个未设置验证码的小程序后台系统
  2. 初步尝试
    • 尝试弱口令攻击未果
    • 发现页面输入错误信息时暴露框架信息 - ThinkPHP5框架

ThinkPHP5 RCE漏洞利用

漏洞验证

使用以下Payload验证RCE漏洞存在:

GET http://target.com/?s=captcha
POST数据: _method=__construct&filter=system&method=GET&s=whoami

响应分析

  • 返回"system() has been disabled"表明:
    • RCE漏洞确实存在
    • 但system()函数被禁用

替代执行方法

  1. 尝试其他函数:当system()被禁用时,可尝试:

    • shell_exec()
    • exec()
    • passthru()
    • popen()
    • proc_open()
  2. 使用公开EXP

Webshell管理问题

  1. 冰蝎连接问题

    • 成功连接但无法执行命令
    • 反弹shell功能同样失效
  2. 原因分析

    • disable_functions限制导致命令执行受阻
    • 需要分析上传请求确定实际使用的执行函数

绕过disable_functions技术

方法一:pcntl_exec绕过

  1. 原理

    • pcntl_exec()通常不在默认禁用列表中
    • 允许执行指定程序
  2. 利用步骤

方法二:LD_PRELOAD绕过(仅限Linux)

  1. 原理

    • 通过环境变量LD_PRELOAD预先加载自定义共享库
    • 劫持库函数调用
  2. 实现方式

    • 编写恶意.so文件
    • 通过putenv设置LD_PRELOAD
    • 触发新进程创建

方法三:PHP扩展加载

  1. 原理
    • 上传自定义PHP扩展
    • 通过dl()或php.ini加载
    • 扩展中包含未受限的系统函数

完整攻击流程总结

  1. 识别ThinkPHP5框架目标
  2. 验证RCE漏洞存在
  3. 尝试直接命令执行,确认限制
  4. 上传Webshell获取初步访问
  5. 探测可用的绕过技术:
    • 检查pcntl_exec可用性
    • 评估LD_PRELOAD可行性
    • 考虑PHP扩展加载
  6. 根据环境选择合适绕过方法
  7. 实现持久化访问或权限提升

防御建议

  1. 及时更新:升级到ThinkPHP安全版本
  2. 禁用危险函数:完善disable_functions列表
  3. 输入过滤:严格过滤所有用户输入
  4. 权限控制:Web服务使用最小权限原则
  5. 日志监控:记录异常请求和文件上传行为
  6. WAF部署:拦截已知攻击模式

工具与资源

  1. thinkphp_gui_tools - ThinkPHP漏洞利用工具
  2. Bypass_Disable_functions_Shell - 绕过disable_functions的PHP脚本
  3. phpggc - PHP反序列化Payload生成器
ThinkPHP5 RCE漏洞利用与绕过disable_ functions技术详解 漏洞发现与初步探测 目标识别 :发现一个未设置验证码的小程序后台系统 初步尝试 : 尝试弱口令攻击未果 发现页面输入错误信息时暴露框架信息 - ThinkPHP5框架 ThinkPHP5 RCE漏洞利用 漏洞验证 使用以下Payload验证RCE漏洞存在: 响应分析 : 返回"system() has been disabled"表明: RCE漏洞确实存在 但system()函数被禁用 替代执行方法 尝试其他函数 :当system()被禁用时,可尝试: shell_ exec() exec() passthru() popen() proc_ open() 使用公开EXP : 推荐工具: bewhale/thinkphp_ gui_ tools 上传Webshell可能显示失败但实际成功 Webshell管理问题 冰蝎连接问题 : 成功连接但无法执行命令 反弹shell功能同样失效 原因分析 : disable_ functions限制导致命令执行受阻 需要分析上传请求确定实际使用的执行函数 绕过disable_ functions技术 方法一:pcntl_ exec绕过 原理 : pcntl_ exec()通常不在默认禁用列表中 允许执行指定程序 利用步骤 : 上传专用脚本: Bypass_ Disable_ functions_ Shell 确认pcntl_ exec可用 编写并上传反弹shell脚本 通过pcntl_ exec执行 方法二:LD_ PRELOAD绕过(仅限Linux) 原理 : 通过环境变量LD_ PRELOAD预先加载自定义共享库 劫持库函数调用 实现方式 : 编写恶意.so文件 通过putenv设置LD_ PRELOAD 触发新进程创建 方法三:PHP扩展加载 原理 : 上传自定义PHP扩展 通过dl()或php.ini加载 扩展中包含未受限的系统函数 完整攻击流程总结 识别ThinkPHP5框架目标 验证RCE漏洞存在 尝试直接命令执行,确认限制 上传Webshell获取初步访问 探测可用的绕过技术: 检查pcntl_ exec可用性 评估LD_ PRELOAD可行性 考虑PHP扩展加载 根据环境选择合适绕过方法 实现持久化访问或权限提升 防御建议 及时更新 :升级到ThinkPHP安全版本 禁用危险函数 :完善disable_ functions列表 输入过滤 :严格过滤所有用户输入 权限控制 :Web服务使用最小权限原则 日志监控 :记录异常请求和文件上传行为 WAF部署 :拦截已知攻击模式 工具与资源 thinkphp_ gui_ tools - ThinkPHP漏洞利用工具 Bypass_ Disable_ functions_ Shell - 绕过disable_ functions的PHP脚本 phpggc - PHP反序列化Payload生成器