XSS DOM 漏洞分析与测试


dvwa DOM XSS

DOM Based XSS:是基于DOM文档对象模型的操作,通过前端脚本修改页面的DOM节点形成的XSS,该操作不与服务器端进行交互,而且代码是可见的,从前端获取到DOM中的数据在本地执行,从效果上来说也是反射型XSS。

漏洞测试

low 级别

img

可知Select按钮选择参数,数据提交是以GET请求的方式

<?php

# No protections, anything goes

?>

low 级别不存在Protect,可以非常简单的造成XSS攻击

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

当用户触发该URL时就会受到XSS攻击,有弹框出现

img

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检查数组里是否有指定的键名或索引,并且default值不为null,传递的数据中如果存在<script>标签,则会进入if条件,default默认赋值为“English”

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

参数    描述
string    必需。规定要搜索的字符串。
find    必需。规定要查找的字符。
start    可选。规定开始搜索的位置。

相关函数:
strpos()    - 查找字符串在另一字符串中第一次出现的位置(区分大小写)
strripos()  - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
strrpos()   - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)

由于stripos函数的作用所以不能使用<script>标签,但是真的就不能使用该标签吗,答案是可以的,此处要利用到URL中的一个特殊字符‘#’,该字符后的数据不会发送到服务器端,从而绕过服务端过滤

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?#default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

触发该URL,成功绕过服务端的过滤

img

假如真的不能使用<script>标签,也有另一种方法进行绕过服务端的检测

用img标签或其他标签的特性去执行js代码,比如img标签的onerror事件

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?default=</option></select><img src=# onerror=alert("xss")>

触发该URL,成功绕过服务端的过滤

img

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

?> 

代码审计之后可知:在服务器后端判断,要求default的值必须为select选择菜单中的值,这里继续用上面的#符号绕过即可,构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_d/?#default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

成功绕过后端switch的限制

img

impossible 级别

Security level set to impossible

<?php

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

?> 

Author: Qftm
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Qftm !
 Previous
CSRF 漏洞分析与测试 CSRF 漏洞分析与测试
CSRF简介CSRF中文名:跨站请求伪造,英文译为:Cross-site request forgery,CSRF攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息(cookie、session等),以某种方
2018-11-07
Next 
XSS Stored 漏洞分析与测试 XSS Stored 漏洞分析与测试
dvwa存储型XSS存储型XSS:会把用户输入的数据“存储”在服务器端,一般出现在需要用户可以输入数据的地方,比如网站的留言板、评论等地方,当网站这些地方过滤不严格的时候,就会被黑客注入恶意攻击代码,存储在服务器端,每当用户加载该页面时,都
2018-11-04
  TOC