DVWA靶场练习-XSS(Reflected)

2023-10-25 11:10
文章标签 靶场 练习 xss dvwa reflected

本文主要是介绍DVWA靶场练习-XSS(Reflected),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • low
    • 实践
    • 源码分析
      • 代码运行示例
  • Medium
    • 实践
    • 源码分析
  • high
    • 实践
    • 源码分析
  • impossible
    • 源码分析

仅用作学习笔记使用,过程中可能存在误区,或者不足,望大佬对不足或错误之处进行指出修订。感谢各位的观看,也希望有道友一起学习。

low

实践

第一个等级,我们可以直接尝试正常xss是否有效

<script>alert("xss")</script>在这里插入图片描述
测试结果,可以看到是存在反射性的XSS注入的,这种就是没有对用户的输入进行过滤。
在这里插入图片描述

源码分析

可以看到,代码中只是简单的get请求传过来的参数进行了一个简单的空值判断,没有进行如何的处理

array_key_exists( “name”, $_GET )表示检查 $_GET 数组中是否有名为 “name” 的键名,返回一个布尔值。
&& 是并且运算符,连接两个条件,只有当两个条件都满足时才会返回 true 。
$_GET[ ‘name’ ] != NULL 表示检查 GET 请求中名为"name"的参数的值是否不为空,不为空则返回 true 。

<?phpheader ("X-XSS-Protection: 0");// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Feedback for end userecho '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>

代码运行示例

我们创建一个类似的参数传递代码,查看代码的返回值是什么

<?php
$name = "<script>alert('xss')</script>";
echo '<pre>Hello ' .$name.  '</pre>';
# 代码运行结果
# <pre>Hello <script>alert('xss')</script></pre>

可以看到,最后将下面的Hello 反馈到了输出的界面,导致页面解析了弹窗。我们查看网页确实是写进去了。
在这里插入图片描述

Medium

实践

同样的我们使用后,发现成功执行。
在这里插入图片描述

源码分析

可以看到,在这个等级下面,只是在上一个的基础上加了一个str_replace,将

<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = str_replace( '<script>', '', $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>";
}
?>

在这里插入图片描述

high

实践

在这一关,同样的使用检测,发现无法通过,尝试一下方法:

  • <scr

均无果,通过放回的结果,只剩下一个==>,我们便考虑是不是将<>闭合的html标签给过滤掉了,我们将<>z转义尝试一下,&ltscript&gt==,发现可以输出。
在这里插入图片描述
进一步去尝试将,
&ltscript&gtalert(“xss”)&lt/script&gt
发现没有报错,但是也没有弹窗,变成了一个字符串输出,至此,感觉script标签不太能行,尝试一下其他标签,例如img、iframe
在这里插入图片描述
在这里插入图片描述
使用img标签可以正常显示,<img src=javascript:alert(‘xss’)>使用这个代码,依然报错,猜测是有scr的都会过滤掉,这个时候使用不使用伪代码,使用img标签中的onerror属性,<img src=“1” οnerrοr=alert(‘xss’)>
在这里插入图片描述

源码分析

通过源码分析,我们可以看出来,代码中添加了一个正则匹配,匹配< 后包含有script的任意字符串,导致我们之前含有< script的内容都被替换成了""字符。

<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Get input$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>";
}
?>

impossible

顾名思义,这个关卡不太可能,所以我们直接来看源码,它是这么样来防御这种注入的

源码分析

在这里,它对传入进来的参数使用了一个方法htmlspecialchars,我们看一下这个方法的解释

htmlspecialchars() 是 PHP 中一个用于编码 HTML 字符串的函数。它将 HTML 特殊字符(例如 <、>、"、’ 和 & 等)转换为等效的 HTML 实体,从而避免了 XSS 攻击,并保证输出的字符串不会破坏 HTML 代码。
此方法接受一个参数:需要进行编码的字符串。可以在使用该字符串时调用此函数,也可以将该字符串存储在数据库中并在显示数据之前调用函数。
例如,假设有一个字符串 $str 包含 HTML 标记和一些 JavaScript 代码:

php
$str = "<script>alert('Hello!');</script>";

如果直接将 $str 输出到 HTML 页面,就会执行其中的 JavaScript 代码,并弹出一个警告框,这是非常危险的。为了防止这种情况发生,应该对 $str 调用 htmlspecialchars() 方法:

php
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');

其中,ENT_QUOTES 参数指定单引号和双引号都应该被编码为实体,而 UTF-8 参数指定以 UTF-8 编码输出实体。此时,$str 中的所有特殊字符都将被替换为等效的实体,从而使页面安全地输出。

<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$name = htmlspecialchars( $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>";
}
// Generate Anti-CSRF token
generateSessionToken();
?>

这篇关于DVWA靶场练习-XSS(Reflected)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282173

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

如何快速练习键盘盲打

盲打是指在不看键盘的情况下进行打字,这样可以显著提高打字速度和效率。以下是一些练习盲打的方法: 熟悉键盘布局:首先,你需要熟悉键盘上的字母和符号的位置。可以通过键盘图或者键盘贴纸来帮助记忆。 使用在线打字练习工具:有许多在线的打字练习网站,如Typing.com、10FastFingers等,它们提供了不同难度的练习和测试。 练习基本键位:先从学习手指放在键盘上的“家位”开始,通常是左手的

anaconda3下的python编程练习-csv翻译器

相关理解和命令 一、环境配置1、conda命令2、pip命令3、python命令 二、开发思路三、开发步骤 一、环境配置 1、conda命令 镜像源配置 conda config --show channels //查看镜像源conda config --remove-key channels //删除添加源,恢复默认源#添加镜像源conda config --ad

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

推荐练习键盘盲打的网站

对于初学者来说,以下是一些推荐的在线打字练习网站: 打字侠:这是一个专业的在线打字练习平台,提供科学合理的课程设置和个性化学习计划,适合各个水平的用户。它还提供实时反馈和数据分析,帮助你提升打字速度和准确度。 dazidazi.com:这个网站提供了基础的打字练习,适合初学者从零开始学习打字。 Type.fun打字星球:提供了丰富的盲打课程和科学的打字课程设计,还有诗词歌赋、经典名著等多样