Thinkphp 5.1.41 getshell

本文介绍了ThinkPHP 5.1.37至5.1.41版本中存在的一处getshell漏洞,通过复现过程展示了如何利用该漏洞。在Windows.php的析构函数中,利用file_exists触发任意类的__toString()方法。接着在Conversion.php的toJson方法中,通过可控的append参数和getAttr方法,当$relation的visible不存在时,触发__call,最终导致远程代码执行。
摘要由CSDN通过智能技术生成
首先需要实现反序列化,找到传参数的位置。

影响thinkphp 5.1.37——5.1.41

测试可以自己实现一个函数


​​​​​​​<?php
namespace app\index\controller;

class Index{
    public function index(){
        @unserialize($_GET['hack']);
        return 'thinkPHP5';
    }
}

为了实现反序列化自动执行的魔法函数,要找到一个析构函数,thinkphp\library\think\process\pipes\Windows.php中有一个

public function __destruct()
{
    $this->close();
    $this->removeFiles(); //跟进
}

继续跟进removeFiles()

private function removeFiles()
{
    foreach ($this->files as $filename) {
        if (file_exists($filename)) {	//跟进
            @unlink($filename);
        }
    }
    $this->files = [];
}

file_exists会将$filename当作字符串进行处理,触发任意类的__toString()

这时候需要找到一个__toString函数能继续向下执行的类,全局搜索

找到thinkphp\library\think\model\concern\Conversion.php 第242行可以继续执行

public function __toString()
{
    return $this->toJson(); //跟进
}

这里会执行toJson方法,继续跟进toArray

public function toJson($options = JSON_UNESCAPED_UNICODE)
{
    return json_encode($this->toArray(), $options); //跟进toArray()
}
public function toArray()	//131行
{
    ...
    if (!empty($this->append)) {	//184行
    foreach ($this->append as $key => $name) {
        if (is_array($name)) {
            // 追加关联对象属性
            $relation = $this->
TP5.0.24是ThinkPHP框架的一个版本,而getshell指的是获取服务器shell权限的一种攻击手法。下面将用300字回答如何在TP5.0.24版本中进行getshell攻击。 在TP5.0.24版本中进行getshell攻击的一种方式是通过文件上传漏洞实施攻击。首先,我们可以在Web应用程序中找到一个文件上传功能。然后,我们可以通过构造恶意文件进行攻击。 在进行文件上传时,我们可以将文件名改为“xxx.php”,并将文件上传至一些可访问的目录中,例如网站的根目录。由于TP5.0.24版本中存在漏洞,如果没有正确的权限检查,程序会将上传的PHP文件保存并解析为可执行代码。 一旦上传完成,我们可以通过访问上传的PHP文件来执行恶意代码。这样,我们就可以通过getshell攻击获得服务器的shell权限。 然而,要注意的是,这种攻击方式并不是简单地上传一个恶意文件就能成功getshell。很多时候,开发者会在上传文件时进行安全检查,包括文件类型、大小、后缀名等等。因此,攻击者需要仔细研究目标应用程序的其他漏洞或安全弱点,以绕过这些安全检查。 对于软件开发者和网站管理员来说,保护自己的应用程序免受这种攻击是至关重要的。他们应该对文件上传功能进行严格的安全验证和过滤,确保只允许上传被允许的文件类型和进行大小限制。此外,及时更新框架版本和及时修补已知的漏洞是避免这种攻击的有效措施。 总之,TP5.0.24版本存在文件上传漏洞,攻击者可以通过构造恶意的PHP文件实施getshell攻击。为了保护应用程序的安全,软件开发者和网站管理员需要重视并修补这些漏洞。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值