文件包含漏洞 File Inclusion
- 程序开发⼈员通常会把可重复使⽤函数写到单个⽂件中,在使⽤某个函数的时候,直接调⽤此⽂件,⽆需再次编写,这种调⽤⽂件的过程通常称为包含。
- 程序开发⼈员都希望代码更加灵活,所以会把被包含的⽂件的路径设置为变量,来进⾏动态调⽤,但是正是由于这种灵活性,如果被包含⽂件的路径客户端可控,造成⽂件包含漏洞。
- ⼏乎所有的脚步都会提供⽂件包含的功能,⽂件包含漏洞在PHP 的Web 应⽤中居多,在JSP/ASP/ASP.NET 程序中⽐较少。
文件包含的原理
- 配置文件开启文件包含,远程包含功能。
- 在开发的过程中希望代码更加灵活就把文件路径设置为变量,来进行动态调用。
- 被包含文件路径客户端可控。
文件包含的特点
- 无视文件扩展名读取文件
- 无条件解析PHP代码
漏洞原理
PHP ⽂件包含是程序设计的基础功能之⼀,能够减少代码量,提⾼开发效率。但是使⽤⽂件包含功能时,有类似于以上测试代码的设计,实现了动态包含,就有产⽣⽂件包含漏洞的⻛险。如果实现动态包含的参数,Web 应⽤没有进⾏严格的校验,浏览器客户端⽤户可以影响或控制⽂件包含的路径,就会产⽣⽂件包含漏洞。
Low
低难度文件包含没有对文件路径做任何过滤,我们可以返回上一级路径查看文件内容,也可以选择绝对路径查看或执行文件内容。
Medium
中级难度过滤了../ ..\ http: https:// 我们可以双写绕过,或者继续使用绝对路径
high
高难度对file文件开头做了模糊匹配,也就是说必须是传参必须是file开头,我们可以用PHP封装协议file://来进行绕过。
impossible
不可能难度直接匹配了固定文件名。file1.php file2.php file3.php