这几天一直跟着团队的小伙伴刷HackerOne,然后就遇到了这个漏洞,记录一下。
关于漏洞原理什么的,可以去看https://portswigger.net/research/xss-without-html-client-side-template-injection-with-angularjs而且就连微软也曾经中过招https://www.uedbox.com/post/12042/
这里就不再论述原理性的东西了,咱们来看一下这个漏洞的具体表现形式是什么样的。
关于漏洞的复现我们可以使用github的集成环境https://github.com/tkmru/client-side-template-injection-sample,也可以使用老外的在线环境,老外的环境的好处就是支持多个AngularJS版本的切换。
我这里以在线环境为例,给大家演示下该漏洞。
https://old.liveoverflow.com/php/angularjs/angular1.4.7.php?q=hello world
在我们输入hello world的时候,会直接把我们的字符打印在页面上,而模板注入比如我们输入{{7 7}},就会得到14,说明语句已经成功运行。
这个时候我们就可以使用我们的相关语句,构造xss了。每个版本的bypass语句不同,列表如下:
以我们测试环境的1.4.9为例,我们使用下面的语句,就可以成功弹框:
代码语言:javascript复制{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}
所以以后在遇到AngularJS的站的时候i,我们不妨去试试这个漏洞。
除了手工检测之外,我们也可以使用对应的工具进行检测(有些误报),下载地址在最后:
只是最后,这个漏洞没通过,唉
工具下载地址:
代码语言:javascript复制https://github.com/tijme/angularjs-csti-scanner
-THE END-