1. 文件包含漏洞原理
文件包含【将文件以脚本执行】
文件包含漏洞是指网站在展示或者运行一些页面的时候需要将一些文件包含进来运行,这种行为跟文件上传漏洞是一样的,都是一种正常的操作,但是对包含的文件没有做严格的过滤、检查就会导致包含一些非法的文件来运行。
文件包含各个脚本代码:
<include file="1.asp">
<include file="1.aspx">
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp"/>
<%@ include file="head.jsp"%>
<?php include('test.php')?>
测试:
在一个文本文件中写入一段代码,在phph文件中包含该文件,执行浏览器访问php文件:
2. 文件包含漏洞类型
- 白盒:代码审计
- 黑盒:漏洞扫描工具、公开漏洞、手工看参数值及功能点
文件包含类型: 本地包含、远程包含
2.1 本地包含
- 无限制:
test.php代码如下,访问该文件,并传入一个txt文件的地址:
- 有限制:
test.php代码如下,访问该文件,并传入一个txt文件的地址:
出现错误,因为该代码强制在后面加上.html后缀:
解决方法:
%00截断 条件: php.ini文件中 magic_quotes_gpc=off php版本 < 5.3.4
长度截断 条件: windows,点号需要长于256 Linux,点好需要长于4096
2.2 远程包含
- 无限制:
查看是否开启远程包含权限: 在远程服务端的a.txt中写入如下代码:
在浏览器中传入该远程文件地址:
- 有限制:
解决方法:
1. 加 ?
2. 加 %00 3. 加 %23
3. 漏洞修复
固定后缀 固定文件 WAF产品
|