89、用不为空数组绕过
90、
91、第一次匹配php可以换行匹配(
),利用这点可用%0a绕过
92、同90
93、用八进制
94、小数绕过
95、
前面加空格绕过(或者前面加一个‘+’)
96、./表示当前路径
下面是从其他师傅那里拿来的解法
97、MD5无法处理数组,如果遇到数组则统一为NuLL
(PS:有兴趣可以了解一下MD5强碰撞)
98、参考一个师傅的wp:
99、in_array()函数有漏洞 没有设置第三个参数 就可以形成自动转换eg:n=1.php自动转换为1(in_array弱类型比较)
先
然后直接,看源码就ok
100、根据大师傅的提示:
然后
再然后发现flag36d 文件中竟然没有,随便试试,发现在第一个中
最后还有个小坑,需要把0x2d换为-(我也不怎么清楚为什么要这样换
)
101、用的是一个反射类 ReflectionClass()
最后0x2d需要转换为-
102、php5环境 is_numeric函数 是可以识别十六进制的(如果传入v2=0x3c3f706870206576616c28245f504f53545b315d293b3f3e(<?php eval($_POST[1]);?>的十六进制)也是可以识别为数字的。)
但本题环境为php7,这有点麻烦
根据某位大师傅的提示(没错,本人很菜!!),将v3的1.php用php伪协议写入,再找一个v2为base64编码后再转为十六进制为全数字的有效命令,好了上paylode吧:
再访问1.php就OK了
补充v2:
(前面加两个0因为有substr函数嘛)
103、比起102加了过滤,但用102的paylode没什么问题,所有同102
104、sha1是一种加密方式,所以只要传两个相同值就行了
105、考察变量覆盖…
这里有两篇详细的关于变量覆盖的文章供师傅们参考:
https://blog.csdn.net/qq_45300786/article/details/108450638
https://blog.csdn.net/weixin_43803070/article/details/91151861
payload:
106、
数组绕过(姿势有点熟悉)
sha1强碰撞…
107、
parse_str变量覆盖
定义和用法
parse_str() 函数把查询字符串解析到变量中。
注释:如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量。
注释:php.ini 文件中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。
MD5(1)=c4ca4238a0b923820dcc509a6f75849b
payload:
108、erag可以使用%00截断
有一篇关于该函数的博客
双手奉上:https://www.jianshu.com/p/7b732d4b8eac
109、这里是有两种payload:
下面第一个类是异常处理时会碰到的,有兴趣的师傅可以看 http://c.biancheng.net/view/6253.html 写的比较详细的
110、利用 FilesystemIterator 获取指定目录下的所有文件,getcwd()函数 获取当前工作目录 返回当前工作目录