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

简介: XSS(DOM)-low level源代码未进行任何过滤复选框中的内容为可变参数

XSS(DOM)-low level

源代码未进行任何过滤

复选框中的内容为可变参数:

image.png

Payload:<script>alert("qiu")</script>

image.png


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 参数,它包含了以下几个功能:


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


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


姿势

正常Select时,页面如下:

image.png

采用其它XSS标签

Payload:<img src=1 onerror=alert("qiu")>

页面如下:

image.png

上图说明XSS语句被包含在option标签里,

此时客户端为:


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

因此要想办法使XSS语句逃逸

Payload:></option><img src=1 onerror=alert("qiu")>

此时客户端为:

image.png

<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>与之匹配,变为

image.png

<img xss语句>



攻击成功:

image.png


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 参数,确保其只能是预定义的几个语言之一,从而防止恶意用户篡改参数值或者输入非法内容。


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


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


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


姿势

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

由于#后的代码在客户端被注释,因此注入语句不会被传入服务器端,从而达到注入效果。


Payload:#<script>alert("qiu")</script>

image.png


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>");


代码审计

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


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


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


总结

以上为[网络安全]DVWA之XSS(DOM)攻击姿势及解题详析合集,读者可借此入门XSS(DOM)渗透姿势。

后续将分享[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集。

我是秋说,我们下次见。

目录
相关文章
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
694 49
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
1205 4
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
838 3
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
1070 2
|
存储 JavaScript 安全
|
存储 JavaScript 前端开发
Xss跨站脚本攻击(Cross Site Script)
Xss跨站脚本攻击(Cross Site Script)
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
8646 3
|
网络协议 安全 物联网
网络安全涨知识:基础网络攻防之DDoS攻击
网络安全涨知识:基础网络攻防之DDoS攻击
1281 0
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
1210 0
|
存储 安全 JavaScript
手摸手带你进行XSS攻击与防御
当谈到网络安全和信息安全时,跨站脚本攻击(XSS)是一个不可忽视的威胁。现在大家使用邮箱进行用户认证比较多,如果黑客利用XSS攻陷了用户的邮箱,拿到了cookie那么就可以冒充你进行收发邮件,那真就太可怕了,通过邮箱验证进行其他各种网站的登录与高危操作。 那么今天,本文将带大家深入了解XSS攻击与对应的防御措施。