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

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

缺陷编号:wooyun-2015-0109606

漏洞标题:JTBC(CMS)SQL注入漏洞一枚

相关厂商:JTBC

漏洞作者: 命途多舛

提交时间:2015-04-24 15:46

修复时间:2015-06-08 15:48

公开时间:2015-06-08 15:48

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

亲,http://wooyun.org/bugs/wooyun-2010-046456这都过了,我有什么道理不通过,别说我们的是一样的

详细说明:

1.首先定位到漏洞文件。passport\common\incfiles\manage_config.inc.php。

function jtbc_cms_module_manage_usersetdisp()
{
$tbackurl = $_GET['backurl'];
global $conn;
global $ndatabase, $nidfield, $nfpre;
global $nusername;
$tsqlstr = "select * from $ndatabase where " . ii_cfname('username') . "='$nusername'";
$trs = ii_conn_query($tsqlstr, $conn);
$trs = ii_conn_fetch_array($trs);
if ($trs)
{
global $face_width_max, $face_height_max;
$tface_width = ii_get_num($_POST['face_width']);
$tface_height = ii_get_num($_POST['face_height']);
if ($tface_width > $face_width_max) $tface_width = $face_width_max;
if ($tface_height > $face_height_max) $tface_height = $face_height_max;
$tsqlstr = "update $ndatabase set
" . ii_cfname('face') . "=" . ii_get_num($_POST['face']) . ",
" . ii_cfname('face_u') . "=" . ii_get_num($_POST['face_u']) . ",
" . ii_cfname('face_url') . "='" . ii_left(ii_cstr($_POST['face_url']), 255) . "',//这里是主要的问题所在
" . ii_cfname('face_width') . "=$tface_width,
" . ii_cfname('face_height') . "=$tface_height,
" . ii_cfname('sign') . "='" . ii_left(ii_cstr($_POST['sign']), 100) . "'
where " . ii_cfname('username') . "='$nusername'";
$trs = ii_conn_query($tsqlstr, $conn);
if ($trs) mm_imessage(ii_itake('global.lng_public.edit_succeed', 'lng'), $tbackurl);
else mm_client_alert(ii_itake('global.lng_public.sudd', 'lng'), $tbackurl);
}
else mm_client_alert(ii_itake('global.lng_public.sudd', 'lng'), $tbackurl);
}


2.$_POST['sign']在传入数据库之前,通过了两个函数ii_cstr和ii_left。定位到两个函数

function ii_cstr($strers)
{
if (get_magic_quotes_gpc()) return $strers;
else return addslashes($strers);
}


function ii_left($strers, $len, $type = 0)
{
if (!(ii_isnull($strers)))
{
if ($type == 0) return mb_substr($strers, 0, $len, CHARSET);
else return substr($strers, 0, $len);
}
}


3.可以看出,ii_cstr是对传入的参数进行了addslashes的操作,ii_left是去字符的前多少位。那么问题来了,如果我们取前255位,传入的字符刚好是255个,最后一位是单双引号之一。那么经过截取,最后一位就只剩下反斜线。构造我们的payload,如测试代码所示。

4.jpg


漏洞证明:

本地的:

4.jpg


互联网案列
http://www.sunka-sh.com

5.jpg


http://www.ooo0.net/
参考上一个的案列吧。
谷歌百度搜索:Copyright 2004-2015 JTBC(CMS),找php版本的就可以了

修复方案:

过滤

版权声明:转载请注明来源 命途多舛@乌云


漏洞回应

厂商回应:

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