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

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

缺陷编号:wooyun-2015-089892

漏洞标题:HDWIKI鸡肋SQL注入(PHP弱类型实例)

相关厂商:互动在线(北京)科技有限公司

漏洞作者: story

提交时间:2015-01-04 17:53

修复时间:2015-04-02 10:23

公开时间:2015-04-02 10:23

漏洞类型:SQL注射漏洞

危害等级:低

自评Rank:5

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

见drops中@小飞发了一篇文章:http://drops.wooyun.org/tips/4483
我一直认为没有实例的文章不是好文章,于是来帮他加个实例,由PHP弱类型造成的SQL注入,非常典型。
为了不拉低大号的平均rank,小号交起~~嘿

详细说明:

/control/list.php 109行

function dofocus(){
$doctype = $this->get[2];
switch($doctype){
case 2:
$type = 'hot';
$navtitle = $this->view->lang['hotDoc'];
break;
case 3:
$type = 'champion';
$navtitle = $this->view->lang['wonderDoc'];
break;
default:
$doctype = 1;
$navtitle = $this->view->lang['focusDoc'];
$type = 'focus';
}
$url = 'list-focus-'.$doctype;
$this->get[3] = empty($this->get[3]) ? NULL : $this->get[3];
$page = max(1, intval($this->get[3]));
$start_limit = ($page - 1) * $this->setting['list_focus'];
$total=100;
$num=10;
$count=$this->db->fetch_total('focus',"type=$doctype");
$count=($count<$total)?$count:$total;
$list=$_ENV['doc']->get_focus_list($start_limit,$this->setting['list_focus'],$doctype);
$departstr=$this->multi($count, $this->setting['list_focus'], $page,$url);
$this->view->assign('navtitle',$navtitle);
$this->view->assign("departstr",$departstr);
$this->view->assign('type',$type);
$this->view->assign('list',$list);
//$this->view->display('list');
$_ENV['block']->view('list');
}


从GET里获得doctype,$doctype = $this->get[2];,进入一个switch语句。
我们看到后面这句话:$count=$this->db->fetch_total('focus',"type=$doctype");,是直接将$doctype带入SQL语句了的,只要这个switch语句不影响$doctype的值,后面就能注入了。
我们看到case 2和case 3的结果都不会改变$doctype的值,但如果进入default是会将$doctype改为1的。
不是我们传入非2或3的值都会进入default么?这样怎么注入?
这里就犯了一个“弱类型”的错误,当一个字符串和一个数字比较的时候,是会先将字符串intval后再与数字比较。
所以我传入doctype是2xxxx的时候,实际上是会进入case 2而不是default。出了switch语句后,doctype的值还是2xxxx,而不是2.
所以之后的$count=$this->db->fetch_total('focus',"type=$doctype");,$doctype带入SQL语句造成注入。
不过鸡肋的是,hdwiki对GET变量有拦截,我绕不过。所以……仅供学习

漏洞证明:

本地测试,无需登录:
1=2无结果:

006.jpg


1=1有结果:

007.jpg


实际执行的SQL语句是:

0014.jpg


hdwiki对GET有waf限制,所以只能在当前表注入。

修复方案:

intval

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


漏洞回应

厂商回应:

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

忽略时间:2015-04-02 10:23

厂商回复:

最新状态:

暂无