寒假刷题(1)
寒假刷题(1)
hctf_2018_warmup
打开题目是一张图,下意识地F12查看页面源码
发现隐藏的网页
source.php
然后就是代码审计
<?php
highlight_file ( __FILE__ );
class 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 ;
}
if ( in_array ( $page , $whitelist )) {
return true ;
} #判断有没有输入,是不是空字符串
$_page = mb_substr (
$page ,
0 ,
mb_strpos ( $page . '?' , '?' )
);
if ( in_array ( $_page , $whitelist )) {
return true ;
}
$_page = urldecode ( $page ); #解码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' ])
) {
include $_REQUEST [ 'file' ];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />" ;
}
?>
几个关键函数:
https://www.runoob.com/php/func-string-mb_substr.html
https://www.feiniaomy.com/post/388.html
构造的两个?之间的内容必须是白名单上的内容,且需要利用file传入
同时我们访问hint.php得知了flag所在
因为不知道flag准确的存放地址,所以需要../来返回上一级目录,不断尝试最后尝试出的payload是
http://www.bmzclub.cn:23874/?file=source.php?../../../../../flaaagg
拿到flag
这道题是复现了CVE-2018-12613Phpmyadmin后台任意文件包含漏洞,这里附上参考链接,有机会尝试复现一下
https://blog.csdn.net/Mikasa_/article/details/88594749