题目地址:http://67cbb3ff99c448e0957076c4367b109b2fa699df5e294b1a.game.ichunqiu.com/index.php?action=home
题目界面:
点击三个栏目,观察url变化,猜测是一个文件包含(结果不是。。)。这里测试了一下action=flag,查看源码可以直接获取flag,这样就太简单了,我们看一下其他的解法。
如果仅仅看各个页面我们是不知道该系统逻辑的,所以猜测源码泄露,简单的测试一下(或扫描常见的备份/源码泄露),发现存在.git目录,我们尝试对其进行还原。
nac@nac-PC:~/Desktop$ file 3207b7443805336f105c63c6f9948f0c9ae7a4
3207b7443805336f105c63c6f9948f0c9ae7a4: zlib compressed data
发现是zlib文件,使用python的zlib库进行还原,得到如下代码。
这里也可以使用别的方式进行恢复:链接
<?php
include "function.php";
if(isset($_GET["action"])){
$page = $_GET["action"];
}else{
$page = "home";
}
if(file_exists($page.'.php')){
$file = file_get_contents($page.".php");
echo $file;
}
if(@$_GET["action"]=="album"){
if(isset($_GET["pid"])){
curl($_GET["pid"]);
}
}
?>
直接读flag.php的解法就不说了,这里重点在于curl函数,这里的curl并不是php自带的函数,而是在function.php中定义的函数,通过index.php?action=function
可以读取function.php文件。
发现url可控,并且调用PHP的函数curl_exec(),查询官方文档可知支持file协议,所以可以读取本地文件系统。(payload:/index.php?action=album&pid=file:///var/www/html/flag.php
)
打开右键源码,flag就在最底部
网友评论