dvwa靶场第三周练习以及心得

1.File Inclusion

File Inclusion(文件包含),是指当服务器开启了allow_url_include选项时,通过一些PHP的特性函数(比如:include(),require(),include_once()和require_once())利用URL去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

文件包含分类

本地文件包含:当被包含的文件在本地服务器时,就叫做本地文件包含

例:../../../../../etc/passwd

远程文件包含:当被包含的文件在第三方服务器时,就叫做远程文件包含

例:http://www.baidu.com 可以直接打开百度

特性函数区别

include()   当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行
include_once()   功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次
require()   require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行 。使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到函数时才调用 .require()在php程序执行前执行,会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。
require_once()   它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次

2.实验环境

难度等级

Low

源码解析

<?php

// The page we wish to display
//直接获取page参数,未做任何过滤
$file = $_GET[ 'page' ];

?>

漏洞复现

(1)先点击下面的链接,进行尝试,可以看到有结果直接返回了

 (2)这个地方因为我知道他的phpinfo.php文件在他的前两级目录文件中,所以我在这里就直接进行尝试了(本地包含)

 

(3)尝试一下包含百度页面,发现直接成功了(远程包含)

 

Medium

源码解析

<?php

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

// Input validation
//将参数中的http:// https:// ../ ..\都替换成空
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

?>

 操作方法:发现使用str_replace对http://,https:// 替换成空,对于str_replace函数进行的过滤,可以使用双写进行绕过。\n\nhttphttp://://\n\n?page=HttHttp://p://test1/h.txt

 

High

源码解析

<?php

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

// Input validation
//文件名必须以file开始,或只能为include.php
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?>

  匹配"file*",以'file'开头的文件,或者匹配include.php,如果不是以'file'开头的文件,或者不是include.php,就输出"ERROR: File not found!"。

Impossible

源码解析

<?php

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

// Only alLow include.php or file{1..3}.php
//file变量只能为include.php、file1、file2、file3其中一个
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;
}

?>

漏洞复现

  Impossible难度的代码使用了白名单机制进行防护,简单粗暴,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值