4、DVWA——文件包含

文章目录

一、文件包含概述

文件包含是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include()require()include_once()require_once())利用url去动态包含文件 ,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞远程文件包含漏洞 ,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

与文件包含有关的函数:

  • include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。
  • include_once():和 include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
  • require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。
  • require_once():和 require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。

相关的 php.ini 配置参数:

  • allow_url_fopen = on (默认开启)
  • allow_url_include = on (默认关闭)

二、low

2.1 源码分析

php 复制代码
<?php

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

?> 

分析:用 GET 方法接收文件路径,然后将其包含进来。服务器包含文件时,无论文件是否是 PHP 文件,都会尝试当做 PHP 文件来执行。如果文件内容确实是 PHP 文件,则会正常执行并返回结果,如果不是则会将文件内容回显到网页中,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

2.2 通关分析

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

知识点:服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行。

(2)尝试点下面三个链接,看看出现什么情况。可见,确实是点击三个文件,页面会显示不同的内容,同时,注意到,使用GET传参。

(3)既然page参数可以被控制,直接用相对路径,访问上两级文件夹下的 fi.php 文件,构造出 payload:http://192.168.92.1:32769/vulnerabilities/fi/?page=../../hackable/flags/fi.php

三、medium

3.1 源码分析

php 复制代码
<?php

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

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

?> 

分析 :代码增加了 str_replace 函数对 page 参数进行了过滤。将 http://https://替换为阻止远程包含漏洞,将../..\ 替换为阻止用相对路径访问文件。

知识点:使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。例如page=htthttp://p://时,str_replace函数会将http://删除,于是page=http://,成功执行远程命令。

3.2 通关思路

直接双写绕过,payload:http://192.168.92.1:32769/vulnerabilities/fi/?page=..././..././hackable/flags/fi.php

四、high

4.1 源码分析

php 复制代码
<?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 根据指定的模式来匹配文件名或字符串。该函数将检查 page 参数开头必须是否是 file,若是服务器才会去包含相应的文件。

知识点:只能包含file开头的文件,看似安全,我们依然可以利用file协议绕过防护策略。

4.2 通关思路

使用file协议绕过,貌似file协议只支持绝对路径。

五、impossible

php 复制代码
<?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;
}

?> 

分析:Impossible级别的代码使用了白名单机制进行防护,page参数必须为"include.php"、"file1.php"、"file2.php"、"file3.php"之一,彻底杜绝了文件包含漏洞。

相关推荐
AC赳赳老秦1 小时前
OpenClaw生成博客封面图+标题,适配CSDN视觉搜索,提升点击量
运维·人工智能·python·自动化·php·deepseek·openclaw
向宇it3 小时前
php高性能的导出excel读写扩展——xlswriter,比传统的Spreadsheet要快很多
php·excel·xlswriter
bluechips·zhao3 小时前
帝国CMS 8.0 安全审计分析——代码审计
安全·网络安全·代码审计
whuhewei3 小时前
为什么客户端不存在跨域问题
前端·安全
Flittly3 小时前
【SpringSecurity新手村系列】(4)验证码功能实现
java·spring boot·安全·spring
Flittly3 小时前
【SpringSecurity新手村系列】(3)自定义登录页与表单认证
java·笔记·安全·spring·springboot
TechWayfarer4 小时前
攻防对抗:利用IP段归属查询工具快速封禁攻击源——3步联动防火墙(附脚本)
python·网络协议·tcp/ip·安全
思茂信息4 小时前
CST交叉cable的串扰(crosstalk)仿真
服务器·开发语言·人工智能·php·cst
常宇杏起5 小时前
AI安全进阶:AI模型鲁棒性测试的核心方法
大数据·人工智能·安全
木泽八5 小时前
2026年网络安全威胁全景:AI攻防新纪元完全指南
人工智能·安全·web安全