标签:war lse color div turn als 字符串 取字符串 匹配
<?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 . ‘?‘, ‘?‘) ); //第二次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真 if (in_array($_page, $whitelist)) { return true; } //第二次过滤问号的函数(如果$page的值有?则从?之前提取字符串) // url编码 $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . ‘?‘, ‘?‘) ); //第三次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真 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\" />"; } ?>
//解题思路:
//先运行一下代码发现直接返回 img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />
//找到if条件
//三个条件同时成立才能执行
//empty:检测是否为空,非空非零时是假,空时为真,故!empty则是要求file存在
//is_siring:检测是否为字符串
//emmm::checkFile :将值传入到emmm类的checkFile函数
//isset()判断变量是否声明
//is_string()判断变量是否为字符串
//in_array:函数搜索数组中是否存在指定的值。
//mb_substr : 获取部分字符串
//source.php%253F/../../../../ffffllllaaaagggg
//两次url编码绕过
标签:war lse color div turn als 字符串 取字符串 匹配
原文地址:https://www.cnblogs.com/xiaodiaosi/p/11941587.html