File Inclusion - Low
分析及测试
先看看页面内容:有3个php页面,对应page值
先看看能否修改page值访问到本机的文件(拿Windows宿主机试了下,linux也可以尝试使用本地的文件),发现可行
那么接下来就可以尝试访问到服务器的文件,发现也可以直接访问到,证明既没有设置白名单也没有参数过滤
源代码
只有简单的一行代码,没有任何防御手段
File Inclusion - Medium
分析及测试
直接如法炮制访问服务器文件,发现行不通了
再尝试访问本机文件,结果可以访问到,说明可能对 ../
等字符做了限制
结合给到的WarningNo such file or directory in /var/www/html/DWVA/vulnerabilities/fi/index.php可以尝试直接使用绝对路径来绕过参数限制
源代码
果然是对 ../
, ..\\\
等进行了限制,但是str_replace函数并不靠谱,可以使用绝对路径代替。或将限制的字符进行拼接,因为../等会被替换为空,那么在 ../
中间再拼接一个 ../
:.. ../ / , 由于中间的 ../
会被替换为空,那么左右两边的又会变成一个完整的 ../
,这样就可以正常访问到。
File Inclusion - High
分析及测试
使用之前的方法,发现都不行,报错信息甚至做了自定义,这样就无法通过报错获取到有用的信息
猜测可能做了更严格的限制,可能对参数的格式做了限制,尝试用file://协议类构造一个payload进行文件读取,加一个 file://
,发现可以正常访问到。
源代码
这里使用了fnmatch函数对page参数做了限制,开头必须为file。至于为什么能猜到要加file://,原因是相对路径不行,字符拼接不行,用过绝对路径后还不行就大致能确定不是字符限制的问题,问题可能出在参数格式之类的限制上。