DVWA系列(八)——使用Burpsuite进行File Inclusion(文件包含)

1. 文件包含(File Inclusion)漏洞简介

(1)文件包含

开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含;

(2)文件包含漏洞

开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞;在PHP中经常出现文件包含漏洞;

(3)php中引发文件包含漏洞的通常是以下四个函数

include():找不到被包含文件,报错,但会继续运行脚本;

include_once():与include()类似,区别在于,当重复调用同一文件时,程序只调用一次;

require():找不到被包含文件,报错,并且停止运行脚本;

require_once():与require类似,区别在于,当重复调用同一文件时,程序只调用一次;

(4)文件包含的特征

?page=

?file=

?home=

(5)目录遍历与文件包含的区别

目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对于本系统;

文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含;

(6)文件包含的分类

本地文件包含:可以包含本地文件,在条件允许时甚至能执行代码

  • 读敏感文件,读PHP文件;
  • 上传一句话木马或图片木马,然后进行包含,从而GetShell;
  • 包含/proc/self/envion文件GetShell
  • 若有phpinfo则可以包含临时文件

远程文件包含:可以直接执行任意代码

  • 要保证php.ini中allow_url_fopen和allow_url_include要为On

(7)文件包含漏洞的危害

  • 执行任意代码
  • 读取文件源码或敏感信息
  • 包含恶意文件控制网站,甚至控制服务器

2. 文件包含(File Inclusion)

实验环境

(1)Windows服务器:Windows  Server 2003,IP地址:192.168.37.136;

(2) Linux服务器:192.168.37.135

(3) 测试机:Windows7物理机(开启代理,代理服务器为burpsuite)

实验过程——Windows

安全级别:Low

(1)前期准备,开启本地包含

点击文件包含,显示如下界面;不能进行文件包含

修改配置文件,开启本地包含,并重新启动phpstudy;

(2)设置安全级别

(3)查看源码

(4)源码分析

可以看到,服务器端对page参数没有做任何的过滤跟检查;

服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回;

注:服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行;

(5)实验过程

在实验的过程中,可以读取如下的敏感文件

Windows:

    c:\boot.ini          #查看系统版本

    c:\windows\repair\sam        #查看SAM文件

    查看PHPinfo.php

Linux:

    /etc/passwd

    /etc/shadow

    /etc/resolv.conf

    /root/.ssh/known_hosts

    /etc/network/interfaces

本地文件包含

5.1> 构造url,通过显示结果查看操作系统的类型,以及DVWA的目录;

修改链接

http://192.168.37.136/DVWA/vulnerabilities/fi/?page=/etc/passwd

推断目标操作系统类型,使用page=/etc/passwd做测试,如果目标系统为Linux系统,则会将/etc/passwd下的内容显示出来,所以,目标系统为Windows系统;

暴露了服务器的绝对路径 C:\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\fi\index.php

5.2> 查看系统版本(c:\boot.ini)

http://192.168.37.136/DVWA/vulnerabilities/fi/?page=c:\boot.ini

该系统的版本为Windows server 2003

5.3> 查看SAM文件

http://192.168.37.136/DVWA/vulnerabilities/fi/?page=c:\windows\repair\sam

5.4> 构造url,查看PHP的配置文件

http://192.168.37.136/DVWA/vulnerabilities/fi/?page=C:\phpStudy\PHPTutorial\WWW\DVWA\php.ini

5.5>  构造url,查看PHPinfo.php

5.6> 查看1.txt(在目标服务器上写个1.txt文件,查看是执行还是打印内容)

当服务器包含文件时,不论文件是否是PHP文件,都会尝试当做PHP文件执行,如文件内容是PHP的代码,则直接执行PHP代码并返回结果,若不是,则直接打印文件内容。

远程文件包含

http://192.168.37.136/DVWA/vulnerabilities/fi/?page=http://192.168.37.136/phpinfo.php

当输入目标主机IP地址时,直接进入目标主机的WWW目录下;

安全级别:Medium

(1)设置安全级别;

(2)查看源码;

(3)源码分析

查看源码可知:Medium级别使用了str_replace函数将“http://”,“https://”, “../”,“..\”替换为空;

可以使用“hthttp://tp://”, “..././”,”file:///”方式绕过;

(4)实验过程

4.1> 使用“hthttp://tp://”嵌套方式绕过;

http://192.168.37.136/DVWA/vulnerabilities/fi/?page=hthttp://tp://192.168.37.136/phpinfo.php

4.2> 使用file:///方式绕过

http://192 .168.37.136/DVWA/vulnerabilities/fi/?page=file:///c:\boot.ini

安全级别:High

(1)设置安全级别

(2)查看源码

(3)源码分析

使用fnmatch函数检查page参数,要求page参数必须以file开头,且不等于include.php

可以使用file:///方式绕过;

(4)实验过程

http://192.168.37.136/DVWA/vulnerabilities/fi/?page=file:///c:\boot.ini

安全级别:Impossible

(1)设置安全级别

(2)查看源码

Impossible级别中,page参数只能是如上四种,include.php,file1.php,file2.php,file3.php;杜绝了文件包含漏洞;

实验过程——Linux

安全级别:Low

(1)设置安全级别

(2)查看源码

(3)源码分析

page参数没有进行任何过滤

可以直接在浏览器中输入想查询或执行的内容;

(4)实验操作

本地文件包含

4.1> 查看目标操作系统类型

http://192.168.37.135/dvwa/vulnerabilities/fi/?page=/etc/passwd

可以查看到信息,说明操作系统为Linux;

4.2> 查看DNS配置文件的内容

http://192.168.37.135/dvwa/vulnerabilities/fi/?page=/etc/resolv.conf

4.3> 查看网卡配置文件

http://192.168.37.135/dvwa/vulnerabilities/fi/?page=/etc/network/interfaces

安全级别:Medium

(1)设置安全级别;

(2)查看源码;

(3)源码分析

将“http://”, “https://” 替换为空;

可以使用hthttp://tp://嵌套的方式,file:///的方式绕过;

(4)实验过程

http://192.168.37.135/dvwa/vulnerabilities/fi/?page=file:///etc/passwd

安全级别:High

(1)设置安全级别

(2)查看源码

(3)源码分析

page参数只能是include.php,杜绝了文件包含漏洞;

猜你喜欢

转载自blog.csdn.net/qq_38684504/article/details/89873781