DOM型XSS测试及修复

在EAdmin源码基础上添加一段本地JS代码,实现对搜索内容的输出关键字功能

在div标签里添加一个b标签,输出关键字

<b id="search_text" class="layui-btn">关键词:</b>

然后添加本地JS处理搜索并输出到关键字

<script src="http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
      <script>
        function GetQueryString(name)
        {
          var reg = new RegExp("(^|&amp;)" +name+ "=([^&amp;]*)(&amp;|$)");
          var r = window.location.search.substr(1).match(reg);
          if(r != null) return unescape(r[2]); return null;
        }
        $('#search_text').html('关键词: '+GetQueryString('ks'));
      </script>

在搜索框测试xss代码<img src=# onerror=alert(1)>

查看输出结果,其中的空格变为加号连字符

将连字符+变为%20

ks=<img%20src%3D%23%20onerror%3Dalert(1)>

再次执行触发XSS

修复方式

将代码中ks参数获取到的内容进行html解析变为text纯文本解析

$('#search_text').text('关键词: '+GetQueryString('ks'));

测试发现输入内容变为单纯的字符串

总结:

DOM型XSS与反射型XSS有点类似,不过DOM型XSS的触发是从本地JS实现的,通常不会走服务器后再回到客户端,挖掘方法也是类似的。

通常大厂容易存在DOM型XSS,在挖掘时可以查看源码查看JS代码,并测试是否有可疑漏洞。

您可能还喜欢...