记一次xss漏洞挖掘

  博客园在整改中,无法更新文章,难受啊...

  记录一次react的xss漏洞发现,比较有意思:

   某个站:  

   直接输入<xxx>,直接把我跳转到了404,猜测可能做了一些验证:

   尝试多重编码,发现都被转义.网页上也没地方执行了图片

   后来尝试html实体义:

   

&lt;img/src=1&gt;-

  直接请求,也被跳转到了404,进行了二次url编码,发现&lt;img/src=1&gt;-掉落在网页源码中可见,并且解析执行了

  记一次xss漏洞挖掘

  查看源码很奇怪,奇怪点就是因为14个输出的地方全部对<>这些进行了转义:

记一次xss漏洞挖掘

记一次xss漏洞挖掘

  那么为什么会触发xss呢?

    真正的触发点:

        

<div class="content desc">
xxxx testtest&lt;img/src=1&gt; yyyyyy
</div>

  明明转义了为啥还能触发?

  全局搜索了下class名:

      记一次xss漏洞挖掘

  发现在js里面调用了

    

), r.default.createElement("div", {
className: "content desc",
dangerouslySetInnerHTML: {
__html: b
}

  js里面创建了div,设置class name然后设置数据,在body里面这样使用:

<div dangerouslySetInnerHTML={{ __html: '<div>可控点</div>' }} />

这样使用dangerouslySetInnerHTML是没有安全风险的,但是在js里面使用dangerouslySetInnerHTML是可能存在安全风险的,它会把实体编码二次转义回<img/src=1>

最终触发xss攻击. 通过这个xss让我明白,一切输出都是不安全的,都有被攻击的风险,即使是有转义,也可能被攻击。也透露了一个小技巧,输出点有class="xxx",id="xxx"等的时候,可以全局搜索下属性名,看看他是怎么处理属性的。

      

  

上一篇:js缓速运动


下一篇:Zabbix的安装与部署---问题处理(php65.6.28 mysqli 报错误 处理)