Hi! Could we please enable some services and cookies to improve your experience and our website?

PHPize Online / SQLize Online  /  SQLtest Online

A A A
Login    Share code      Blog   FAQ

Online Sandbox for SQL and PHP: Write, Run, Test, and Share SQL Queries and PHP Code

Copy Format Clear

Stuck with a problem? Got Error? Ask AI support!

Copy Clear
Copy Format Clear
<?php // 展示当前文件源码,CTF惯用手段 // highlight_file(__FILE__); // 定义一个类 emmm,包含文件名检查函数 class emmm { // 静态方法,校验传入的文件名是否允许被包含 public static function checkFile(&$page) { // 设置白名单,只有 source.php 和 hint.php 允许被 include $whitelist = [ "source" => "source.php", "hint" => "hint.php" ]; // 如果 $page 未定义或不是字符串,提示并拒绝 if (!isset($page) || !is_string($page)) { echo "you can't see it1"; return false; } // 如果传入值严格等于白名单中的某个值,放行 if (in_array($page, $whitelist)) { return true; } // ====== 第一次尝试“问号截断”处理 ====== // 追加问号后再查找问号,确保 mb_strpos 总能找到 '?' $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); echo $_page; echo "\n"; // 取“截断前”的部分再去白名单匹配一次,仍然白名单限定 if (in_array($_page, $whitelist)) { return true; } // ====== 第二次尝试:URL 解码后再做相同处理 ====== $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); echo $_page; // 如果解码后的“截断名”是白名单,也放行 if (in_array($_page, $whitelist)) { return true; } // 三次校验均失败,返回错误 echo "\nyou can't see it2\n"; return false; } } // ========== 主逻辑入口 ========== $file = "source.php%25253fffffllllaaaagggg"; if ( emmm::checkFile($file) // 3. 通过 checkFile 校验 ) { // 条件全部满足后 include 目标文件 echo "yes"; exit; } else { // 否则输出一张图片作为提示 echo "nonono"; } ?>
Copy Clear