网络安全笔记 -- 文件操作(文件包含漏洞)

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 本地包含

  1. 无限制:

test.php代码如下,访问该文件,并传入一个txt文件的地址:
在这里插入图片描述
在这里插入图片描述

  1. 有限制:

test.php代码如下,访问该文件,并传入一个txt文件的地址:

在这里插入图片描述
出现错误,因为该代码强制在后面加上.html后缀:

在这里插入图片描述
解决方法:

%00截断
条件:
php.ini文件中 magic_quotes_gpc=off
php版本 < 5.3.4

在这里插入图片描述

长度截断
条件:
windows,点号需要长于256
Linux,点好需要长于4096

在这里插入图片描述


2.2 远程包含

  1. 无限制:

查看是否开启远程包含权限:
在这里插入图片描述
在远程服务端的a.txt中写入如下代码:
在这里插入图片描述

在浏览器中传入该远程文件地址:
在这里插入图片描述

  1. 有限制:

解决方法:

1. 加 ?

在这里插入图片描述

2. 加 %00
在这里插入图片描述
3. 加 %23

在这里插入图片描述


3. 漏洞修复

固定后缀
固定文件
WAF产品

4. PHP伪协议

php://filter

经常使用的伪协议,一般用于任意文件读取,有时也可以用于getshell.在双OFF的情况下也可以使用。
php://filter是一种元封装器,用于数据流打开时筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用。类似readfile()、file()、file_get_contents(),在数据流读取之前没有机会使用其他过滤器。

参数:

resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流 read=<读链的筛选列表>
该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。 write=<写链的筛选列表>
该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。 <;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀
的筛选器列表会视情况应用于读或写链。

php://input

php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。
需要开启allow_url_include
注: 当enctype=”multipart/form-data”时,php://input是无效的。

php://filter用于读取源码
php://input用于执行php代码

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值