美文网首页
浅谈 Web 渗透中的 XSS

浅谈 Web 渗透中的 XSS

作者: 三分灰 | 来源:发表于2021-08-27 20:37 被阅读0次

    阅读本文大概需要 2.4 分钟

    XSS,即跨站脚本攻击漏洞。

    Web 安全中,攻击者常利用此漏洞,在网页中注入 JS 攻击代码。

    一旦受害者访问该网页,则 JS 代码执行,攻击者则能以此进行一系列攻击操作。

    比如窃取用户 Cookie 信息,甚至可能取得受害者机器的完整控制权。

    今天谈一下 3 种 XSS 类型。

    以 DVWA 为例。首先将 DVWA 难度设置为 Low。

    0x01 DOM 型 XSS

    DOM 型 XSS 是由于浏览器 DOM 解析的漏洞所导致的。

    值得一提的是,对于 DOM XSS,在网页源代码中是看不到 XSS Payload 的。只有在网页动态运行过程中,才会注入,通过 F 12 才可以看到。

    打开 DVWA 中的 XSS (DOM)。

    点击 Select,可以看到所选的内容出现在了地址栏。

    image

    打开 HackerBar,Load URL,将地址上的 English 替换为如下 Payload。

    <script>alert(1)</script>
    
    image

    成功触发 XSS,且查看源代码,看不到这段 XSS Payload。因为这段代码是在网页动态运行过程中插入进去的。

    其实就是源代码里的这一段代码干的。

    <script> 
        if (document.location.href.indexOf("default=") >= 0) {
            var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
            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>"); 
    </script>
    

    直接将地址栏参数插入到了 DOM 中,从而造成了 XSS。

    0x02 反射型 XSS

    和 DOM 型 XSS 有些类似,不同的是,可以直接在网页源代码中看到 XSS Payload。

    打开 DVWA 中的 XSS (Reflected)。

    在输入框输入刚刚使用的 Payload,一样触发 XSS。

    并且查看源代码,可以在源代码中看到 Payload。

    image

    服务端代码如下。

    <?php
    header ("X-XSS-Protection: 0");
    
    // Is there any input?
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // Feedback for end user
        echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
    }
    ?>
    

    可以看出是由于服务端直接将客户端提交的内容回显,导致的 XSS。

    0x03 存储型 XSS

    存储型 XSS 是 XSS 中危害最大的。因为它的 XSS Payload 将会存储在服务端,导致每个访问网页的用户都将被攻击。

    打开 XSS (Stored)。

    在 Name 和 Message,输入 Payload,没错还是刚刚那个。

    出现一点小问题,Name 限制了长度。直接 F 12 修改 maxlength 即可。

    image

    提交,成功触发 XSS。查看源代码,可以看到刚刚提交的 Payload。

    image

    并且每次刷新页面或者重新进入,都会触发。

    因为 Payload 被存储在了服务端。

    每次访问,服务端又会将其查询出来,返回给客户端。

    由此可见存储型 XSS 的危害性,每个用户每次访问,都将受到攻击。

    0x04 总结

    上面只是一些最简单的 XSS 例子,实际渗透过程中,往往会有各种过滤,各种防火墙,导致 XSS 攻击失败。

    这个时候就需要知道各种绕过姿势,这需要我们不断地去深入学习。

    加油!

    相关文章

      网友评论

          本文标题:浅谈 Web 渗透中的 XSS

          本文链接:https://www.haomeiwen.com/subject/bbqviltx.html