<?php
if(isset($_GET['word'])){
$word = $_GET['word'];
if (preg_match("/cat|tac|tail|more|head|nl|flag|less| /", $word)){
die("nonono.");
}
$word = str_replace("?", "", $word);
eval("?>". $word);
}else{
highlight_file(__FILE__);
}
看源码 不一样的是eval("?>". $word);
这个要怎么做呢
我们第一要想到的是重新构造一个<?php ?>标签
原因是eval("?>". $word); 中的?>与前面<?构成了闭合,如果我们在输入php代码系统是不会识别的,会直接当成结果输出
但这里?也被ban了,所以要用到script标签
<script language='php'>system('ls');</script>
就相当于<?php system('ls');?>
而后就是正常操作了过滤了空格用%09换行符代替
tac过滤了用t""ac代替
flag过滤了用fla[g]代替
得到flag