[网络安全]DVWA之File Inclusion攻击姿势及解题详析合集

简介: 以下姿势均以本机环境为例low level在D:\Software\PHPStudy\phpstudy_pro\WWW路径写入1.php

以下姿势均以本机环境为例

low level

在D:\Software\PHPStudy\phpstudy_pro\WWW路径写入1.php


image.png

源码

<?php

// The page we wish to display

$file = $_GET[ 'page' ];

?>

并未进行任何过滤


GET?page=http://127.0.0.1/1.php



medium level

源码

<?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() 函数是 PHP 中用于字符串替换的内置函数。它可以在字符串中查找并替换指定的内容,返回替换后的新字符串。其基本语法如下:


str_replace( $search, $replace, $subject, $count = null )


其中,search 参数指定要查找的字符串,可以是一个字符串或者一个字符串数组;

replace 参数指定要替换成的字符串,可以是一个字符串或者一个字符串数组;

subject 参数指定要进行替换操作的原始字符串,可以是一个字符串或者一个字符串数组;

count 参数(可选)指定要替换的最大次数,默认为全部替换。


例如,下面的代码将字符串中的空格字符替换为下划线字符:


$str = "hello world";

$new_str = str_replace( " ", "_", $str );

echo $new_str;  // 输出:hello_world


需要注意的是,str_replace() 函数对大小写敏感,不会改变原始字符串的大小写。

如果要对大小写进行不敏感的替换,则需要使用 str_ireplace() 函数。

此外,如果要用一个字符串数组来替换多个字符串,也可以使用 preg_replace() 函数来实现。


如果在调用 str_replace() 函数时不指定 $count 参数,则默认将所有的匹配项都进行替换,也就是像下面这样:


$new_str = str_replace($search, $replace, $subject);


在这种情况下,函数会在 $subject 字符串中查找 $search 字符串,并将全部匹配到的字符串都替换为 $replace 字符串,并返回替换后的新字符串。


在源码中,str_replace()将http://、https://、../、..\转换为


大写绕过

由于str_replace() 函数对大小写敏感

将?page=http://127.0.0.1/1.php

修改为?page=HTTP://127.0.0.1/1.php

文件包含成功:

image.png

?page=Http://127.0.0.1/1.php、?page=HttP://127.0.0.1/1.php等均可

双写绕过

原理

双写绕过是一种常见的绕过字符过滤规则的方法,其原理是将需要过滤的字符在 URL 中双倍输入,从而绕过简单的过滤器。例如,如果字符过滤器禁止输入单引号 ',则可以通过输入两个单引号 '' 来绕过过滤器。


下面是一个示例 PHP 代码,演示如何使用双写绕过字符过滤:


// Get the input parameter from the URL
$user = $_GET['user'];
// Filter out single quotes to prevent SQL injection attacks
$user = str_replace("'", "''", $user);
// Execute the SQL query
$sql = "SELECT * FROM users WHERE username = '$user'";
$result = mysql_query($sql);

在上面的代码中,使用 str_replace() 函数将用户名中的单引号替换成两个单引号,以防止 SQL 注入攻击。然而,这种简单的过滤方式容易被双写绕过,例如将输入参数设置为 admin'',即可成功绕过过滤器,执行恶意操作。


实操

将?page=http://127.0.0.1/1.php

修改为?page=httphttp://://127.0.0.1/1.php

文件包含成功:

image.png


Url编码绕过

将?page=httphttp://://127.0.0.1/1.php进行url编码以绕过前端限制,

变为?page=httphttp://:/%2F127.0.0.1/1.php,再被浏览器解码

文件包含成功:

image.png


high level
源码
<?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;
} 
?>


代码审计

该代码从 URL 中获取名为 page 的参数,并将其赋值给变量 $file。然后使用 fnmatch() 函数对 $file 进行验证,判断它是否匹配指定的条件。如果 $file 不以 file 开头且不等于 include.php,则说明用户请求的不是目标文件,因此输出错误信息并调用 exit() 函数,结束程序执行。


姿势: file://包含的文件路径


GET?page=file://D:\Software\PHPStudy\phpstudy_pro\WWW\1.php

文件包含成功:

image.png


Impossible level
源码
<?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;
}
?>


代码审计

上述代码首先从 URL 参数中获取 $file 的值,然后使用 if 语句来检查该值是否等于 include.php、file1.php、file2.php 或 file3.php 中的任意一个。

如果是,则可以包含该文件。其他情况下,都会输出错误信息并结束程序执行。


总结

以上为[网络安全]DVWA之File Inclusion攻击姿势及解题详析合集,读者可借此入门文件包含攻击。

我是秋说,我们下次见。


目录
相关文章
|
20天前
|
SQL 存储 前端开发
< 今日份知识点:web常见的攻击方式(网络攻击)有哪些?如何预防?如何防御呢 ? >
网络安全威胁日益严重,2017年的永恒之蓝勒索病毒事件揭示了网络攻击的破坏力。为了防御Web攻击,了解攻击类型至关重要。Web攻击包括XSS、CSRF和SQL注入等,其中XSS分为存储型、反射型和DOM型,允许攻击者通过注入恶意代码窃取用户信息。防止XSS攻击的方法包括输入验证、内容转义和避免浏览器执行恶意代码。CSRF攻击则伪装成用户执行操作,防范措施包括同源策略和CSRF Token验证。SQL注入则通过恶意SQL语句获取数据,预防手段包括输入验证和使用预编译语句。面对网络威胁,加强安全意识和实施防御策略是必要的。
|
2天前
|
安全 网络安全 数据安全/隐私保护
网络安全:如何保护你的网络不受黑客攻击
【5月更文挑战第10天】 网络安全摘要:强化密码安全,使用防病毒软件,启用防火墙,定期更新软件,使用安全网络连接,备份重要数据,提高安全意识。这七大措施助你构建安全网络环境,抵御黑客攻击。记得持续学习,适应不断变化的威胁。
|
15天前
|
安全 网络安全
|
19天前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B-CTF夺旗与攻击
模块C和D是CTF夺旗比赛,分别侧重攻击和防御。作为渗透测试工程师,你需要在靶机(Linux/Windows)上找寻多种漏洞,如命令注入、文件上传、文件包含、远程代码执行和缓冲区溢出,以获取权限。同时,注意不能攻击裁判服务器,违者将被罚离场。提交靶机的唯一标识flag值并按规则加分。模块D中,你需要在堡垒服务器上发现并修复同样类型的漏洞,保证服务可用性,制作系统防御报告,所有截图需清晰,文件以PDF格式保存提交。
14 0
|
19天前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A-CTF攻击与防御
模块C和D是CTF夺旗比赛,分别聚焦攻击和防御。攻击者需利用各种漏洞(如命令注入、文件上传、远程代码执行等)攻陷靶机,获取权限,但禁止攻击裁判服务器。防御者则需检测并加固堡垒服务器,确保服务可用性,发现并修补同样类型的漏洞。比赛分数依据靶机的flag值和加固报告,强调不提供补时。操作环境涉及Windows和Linux,选手需使用谷歌浏览器登录。注意提交清晰的截图和PDF报告至U盘。
13 0
|
3月前
|
网络协议 Unix Linux
【网络安全 | 信息收集】操作系统判定及端口扫描(全网最详析)
【网络安全 | 信息收集】操作系统判定及端口扫描(全网最详析)
74 0
|
3月前
|
安全 Java 网络安全
【网络安全 | 扫描器】御剑安装及使用教程详析
【网络安全 | 扫描器】御剑安装及使用教程详析
278 0
|
3月前
|
Web App开发 算法 网络安全
【网络安全 | Misc】解码工具Koczkatamas及CyberChef安装及使用详析
【网络安全 | Misc】解码工具Koczkatamas及CyberChef安装及使用详析
166 0
|
3月前
|
存储 安全 生物认证
【网络安全 | 指纹识别工具】WhatWeb使用详析
【网络安全 | 指纹识别工具】WhatWeb使用详析
83 0
【网络安全 | 指纹识别工具】WhatWeb使用详析
|
19小时前
|
安全 算法 网络安全
网络安全与信息安全:保护你的数据,保护你的世界
【5月更文挑战第12天】在数字化的世界中,网络安全和信息安全已经成为我们生活的重要组成部分。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的问题,帮助读者更好地理解和保护自己的数据。我们将讨论如何识别和防止网络安全威胁,如何使用加密技术来保护信息,以及如何提高自己的安全意识,从而在网络世界中更安全地生活。