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


    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"%>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    测试:

    在一个文本文件中写入一段代码,在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代码

  • 相关阅读:
    TDD、BDD、ATDD都是什么、有什么区别?(上)
    Vue——formcreate表单设计器自定义组件实现
    sed编辑器
    MS2401隔离Σ-Δ调制器,可替代ADI的AD7401
    Springboot毕设项目个人理财系统0l4c1(java+VUE+Mybatis+Maven+Mysql)
    Java项目:ssm党员管理系统
    C++多态的理解
    Spring通过配置文件管理Bean对象
    砥砺前行 智领未来 | 美格智能2022年半年度经营管理会议顺利召开
    Flutter入门-与原生数据传递
  • 原文地址:https://blog.csdn.net/swy66/article/details/126816587