文件包含漏洞攻击及防御

1.漏洞分析
程序开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程被称为包含。
有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
2.漏洞测试
(1)可能存在漏洞的页面URL
http://xxx/index. php?page=downloads. php
http://xxx/index. php?page=main.php
(2)测试语句
http://xxx/index.php?page=C:\windows\ststem.ini
http://xxx/index.php?page=/etc/passwd
3.文件包含函数
require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
include() ,找不到被包含的文件时只会产生警告,脚本将继续运行。
include_once()与include()类似,唯一区别是如果该文件中的代码E经被包含,则不会再次包含。
require_once()与require()类似,唯一区别是如果该文件中的代码E经被包含,则不会再次包含。
4.不知主机路径漏洞测试(本地文件包含漏洞)
(1)选择low级别的文件包含 ,在dwwa\vulnerabilities\fi目录中创建一个测试文件test1.txt,通过文件包含漏洞可以直接查看到该文件内容。
?page=test1.txt
(2)创建文件AppServ\www\test2.txt ,通过文件包含漏洞查看文件内容
?page=../../../test2.txt
(3)../代表父目录(返回上一目录)
5.medium级别,防止远程文件包含
(1)通过str_replace()函数将http://和https://都替换成空
$file=str_replace("http://"," ",$file);
$file=str_replace("https://"," ",$file);
(2)远程包含漏洞的前提,php.ini配置如下
allow_url_fopen=on //默认打开
allow_url_include=on //默认关闭
magic_quotes_gpc=off //默认关闭

上一篇:数据绑定


下一篇:负载、压力、