文件操作漏洞包括文件上传漏洞,文件包含漏洞,文件下载漏洞。
文章目录
前言 : 什么是文件包含漏洞?
1.文件包含漏洞的分类:
本地文件包含漏洞:
远程文件包含漏洞:
2.两种文件包含漏洞的区别:
3.文件包含漏洞的防御措施:
总结:
前言 : 什么是文件包含漏洞?
文件包含漏洞是指程序在执行过程中,将外部文件的内容作为程序代码或数据的一部分来执行使用,从而导致hacker可以利用这个漏洞包含恶意文件,执行任意代码进而访问敏感信息。
1. 文件包含漏洞的分类:
本地文件包含漏洞:
定义:被包含的文件位于服务器本地。
可以通过构造恶意的文件路径,使应用程序加载并执行本地的敏感文件,如配置文件、日志文件或源代码文件。
举例:皮卡丘靶场->pikachu-master/vul/fileinclude/fi_local.php

步骤:
尝试提交表单:

科比:pikachu-master/vul/fileinclude/fi_local.php?filename=file1.php&submit=提交
艾伦: pikachu-master/vul/fileinclude/fi_local.php?filename=file2.php&submit=提交
凯文:pikachu-master/vul/fileinclude/fi_local.php?filename=file3.php&submit=提交
分析:
文件名是file1.php~file5.php。
fileinclude 中 include为包含函数,推出fileinclude目录可能包含了与文件包含漏洞相关的代码和示例。
filename=file1.php:这个参数指定了要包含的文件名,即当前目录或指定路径下的file1~5.php文件。
指定文件名是file1.php~file5.php,我们输入一个明显错误的文件名fileaaa.php试试:

抛出错误:本地文件路径绝对路径
D:\phpstudy_pro\WWW\pikachu-master\vul\fileinclude\fi_local.php
构造url , 指定了要包含的文件名-主机信息文件../../../../Windows/System32/drivers/etc/hosts爆出主机信息:
?filename=../../../../Windows/System32/drivers/etc/hosts

../../返回上一级目录。
例如:url:pikachu-master\vul\fileinclude\fi_local.php
输入:../ url:pikachu-master\vul\fileinclude
输入:../ url:pikachu-master\vul
输入:../../ url:pikachu-master\vul\fileinclude\fi_local.php-> url:pikachu-master\vul
远程文件包含漏洞:
被包含的文件位于远程服务器
前置条件:allow_url_include=on, magic_quotes_gpc=off
可以构造一个指向恶意文件的URL,并诱使受害服务器包含并执行该文件。
举例:

在本地中查找并打开php_ini文件:

编辑->查找->allow_url_include



步骤:
尝试提交表单:

科比: pikachu-master/vul/fileinclude/fi_remote.php?filename=include%2Ffile1.php&submit=提交
艾伦:pikachu-master/vul/fileinclude/fi_remote.php?filename=include%2Ffile2.php&submit=提交
凯文:pikachu-master /vul/fileinclude/fi_remote.php?filename=include%2Ffile3.php&submit=提交
分析:文件名还是是file1.php~file5.php。
流程与本地文件包含相同,但远程文件包含漏洞执行的代码更宽泛。
例如:.DS_Store文件

filename=http://127.0.0.1/pikachu-master/.DS_Store

filename=http://127.0.0.1/pikachu-master/test/phpinfo.txt

2.两种文件包含漏洞的区别:
- 本地文件包含漏洞只需要找上传点,把图片码上传到对方服务器,通过构造构造恶意的文件路径参数,就可以运行webshell。
2.远程文件包含漏洞需要构造包含恶意代码的远程文件URL,并将其作为参数传递给应用程序,从而执行任意代码,需要前置条件:allow_url_include(远程包含功能)=on, magic_quotes_gpc(魔术符合)=off
3. 文件包含漏洞的防御措施:
为了防止文件包含漏洞,可以采取以下防御措施:
严格验证和过滤用户输入:对所有从用户输入获取的文件路径或文件名进行充分的验证和过滤,确保它们符合预期的格式和范围。
使用安全的文件包含函数:尽量使用include_once()和require_once()等函数来包含文件,以防止文件被重复包含。
限制文件包含的范围:通过配置服务器或应用程序,限制被包含的文件只能在特定目录内,禁止目录跳转字符(如"../")。
使用白名单:只允许包含白名单中的文件,禁止包含未知或未授权的文件。
更新和修补:及时更新服务器软件和应用程序,以修复已知的文件包含漏洞。
使用Web应用程序防火墙(WAF):通过WAF来检测和阻止针对文件包含漏洞的攻击尝试。
总结
本地文件包含漏洞与远程文件包含漏洞在防范措施上,两者都需要对用户输入进行严格的验证和过滤,但远程文件包含漏洞还需要特别注意禁用相关配置选项和限制外部资源的访问权限。