DVWA-XSS (Reflected)

2023-11-18

大约

“跨站点脚本 (XSS)”攻击是一种注入问题,其中恶意脚本被注入到原本良性和受信任的网站上。 当攻击者使用 Web 应用程序发送恶意代码(通常以浏览器端脚本的形式)时,就会发生 XSS 攻击, 给其他最终用户。允许这些攻击成功的缺陷非常普遍,并且发生在使用输出中用户输入的Web应用程序的任何地方, 无需验证或编码。

攻击者可以使用 XSS 向毫无戒心的用户发送恶意脚本。最终用户的浏览器无法知道脚本不应该被信任, 并将执行 JavaScript。由于恶意脚本认为脚本来自受信任的来源,因此可以访问任何 Cookie、会话令牌或其他 您的浏览器保留并与该网站一起使用的敏感信息。这些脚本甚至可以重写 HTML 页面的内容。

因为它是反射式 XSS,恶意代码不会存储在远程 Web 应用程序中,因此需要一些社交工程(例如通过电子邮件/聊天的链接)。


目的

以一种或另一种方式,窃取登录用户的cookie。


低水平

在将请求的输入包含在输出文本中之前,低级别不会检查该输入。

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?>

 

这是一个处理用户从URL中传递的数据的PHP脚本,它输出一个欢迎消息。相较于之前的代码,这个脚本已经改进了安全性。

使用 `array_key_exists()` 函数来验证 “name” 是否在 `$_GET` 中,并且 `$_GET[ 'name' ]` 不等于 `NULL`。通过这样的验证,可以确保 `$_GET[ 'name' ]` 中实际上有数据,避免了在尝试访问未定义的变量时出错的情况。

可见这个脚本是用户输入什么,就会显示什么。

Spoiler: ?name=<script>alert("XSS");</script>.

在输入框输入<script>alert("XSS");</script> 点击submit,显示了alert

 

 

 

 

 

 

中级

开发人员尝试添加一个简单的模式匹配来删除对“<script>”的任何引用,以禁用任何JavaScript。

<?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 user
    echo "<pre>Hello {$name}</pre>";
}

?>

这是一个PHP脚本,用于获取用户从URL中传递的数据,并输出带有一个欢迎消息的HTML代码。

然而,这个脚本存在一个非常严重的安全漏洞,即它没有对输入数据进行任何过滤或净化,这导致了潜在的XSS攻击。攻击者可以在URL参数中注入恶意的JavaScript代码,从而在用户访问该页面时在用户的浏览器中执行任意脚本。这将使攻击者能够窃取用户的授权Cookie、获取用户的输入、重定向到其他恶意站点等等。

使用 `str_replace()` 函数来清除 `<script>` 标记是不足以解决XSS漏洞的。应该使用适当的净化方法和输出编码方法,如 `htmlspecialchars()` 函数或使用模板引擎来生成JavaScript。

因此,建议对用户的输入数据进行彻底的验证和净化,包括过滤特殊字符、将HTML标签转义为它们的HTML实体等。此外,推荐使用先进的Web应用程序防火墙(WAF)和安全性别扫描程序来保护您的Web应用程序免受此类攻击。

 

由中级的脚本可见,该程序只把<script>替换成了空字符串。 

Spoiler: Its cAse sENSiTiVE.

 输入低水平攻击,显示了alert("XSS")

高水平

开发人员现在认为他们可以通过删除模式“<s*c*r*i*p*t”来禁用所有JavaScript。

<?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 user
    echo "<pre>Hello {$name}</pre>";
}

?>

这是一个处理用户从URL中传递的数据的PHP脚本,它尝试使用正则表达式从用户输入的数据中删除所有的 `<script>` 标记。相较之前的代码,它更具有安全性。

使用 `array_key_exists()` 函数来验证 “name” 是否在 `$_GET` 中,并且 `$_GET[ 'name' ]` 不等于 `NULL`。通过这样的验证,可以确保 `$_GET[ 'name' ]` 中实际上有数据,避免了在尝试访问未定义的变量时出错的情况。

与之前不同的是,这个脚本使用了正则表达式 `preg_replace()` 函数,它可以删除用户输入数据中的所有 `<script>` 标记。通过这种方式净化输入数据,可以缓解XSS攻击的风险,因为攻击者无法在用户的浏览器中注入任意的JavaScript代码。

然而,这种方法并不是完全可靠的,因为攻击者可以使用各种技术来绕过此类过滤器。在实际应用中,应该使用更多净化手段来确保Web应用程序的安全性。

因此,建议在处理用户输入数据时要进行适当的验证和净化,并使用可以确保您的Web应用程序免受XSS攻击的安全措施。例如,使用HTML Purifier这样的库,它可以清除输入数据中的HTML标记并将其转义为安全的HTML实体。

 

Spoiler: HTML events.

输入低水平脚本,只显示了一个Hello > 

 

不可能的水平

使用内置的PHP函数(如“htmlspecialchars()”), 可以转义任何会改变输入行为的值。

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $name = htmlspecialchars( $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello {$name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?>

这是一个处理用户从URL中传递的数据的PHP脚本,它首先验证Anti-CSRF token的有效性,然后使用 `htmlspecialchars()` 函数将用户输入数据转义为HTML实体,以防止XSS攻击。

使用 `array_key_exists()` 函数来验证 “name” 是否在 `$_GET` 中,并且 `$_GET[ 'name' ]` 不等于 `NULL`。通过这样的验证,可以确保 `$_GET[ 'name' ]` 中实际上有数据,避免了在尝试访问未定义的变量时出错的情况。

此外,这个脚本还包含了Anti-CSRF token的相关代码。 `checkToken()` 函数用于验证用户提交的token与存储在Session中的token是否相同,以防止CSRF攻击。如果两个token不同,则重定向到指定的URL `index.php`。 `generateSessionToken()` 函数用于生成并存储新的Session token。

这种方式能够一定程度地保护Web应用程序和用户免受XSS和CSRF攻击,但并不是完全可靠的。建议在处理用户输入数据时,采用更多安全措施和净化方法,以确保应用程序的安全性。同时,也建议进行安全漏洞测试和评估,以检测并解决任何可能存在的安全漏洞。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DVWA-XSS (Reflected) 的相关文章

  • 自动化测试只会用工具就行?真不是这样

    软件测试是对项目研发过程的产物 文档 代码等 进行审查 保障产品质量的过程 我们可以通过手工测试 自动化测试 工具扫描等方法完成这个任务 其中 自动化测试是当前重要的一种测试方法 具有响应速度快 稳定性高 人工干预少的特点 很好地契合了高响
  • 渗透测试工具ZAP入门教程(4)-设置代理谷歌浏览器

    ZAP 代理原理 如下浏览器 拿Chrome为例 Chrome发出的请求都会先经过 ZAP 然后再由 ZAP 发往服务器 如下图 设置代理 1 Chrome设置只需要在地址栏输入 chrome settings 2 然后在搜索栏输入 代理
  • Wireshark

    Wireshark是一个网络协议分析器 早期称为Ethereal 它能够捕获网络数据包并对数据包进行详细的解析 Wireshark可用于捕获和分析几乎所有类型的网络流量 包括以太网 无线网络 蓝牙 USB等等 除了对网络数据包的捕获和解析
  • 安全测试-django防御安全策略

    django安全性 django针对安全方面有一些处理 学习如何进行处理设置 也有利于学习安全测试知识 CSRF 跨站点请求伪造 Cross Site Request Forgery CSRF 是一种网络攻击方式 攻击者欺骗用户在自己访问的
  • 11款常用的安全测试工具

    1 AppScan 一款安全漏洞扫描工具 支持Web和移动 现在安全测试做漏洞扫描非常适用 它相当于是 探索 和 测试 的过程 最终生成很直观的测试报告 有助于研发人员分析和修复通常安全测试工具用这个 扫描一些安全漏洞 用起来比较方便 网上
  • Slowhttptest----DoS攻击工具

    Slowhttptest DoS攻击工具 文章目录 slowhttptest centos下安装slowhttptest Ubuntu 20 04 LTS下安装slowhttptest 使用 slowhttptest SlowHTTPTes
  • XSS漏洞的分类

    XSS漏洞按照攻击利用手法的不同 有以下三种类型 类型A 本地利用漏洞 这种漏洞存在于页面中 客户端 脚本自身 其攻击过程如下所示 Alice给Bob发送一个恶意构造了Web的 URL Bob点击并查看了这个URL 恶意页面中的JavaSc
  • 性能测试包含哪些内容?

    性能测试是对软件产品在特定条件下的性能进行测试和评估的过程 性能测试的内容可以包括以下几个方面 1 负载测试 负载测试是指在特定条件下 对软件产品的性能进行测试和评估 测试人员可以通过模拟不同的用户数量 并发请求 访问频率等条件 来评估软件
  • Webgoat-Hijack a session通关答题教程

    Webgoat Hijack a session Hijack session是会话劫持 先了解需要用到的知识 Cookie原理 1 客户端向服务端发起请求 2 服务端返回cookie 自己也保存了一份 3 客户端收到后 将cookie也保
  • 安全测试基础知识

    软件安全测试是评估和测试系统以发现系统及其数据的安全风险和漏洞的过程 没有通用术语 但出于我们的目的 我们将评估定义为分析和发现漏洞 而不尝试实际利用这些漏洞 我们将测试定义为发现和尝试利用漏洞 安全测试通常根据要测试的漏洞类型或正在执行的
  • 【mac 安全渗透测试】之SQL注入Demo

    一 关于sqlmap的介绍 1 SQLmap工具简介 SQLmap是一款开源的SQL注入漏洞检测 利用工具 可以检测动态页面中get post参数 cookie http头 它由Python语言开发而成 运行需要安装python环境 在ka
  • Dependency-check

    文章目录 前言 工具简介 工具原理 原理 检测过程 NVD CVSS 工具安装 工具地址 环境依赖 工具安装 Jenkins Plugin Command Line On nix On Windows On Mac rec Maven Pl
  • 模糊测试--强制性安全漏洞发掘

    文档分享地址链接 链接 http pan baidu com s 1dDeROHj 密码 o15z 前 言 我知道 人类和鱼类能够和平共处 George W Bush 2000年9月29日 简介 模糊测试的概念至少已经流传了20年 但是直到
  • DVWA-15.Open HTTP Redirect

    OWASP将其定义为 当 Web 应用程序接受不受信任的输入时 可能会导致 Web 应用程序将请求重定向到不受信任输入中包含的 URL 则可能会出现未经验证的重定向和转发 通过修改恶意站点的不受信任的 URL 输入 攻击者可以成功发起网络钓
  • DVWA-Brute Force

    Brute force 暴力破解 是一种试图通过尝试所有可能的组合 通常是密码 来获取敏感信息或破解加密的技术或方法 这种攻击方法通常被用来破解密码 对系统进行入侵或访问受限资源 暴力破解攻击的原理是通过迭代尝试各种可能的组合 例如密码字典
  • 端口扫描工具-Nmap

    Nmap是一款功能强大 功能丰富的网络扫描工具 对于网络管理员和安全专业人员来说 是一个非常有用的工具 并且被广泛应用于安全审计 网络调查 漏洞搜寻等领域 能扫描主机的端口 查看端口是否开放 端口的服务是什么 端口扫描不但可以为黑客所利用
  • DVWA-XSS (Reflected)

    大约 跨站点脚本 XSS 攻击是一种注入问题 其中恶意脚本被注入到原本良性和受信任的网站上 当攻击者使用 Web 应用程序发送恶意代码 通常以浏览器端脚本的形式 时 就会发生 XSS 攻击 给其他最终用户 允许这些攻击成功的缺陷非常普遍 并
  • 一个人录制课程--全网独一

    获取方式 见文末 共计八章节 1 php编程 2 web安全基础 3 中间人攻击与抓包 4 正反向代理与端口转发5 提权 6 内网 7 实战8工具 1 PHP编程 1 讲师介绍 http协议 挖掘BUG mp4 2 搭建apache php
  • Black Duck----安装 Synopsys Detect,运行你的第一次

    Synopsys Detect 也称为 Detect 可以在您的桌面图形用户界面 GUI 或命令行 CLI 上运行 虽然 Detect 运行有许多变化 但运行将执行以下三个步骤 首先 Detect 将使用项目的包管理器来派生该包管理器已知的
  • 『渗透测试基础』| 什么是渗透测试?有哪些常用方法?如何开展?测试工具有哪些?优势在哪里?

    渗透测试基础 什么是渗透测试 有哪些常用方法 如何开展 测试工具有哪些 优势在哪里 1 什么是渗透测试 2 有哪些常用方法 2 1 针对性测试 2 2 外部测试 2 3 内部测试 2 4 盲测 2 5 双盲测试

随机推荐

  • vue-video-player 一款vue的前端视频播放插件 支持m3u8

    项目进行时 对视频模块需要进行组件开发 结合当前使用的开发框架是vuecli 于是寻找到vue video player 根据github上的文档进行开发 发现并不能实现播放功能 于是在网站上进行寻找发现 vue video player依
  • 3.爬虫之Scrapy框架的安装与使用

    1 Scrapy框架 1 1 介绍 Scrapy是一个开源和协作框架 可以用于数据挖掘 监测 自动化测试 获取API所有返回的数据或网络爬虫 Scrapy是基于twisted框架开发的 twisted是一个流行的事件驱动的python网络框
  • 不用导入animate库,也能实现animate的动画

    1 基础公共代码 animated animation duration 8s 持续时间 animation fill mode both 2 在animate官网 Animate css A cross browser library o
  • Django快速开发(精简版)

    1 使用虚拟环境 workon 虚拟环境名 2 退出虚拟环境 deactivate dajngo框架开发的大体流程 1 创建环境 mkvirtualenv 虚拟环境名 删除 rmvirtualenv 虚拟环境名 virtualenv p u
  • SMTP发送邮件

    SMTP是发送邮件的协议 Python内置对SMTP的支持 可以发送纯文本邮件 HTML邮件以及带附件的邮件 Python对SMTP支持有smtplib和email两个模块 email负责构造邮件 smtplib负责发送邮件 首先 我们来构
  • vue +C# mvc 坑

    1 把input标签放入到form表单中后 再将input中的值新增到数据库后 界面会刷新 解决 删除form 标签 原因待查
  • win11 安装opencv-python

    首先下载python3 7以上版本 installer版本 选择安装pip 添加环境 cmd 打开终端 pip install i https pypi tuna tsinghua edu cn simple opencv python p
  • List集合给另一个List集合赋值问题(即浅拷贝与深拷贝)

    问题 java中将一个list的内容复制给另一个list之后 去新的list进行操作的时候 原来的list也会发生变化 解决方案 直接采用 进行的复制属于浅层赋值 两者指向的使用一个地址 所以操作一个时另一个也会发生变化 如果不想出现这样的
  • 搜索插入位置 JavaScript

    在有序数组中查找 无则插入 元素 返回索引 题目详情 https leetcode cn com problems search insert position description 遍历数组查找 插入 查找比较简单 插入时会麻烦一些 如
  • Java中的String用法

    新手Java程序员了解String类型 1 String是什么数据类型 String在定义上是java lang包下的一个类 它不是基本的数据类型 String是不可变的 JVM使用字符串池来存储所有的字符串对象 2 创建String对象的
  • 阅读书源最新2020在线导入_最最最最最好用的小说神器,全网书源免费用!

    今天给大家分享的是小说软件 为了满足所有小伙伴的需求 今天安卓和苹果都安排上了 一款Android应用 一款iOS应用 两款应用都十分相似 都是可以自行添加书源的软件 几乎覆盖全网小说 阅读 Android 软件本身是没有任何资源的 如果不
  • elasticsearch心得体会

    1 聚合搜索的字段如果是求和的情况下 字段不能为string类型 那么排序时字段要求是不是也一样呢
  • Qt中带token的Http请求

    详细代码 get请求 QTimer timer timer setInterval 5000 设置超时时间 timer setSingleShot true 单次触发 if m pGetManager delete m pGetManage
  • gstreamer中tee如何实现动态增减支路(预览+截图+录像)

    系列文章目录 Gstreamer中获取帧数据的方式 gstreamer中如何使用probe 探针 获取帧数据 gstreamer拉流rtsp使用appsink获取帧数据 预览 截图 gstreamer中如何使用fakesink获取帧数据 预
  • Vue3/ Vue3 生命周期 钩子函数 总结 、Vue3 内 主要 钩子函数 、Vue2 和 Vue3 生命周期钩子函数对比

    一 Vue3 生命周期 钩子函数 总结 1 介绍 Vue组件简介 Vue是组件haul编程 从一个组件诞生到消亡 会经历很多过程 这些过程就叫做生命周期 例如 生命周期就是人出生到入土是一样的 有少年时期 青年时期 中年时期 老年时期 每个
  • Requests

    REQUESTS的基本操作 参考崔庆才爬虫 GET请求 import requests r requests get http www gdsgj com r encoding r apparent encoding 根据从返回内容中解析的
  • 构造函数不能被继承

    构造函数不同于其他类方法 因为他创建新的对象 而其他类方法只是被现有的对象调用 这是构造函数不被继承的原因之一 继承意味着派生类对象可以使用基类的方法 然而 构造函数在完成工作之前 对象并不存在 构造函数不能是虚函数 创建派生类对象时 将调
  • springboot项目获取真实用户ip(不是虚拟ip)

    最近在工作中遇见一个业务场景是获取用户真实的ip地址 就跟现在网上评论展示ip一样的业务场景 然后自己就去了解了一下 1 pom依赖配置
  • 数据库模式分解(应该比较易懂吧)

    数据库模式分解 部分函数依赖 函数依赖的确定 1对1的关系时 有两个函数依赖 1对多时 有一个函数依赖 多对多时 没有函数依赖 函数依赖类型 右 边 不 为 左 边
  • DVWA-XSS (Reflected)

    大约 跨站点脚本 XSS 攻击是一种注入问题 其中恶意脚本被注入到原本良性和受信任的网站上 当攻击者使用 Web 应用程序发送恶意代码 通常以浏览器端脚本的形式 时 就会发生 XSS 攻击 给其他最终用户 允许这些攻击成功的缺陷非常普遍 并