前言
文件包含除了本地文件文件包含,还有远程文件包含。本文主要讲述远程文件包含以及文件包含过程中的截断攻击方法。
包含远程文件
-
当远程文件开启时,可以包含远程文件到本地执行。
-
当 allow_url_fopen=On、allow_url_include=ON 两个条件同时为 On 允许远程包含文件。
-
包含本地文件可以这样:
-
包含远程文件:
-
远程文件位置及内容:
-
远程文件包含:
-
文件包含截断攻击:
-
文件包含%00 截断
文件包含截断攻击,在 php 版本小于 5.3.4 允许使用%00 截断,在使用 include等文件包含函数,可以截断文件名,截断会受 gpc 影响,如果 gpc 为 On 时,%00会被转以成\0 ,从而截断会失败。
-
设置php版本:
-
文件包含截断关键源码示例:
-
查看是否开启gpc:
-
截断攻击:
-
-
超长文件包含截断:
- 这个合适于 win32 可以使用/.和 . 进行截断
- php 版本小于 5.2.8 可以成功,linux 需要文件名长于 4096,windows 需要长于 256
-
靶场:
-
设置hosts并访问:
-
-
文件包含 .截断:
-
文件包含/.截断:
-
-
远程包含截断:
-
条件:allow_url_fopen =On 和 allow_url_include=On
-
符号:
-
远程包含截断示例:
-
文件包含漏洞防御
-
严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;
-
路径限制:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:”../”;
-
包含文件验证:验证被包含的文件是否是白名单中的一员;
-
尽量不要使用动态包含,可以在需要包含的页面固定写好,如include(‘head.php’)。
-
设置 allow_url_include 为 Off