大佬教程收集整理的这篇文章主要介绍了文件包含漏洞:warmup,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
buu第一题。
<?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;
} //检测传入的page变量是否为空
if (in_array($page, $whitelist)) {
return true; // 检测page变量是否在白名单中
}
$_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 "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
代码的总体思路已经写在注释里了。这里主要有两个点要注意:
1.?过滤中的PHP函数:
mb_substr():跟substr()差不多,截取目标串的相关区间的字符串。
mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置。
2.关于?的二次编码:
简而言之,就是:如果我们对?进行二次编码/解码(传入url时解码一次,上文的代码中urldecode函数解码一次),那么所被包含的名称就会被认为是一个目录(文件夹)而不是一个特定的文件。
?file=hint.PHP?../../../../../ffffllllaaaagggg
2.对于这个漏洞的详细分析:
https://blog.csdn.net/Mikasa_/article/details/88594749
以上是大佬教程为你收集整理的文件包含漏洞:warmup全部内容,希望文章能够帮你解决文件包含漏洞:warmup所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。