文件包含漏洞攻击及防御
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 //默认关闭
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义