dvwa靶场文件包含通关学习

  • 什么是文件包含

由于后端服务器对用户输入内容未作合理的校验处理,导致引入了程序之外的文件并执行

LOW

一、查看页面情况

在这里插入图片描述

  1. 页面中存在引入其他文件的内容,那猜测存在文件包含漏洞
  2. page后输入不存在的文件名,让页面报错显示出当前网页的位置

在这里插入图片描述

  1. 这里为了体现出成功了,我在靶机的vulnerabilities目录下创建了phpinfo.png图片文件
  2. 若页面输出了php有关的信息那就表明成功了
# 这是个图片后缀,其中的内容是
<?php echo phpinfo() ?>
二、具体操作
  1. 在page后输入../phpinfo.png

在这里插入图片描述

页面成功将图片当作php代码执行,那就证明文件被成功引入当作php代码执行

三、代码审计
<?php
$file = $_GET[ 'page' ];
?>
  1. 后端直接读取了用户输入的内容,未作任何过滤校验处理
总结:后端未作任何防护,存在文件包含漏洞

Medium

一、页面无变化

通过查看不存文件看网站位置,之后输入刚才的路径查看

http://192.168.75.1/DVWA/vulnerabilities/fi/?page=../phpinfo.png
  1. 页面报错,首先想到的是过滤了一些内容,输入了../phpinfo.png,那猜测是过滤了.., /等字符
  2. 尝试双写绕过输入....//phpinfo.png
    在这里插入图片描述

在这里插入图片描述

  • 发现成功绕过
二、代码审计
<?php
$file = $_GET[ 'page' ];
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\\" ), "", $file );
?>
  1. 这里使用了str_replace()函数,将数组中的内容换成空格,从而过滤掉恶意输入内容
  2. 这里只是做了单次过滤,可以被前端双写绕过
总结:后端对用户输入做替换,将包含有恶意的字符过滤成空格操作,但页面还是存在文件包含漏洞

High

一、查看页面没啥变化
  1. 直接输入文件路径后看变化
  2. 发现无论如何操作页面都提示找不到文件
    在这里插入图片描述
二、由于这是比较老的靶场,那它是用的php语言版本应该是比较早期的(存在有很多问题)可以使用%00截断的方式来尝试绕过
  • %00截断原理(php5.3一下的版本有):

    • %00url编码后是空字符(表示无),在php的底层原理中(基于c语言的)空字符白表示结束的意思
    • 那整条语句就是,当php识别到%00后面的内容后,php语言会将后面的内容忽略,直接执行下一条指令
  • 那尝试输入内容../phpinfo.png%00

!在这里插入图片描述

  1. 这里发现了一个使用了函数fanmatch()函数
  2. fanmatch(a,b)函数简单来说,就是判断b是否包含有a内容
  3. 结合页面给出的几个文件判断,都有相同的file,php等字段,那就禅师看看
?page=file../phpinfo.png

在这里插入图片描述

  • 页面有显示,且phpinfo函数正常执行
三、代码审计
$file = $_GET[ 'page' ];
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
  1. 可以看出直接获取用户传入的信息进行判断
  2. 通过函数fnmatch()函数限定查找文件的范围
总结:后端只要通过fnmatch()函数来判断用户输入内容的合法性和正确性,忽略了因php版本低导致的漏洞问题

Impossile

一、代码审计
$file = $_GET[ 'page' ];
$configFileNames = [
    'include.php',
    'file1.php',
    'file2.php',
    'file3.php',
];
if( !in_array($file, $configFileNames) ) {
    echo "ERROR: File not found!";
    exit;
  1. 后端做了白名单过滤,严格控制访问的文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值