在php传参过程中,如果服务器运行的Linux环境,可以加入命令的执行,比如参数名是a,命令可以是:a=ls,通过用;,&&,|| 来分割,还可以同时执行多个命令。在Windows环境下dir等价于ls.
cat是读文件命令,如果被过滤可以用tac来读。
通配符:* 和?
如我们需要找寻flag,就可以用 cat f* 来读取所有f开头的文件。
如果读文件命令都被过滤了,那就要构造命令来读取文件:
在shell中,反引号表示执行的意思,那么 ls /bin 就等价于 ls ' echo /bin',这样就可以构造最终版本:'echo dGfjCg==|base64 -d ' 'ench ZmxhZy5waHAK|base64 -d' 也等价于 ls /bin,也就是把ls 和/bin 先用base64编码,然后运行解码命令就可以实现同样的效果,这样就饶过了过滤,其他命令也是如此操作。
变量拼接过滤:
a=c;b=at;c=fl;d=ag;echo $a$b$c$d 那就等价于cat flag
空格过滤:用<>,${IFS},$IFS$9,代替空格,也可以用控制字符代替空格:%09 ,%0b , %0c
标签:bin,代码,base64,echo,学习,命令,过滤,ls,PHP From: https://www.cnblogs.com/ugnfc/p/18189756