DVWA 之 XSS(DOM)

2023-11-10

 

目录

1、级别:Low 

 2、级别:Medium

 3、级别:High

4、级别:Impossible


XSS 简介

XSS(Cross Site Script),全称跨站脚本攻击,为了与 CSS(Cascading Style Sheet) 有所区别,所以在安全领域称为 XSS。
XSS 攻击,通常指黑客通过 HTML 注入 篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击行为。

详细介绍可以看之前的文章:【Web安全】跨站脚本攻击XSS_RexHarrr的博客-CSDN博客

DOM—based XSS漏洞的产生

DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。


可能触发DOM型XSS的属性:

document.referer属性

window.name属性

location属性

innerHTML属性

documen.write属性

1、级别:Low 

看一下源码:


<?php

# No protections, anything goes

?>

 Nothing~转战网页源代码

 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

document.location.href 当前页面完整 URL

substring(start,stop)方法用于提取字符串中介于两个指定下标之间的字符。

decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。

document.write是JavaScript中对document.open所开启的文档流(document stream操作的API方法,它能够直接在文档流中写入字符串,一旦文档流已经关闭,那document.write就会重新利用document.open打开新的文档流并写入,此时原来的文档流会被清空,已渲染好的页面就会被清除,浏览器将重新构建DOM并渲染新的页面

这段代码的意思就是说如果存在default,则取出 default 的值赋值给变量lang,然后写入<option value='"lang"'>"decodeURL(lang)</option>,也就是说我们可以注入一些 JS 代码进去,然后这部分会被包含到 lang 变量中,最终回显到页面上。                         

构造注入payload:?default=<script>alert(document.cookie)</script>

 2、级别:Medium

源码:


<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    
    # Do not allow script tags
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}

?>

array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在返回 true,键名不存在则返回 false。

stripos(string,find,start) 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。

header() 函数向客户端发送原始的 HTTP 报头。

 “script” 标签被过滤了,当函数匹配到 <script 字符串的时候就会将URL后面的参数修正为 ?default=English,我们不能直接注入 JS 代码了。 

采用图片插入语句法:

HTML 的 < img > 标签定义 HTML 页面中的图像,该标签支持 onerror 事件,在装载文档或图像的过程中如果发生了错误就会触发。使用这些内容构造出 payload 如下,因为我们没有图片可供载入,因此会出错从而触发 onerror 事件输出 cookie。

构造payload:

?default=English</option></select><img src = 1 onerror = alert(document.cookie)> 

(这里的标签 </option></select> 是根据页面源码写的)

 注入后的网页代码

 3、级别:High

源码:


<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

    # White list the allowable languages
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
}

?>

 这里用switch:case来给default赋值,相当于设置了白名单,只允许传 default值为EnglishFrenchGermanSpanish 其中一个。

可以在注入的 payload 中加入注释符 “#”,注释后边的内容不会发送到服务端,但是会被前端代码所执行。

payload:

?default=English #<script>alert(document.cookie)</script>

 

4、级别:Impossible

源码:


<?php

# Don't need to do anything, protection handled on the client side

?>

 意思是不需要做任何事,保护在客户端处理。  

 看下网页源代码:

 这里的语句变了,并没有对我们输入的内容进行URL解码,所以我们输入的任何内容都是经过URL编码,然后直接赋值。因此不存在XSS漏洞。

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

DVWA 之 XSS(DOM) 的相关文章

  • 跨域iframe自动调整大小

    我正在使用 iframe 和 javascript 制作一个 Web 小部件 我想让我的 iframe 能够根据其内容 从其他域加载 调整大小 我做了一些搜索 包括在 Stack Overflow 上 我找到了几个主题 但我找不到关于这个问
  • 将按键和焦点事件附加到 contenteditable div 内的元素

    我想附上keypress and focusoutcontenteditable 内段落的事件处理程序div 下面的代码似乎不起作用 div p Test p p Test p p Test p div p1 bind keypress f
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 标准 Html.DisplayTextFor() 没有 HTML 编码吗?

    我们目前正在处理 ASP NET MVC 项目之一的一些 XSS 问题 我发现两个问题 第一个问题与我们的请求验证模式有关 攻击者现在可以利用此安全漏洞在我们的数据库中删除一些不良内容 第二个问题是我们如何显示此内容 我们使用 Html D
  • jQuery - 将所有展开的文本包装在 p 标签中

    我遇到以下情况 以下代码被写入我的页面 div Some text here which is not wrapped in tags p Some more text which is fine p p Blah blah another
  • 将 javascript 合并到一个文件中

    最近阅读了雅虎的网络优化技巧并使用 YSlow 我在我的一个网站上实现了他们的一些想法http www gwynfryncottages com http www gwynfryncottages com你可以在这里看到该文件http ww
  • jqgrid 在编辑框中选择不正确的下拉选项值

    我正在使用表单编辑 表单中有两个选择框 一个选择框是国家 地区 另一个选择框是州 州选择框取决于所选的国家 地区 并将动态填充 例如 Country 美国 期权价值 1 英国 期权价值 2 美国的状态 阿拉巴马州 选项值 1 加利福尼亚州
  • javascript中文本区域限制每行的字符数

    我试图用 javascript 限制文本区域中每行的字符数 我在这里看到了一些例子 但并不完全符合我的要求 我写了一些东西 只有当你每次添加超过限制时才可以 换句话说 我每行有 10 个字符的限制 如果你总是输入至少 10 个字符就可以正常
  • 从 JavaScript 将参数传递给 p:remoteCommand

    我想将值传递给remoteCommand来自 JavaScript 如果这是可能的 我该如何做到这一点以及如何在支持 bean 中接收它们 对的 这是可能的 如何执行此操作取决于 PrimeFaces 版本 你可以在PrimeFaces 用
  • 无法读取setInterval(Hooks)中的最新状态变量[重复]

    这个问题在这里已经有答案了 我想这是因为 JS 的工作原理 但我想你不会在类中遇到这个问题 在此代码中 let open setOpen React useState false let counter setCounter React u
  • 无法从 Twin.macro 中的 Prop 获取值

    您可以在这里查看我正在尝试执行的操作的示例 https codesandbox io s vibrant leaf qj8vz https codesandbox io s vibrant leaf qj8vz 注意 这个特定的例子使用双宏
  • 动态地将 .on() 方法与事件映射绑定

    我使用此语法来确保事件绑定动态添加li元素 ul list on click li function do something 我尝试使用这样的事件映射来存档相同的内容 ul list hammer css hacks false on s
  • apollo 客户端从存储中删除而不发生突变

    我需要通过 id 从本地存储中删除一条 记录 而不使用突变 因为服务器不支持突变 我尝试像这样手动访问商店 delete this apolloClient store getState apollo data 1112 这会删除记录 但是
  • Material.Angular.io mat-autocomplete [displayWith] 函数更新范围变量

    我遇到了一个问题 我可以在实例化 mat autocomplete 的组件控制器中访问本地声明的变量 我面临的问题是局部变量被困在这个范围内 我无法更新它们 有关更新 mat autocomplete 范围变量的任何想法或想法 最终我要做的
  • javascript onclick 进入新窗口

    这是我的代码
  • 在部分渲染时执行 JavaScript

    我有一些 JavaScript 代码 我想在用户单击其文件夹之一后执行 它会触发 show 操作和 show js erb 从而呈 现部分内容 Show js erb 当用户单击其文件夹之一时触发 如下所示 body append 它成功注
  • 如何修复带有单个道具的括号的 prettier 和 tslint 错误?

    我使用 prettier 和 tslint https github com alexjoverm tslint config prettier https github com alexjoverm tslint config prett
  • 使用 Javascript 检测 Pepper (PPAPI) Flash

    我们使用的是专有的文档查看器 它与某些 Chrome 版本中的 Pepper 版本的 Flash 配合得不太好 所以我希望能够检测到它并重定向到不同格式的相同内容 由于这个版本似乎落后于 NPAPI 版本 所以我一直在使用闪光检测 http
  • 如何在 WebView 中添加 JavaScript 函数并稍后在提交 reCAPTCHA 时从 HTML 调用它

    我在 WebView 中添加一个 JavaScript 函数 如下所示 Kotlin val webView findViewById R id webview as WebView webView getSettings setJavaS
  • 如何在 ionic2 中 pop() 之后重新加载 ion-page

    我有2页Page1 and Page2 我用过this nav pop 在Page2中 它将弹出Page2 Page1将启用 但我想刷新Page1 先感谢您 您可以将父页面与导航推送一起传递 这样您就可以将父页面作为 navParamter

随机推荐

  • thinkphp 生成runtime.php,彻底关闭ThinkPHP日志功能 关闭Runtime中的日志方法

    彻底关闭ThinkPHP日志功能 从ThinkPHP的核心文件里寻找入口 直接贴上代码 该配置文件位置为 ThinkPHP Conf debug php 保存 好了 2 将LOG LEVEL允许记录的日志级别设置为空 则不会记录日志 3 关
  • zabbix详解(二)—— zabbix故障自愈

    今天继续给大家介绍Linux运维相关知识 本文主要内容是zabbix的故障自愈 在上文zabbix的使用中 我们自定义了一个可以监控85端口jar服务的监控项 今天 我们就尝试正式使用该监控项 并定义相对应的触发器 最终实现邮件报警功能 及
  • Microsoft NNI入门

    GiantPandaCV导语 Neural Network Intelligence 是一个工具包 可以有效帮助用户设计并调优汲取学习模型的神经网络架构 以及超参数 具有易于使用 可扩展 灵活 高效的特点 本文主要讲NNI基础的概念以及一个
  • C++创建对象时报错:引发了异常: 读取访问权限冲突。 p2.m_Height 是 nullptr。

    未修改前的类代码如上 Person5类在test09 函数中创建p1对象 报错信息如下 报错信息指向第38行代码 解决方法 将Person5类中的拷贝构造函数注释掉即可编译通过 引发了异常 读取访问权限冲突 p2 m Height 是 nu
  • 简单说说多益笔试

    一 选择题 考了spring java虚拟机 二 填空题 忘了 三 简答题 1 面向对象三个特性 2 三次握手 四次握手 3 数据库操作 四 编程题 1 数学题 知道首项 前项与后项的差 2 偶数二进制数反转 3 一堆数中找出等于s的个数
  • 使用Kotlin + JetPack 对旧项目进行MVVM改造

    介绍 本次改造的项目地址为 https github com stevenwsg XSYBBS 这个项目是两年前在学校写的 当初写的时候比较赶时间 一直堆业务功能 没有考虑项目结构 写了很多重复代码 最近在看Kotlin协程和JetPack
  • 十九、Linux驱动之虚拟网卡驱动

    1 基本概念 网络设备是完成用户数据包在网络媒介上发送和接收的设备 它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送 并将接收到的数据包传递给上层协议 与字符设备和块设备不同 网络设备并不对应于 dev目录下的文件 应用程序最终
  • 将tensor张量转换成图片格式并保存

    这是一个工具包 功能 反向操作transforms Normalize和transforms ToTensor函数 将tensor格式的图片转换成 jpg png格式的图片 注 这里是我原始的写法 但是是存在着一些改进空间的 如评论区所言
  • Unity安卓 Failed to extract resources needed byIL2CPP

    这个报错可能是由于gradle版本过低导致不支持IL2CPP 在android studio里面升级一下即可 我遇到这个问题的时候使用的版本更新软件叫做git 就是在gitignore里面的一些文件不能提交导致自己这边可以运行但是别人更新之
  • 每日一C stat

    Example The following program calls stat and displays selected fields in the returned stat structure include
  • 和为S的连续正数序列 Java实现

    和为S的连续正数序列 Java实现 问题描述 给定一个正整数S 打印出所有和为S的连续正数序列 解决方案 我们可以使用滑动窗口的思想来解决这个问题 定义两个指针start和end 分别表示连续序列的起始位置和结束位置 初始时 start和e
  • 下载、安装与使用 pysot

    本篇文章简要介绍了如何在windows环境下 使用anaconda进行pysot运行环境的部署以及使用 目录 1 下载仓库 2 设置环境 3 下载模型 4 运行 demo py 4 1 PYTHONPATH 4 2 Demo运行参数 pys
  • 岛屿类-网格类问题-DFS

    本文讲解200 岛屿数量问题 属于常见的岛屿类 网格类问题 本题使用DFS的思想 1 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地
  • EXCEL-VBA:调用打开文件夹对话框,选择路径

    With Application FileDialog msoFileDialogFolderPicker InitialFileName ActiveSheet TextBox1 Value Title 请选择目录 If Show The
  • maven项目手动添加一个jar包

    对于一些工程需要一些手动添加的jar包 不只是有maven管理的 1 按规范来说 首先把jar包放入webapp web inf lib下 2 右击项目 build path configure build path add jars 3
  • 【Qt】错误:'connect' was not declared in this scope 解决方法

    这种错误主要出现在在非继承QObject的类中或者一般函数中使用connect导致 原因是connect是QObject的一个static方法 将connet替换为QObject connect即可
  • PyTorch同时读取两个数据集实现半监督学习

    PyTorch同时读取两个数据集实现半监督学习 文章目录 PyTorch同时读取两个数据集实现半监督学习 写在开头 修改记录 数据路径 TODO 方法一 通过对 getitem 的索引进行计算 按照比例关系选择对应数据集的数据 方法二 直接
  • VScode终止运行代码/程序/停止死循环

    我有时候在VScode运行代码进入死循环或者像下图爬虫遭到了反爬 但是又找不到像pycharm中的终止运行代码键 无奈之下只能将VScode关闭 反复的开关VScode非常浪费时间 且有可能偷偷占用CPU 非常不好 查阅后得知在终端中按Ct
  • kubernetes集群部署 详细操作步骤

    kubernetes集群部署 详细操作步骤 选择使用kubeadm这一工具来部署kubernetes集群 1 安装要求 本次预计部署具有一个master 两个node的k8s集群 在开始之前 部署Kubernetes集群机器需要满足以下几个
  • DVWA 之 XSS(DOM)

    目录 1 级别 Low 2 级别 Medium 3 级别 High 4 级别 Impossible XSS 简介 XSS Cross Site Script 全称跨站脚本攻击 为了与 CSS Cascading Style Sheet 有所