- 文件包含漏洞
- PHP包含
- PHP中提供了四个文件包含的函数,分别是 include()、include once()、require()和require_once()。这四个函数都可以进行文件包含,但作用却不一样,其区别如下:
- 文件包含示例
- 本地包含 Local File Include (LFI)
- Index.php对ArrayUtil.php进行包含,并且使用PrintArr 函数
- phpinfo.txt文件
- 执行结果
- 接下来将phpinfo.txt文件的扩展名分别改为: jpg、rar、xxx、doc进行测试,发现都可以正确显示phpinfo信息。由此可知,只要文件内容符合PHP语法规范,那么任何扩展名都可以被PHP解析
- Index.php对ArrayUtil.php进行包含,并且使用PrintArr 函数
- 远程包含Remote File Include(RFI)
- 本地包含 Local File Include (LFI)
- 文件包含漏洞示例
- 程序代码
- 程序逻辑
- 提交URL,在 index.php 中取得page参数的值。
- 判断S_GET[page]是否为空,若不为空,就使用include包含这个文件。
- 若$_GET[page]为空,就执行else语句来包含home.php文件。
- 当输入以下URL时
- http : / / www . xxser.corm/ index.php?page=xxx.php
- 程序代码
- PHP文件包含利用
- 读取敏感文件
- 远程包含Shell
- 本地包含配合文件上传
- 使用PHP封装协议
- 包含Apache日志文件
- 截断包含
- 绕过WAF防火墙
- 读取敏感文件
- JSP包含
- 静态包含
- <%@ include file="page.txt"%>为JSP中的静态包含语句,静态包含语句先进行包含,再做处理操作。
- JSP语法规定,include指令为静态包含,只允许包含一个已经存在于服务器中的文件,而不能使用变量来控制包含某个文件。这就意味着使用include指令将不存在文件包含漏洞。
- 动态包含
- sjsp:include page="page.txt"/>为动态包含语句。动态包含与静态包含恰恰相反,在运行时,首先会处理被包含页面,然后再包含,而且可以包含一个动态页面(变量)。
- 可以发现,当<jsp:include/>标签在包含一个非JSP文件扩展名时,即使其内容符合JSP语法规范,也会读取其源代码,而不会解析其JSP 代码。这就意味着JSP所包含的页面即使被攻击者控制,攻击者得到的信息也是有限的。(攻击者一般都会包含一些Web容器的配置文件,比如Tomcat的user.xml。)
- sjsp:include page="page.txt"/>为动态包含语句。动态包含与静态包含恰恰相反,在运行时,首先会处理被包含页面,然后再包含,而且可以包含一个动态页面(变量)。
- 静态包含
- PHP中提供了四个文件包含的函数,分别是 include()、include once()、require()和require_once()。这四个函数都可以进行文件包含,但作用却不一样,其区别如下:
- 安全编写包含
- 严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;
- 路径限制:限制被包含的文件只能在某一文件夹内,一定要禁止目录跳转字符,如:“../”";
- 包含文件验证:验证被包含的文件是否是白名单中的一员;
- 尽量不要使用动态包含,可以在需要包含的页面固定写好,如: include("head.php");o
- PHP包含
文件包含漏洞
最新推荐文章于 2024-04-25 13:59:04 发布