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

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

缺陷编号: WooYun-2014-79045

漏洞标题: Supesite 前台注入 #3 (Delete)

相关厂商: Discuz!

漏洞作者: ′雨。认证白帽子

提交时间: 2014-10-13 17:12

公开时间: 2015-01-11 17:14

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

Delete
如果ucenter和supesite在一个裤的话 可以尝试把uckey注入出来
然后……

详细说明:

在cp.php中



code 区域
$ac = empty($_GET['ac']) ? 'profile' : trim($_GET['ac']);

if(in_array($ac, array('index', 'news', 'profile', 'credit', 'models'))) {
include_once(S_ROOT.'./source/cp_'.$ac.'.php');





包含进来



在source/cp_news.php中

code 区域
if(empty($itemid)) { //这里让$itemid 不为空

if(!empty($_SCONFIG['posttime']) && $_SGLOBAL['group']['groupid'] != 1) {
if($_SGLOBAL['timestamp'] - $_SGLOBAL['member']['lastposttime'] < $_SCONFIG['posttime']) {
showmessage('post_too_much');
}
}
$newsarr['uid'] = $_SGLOBAL['supe_uid'];
$newsarr['username'] = $_SGLOBAL['supe_username'];
$newsarr['dateline'] = $_SGLOBAL['timestamp'];

if($_POST['fromtype'] == 'newspost') {
$newsarr['fromtype'] = 'newspost';
$newsarr['fromid'] = intval($_POST['id']);
} else {
$newsarr['fromtype'] = 'userpost';
}
if(!checkperm('allowdirectpost')) {
$itemarr['itemid'] = inserttable('spaceitems', $newsarr, 1);
inserttable('spacenews', $itemarr);
getreward('postinfo');
postspacetag('add', $_POST['type'], $itemarr['itemid'], $tagarr,1);
$do = 'pass';
} else {
$itemarr['itemid'] = inserttable('postitems', $newsarr, 1);
inserttable('postmessages', $itemarr);
postspacetag('add', $_POST['type'], $itemarr['itemid'], $tagarr,0);
$do = 'me';
}

//更新用户最新更新时间
if($_SGLOBAL['supe_uid']) {
updatetable('members', array('updatetime'=>$_SGLOBAL['timestamp'], 'lastposttime'=>$_SGLOBAL['timestamp']), array('uid'=>$_SGLOBAL['supe_uid']));
}

} else { //进入else
if(empty($_SGLOBAL['supe_uid'])) showmessage('no_permission');
updatetable('postitems', $newsarr, array('itemid'=>$itemid));
updatetable('postmessages', $itemarr, array('itemid'=>$itemid));
$itemid = empty($_POST['oitemid']) ? $itemid : $_POST['oitemid'];//没有intval
postspacetag('update', $_POST['type'], $itemid, $tagarr, 0);//跟这里
}





code 区域
function postspacetag($op, $type, $itemid, $tagarr, $status) {
global $_SGLOBAL;

$deletetagidarr = $addtagidarr = $spacetagidarr = array();
if($op == 'add') { //已经存在的tag,执行加入操作
if(!empty($tagarr['existsid'])) {
$addtagidarr = $tagarr['existsid'];
$_SGLOBAL['db']->query('UPDATE '.tname('tags').' SET spacenewsnum=spacenewsnum+1 WHERE tagid IN ('.simplode($tagarr['existsid']).')');
}
} else {
$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('spacetags').' WHERE itemid=\''.$itemid.'\' AND status=\''.$status.'\'');//查询
while ($spacetag = $_SGLOBAL['db']->fetch_array($query)) {
if(!empty($tagarr['existsid']) && in_array($spacetag['tagid'], $tagarr['existsid'])) {
$spacetagidarr[] = $spacetag['tagid'];
} else {
$deletetagidarr[] = $spacetag['tagid'];//赋值
}
}

foreach ($tagarr['existsid'] as $etagid) {
if(!empty($spacetagidarr) && in_array($etagid, $spacetagidarr)) {
} else {
$addtagidarr[] = $etagid;
}
}
if(!empty($deletetagidarr)) {
//这里要$deletetagidarr不为空
那么也就是要让
$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('spacetags').' WHERE itemid=\''.$itemid.'\' AND status=\''.$status.'\'')这个查询出来的有内容

$_SGLOBAL['db']->query('DELETE FROM '.tname('spacetags').' WHERE itemid='.$itemid.' AND tagid IN ('.simplode($deletetagidarr).') AND status=\''.$status.'\'');//这里delete查询 WHERE itemid='.$itemid.' 没有被单引号引住。。 并且没intval导致注入
$_SGLOBAL['db']->query('UPDATE '.tname('tags').' SET spacenewsnum=spacenewsnum-1 WHERE tagid IN ('.simplode($deletetagidarr).')');
}





首先我们注册一个会员 然后投稿



s9.jpg





投稿 这里tag 随便写一个



+--------+-------+------------+------+--------+

| itemid | tagid | dateline | type | status |

+--------+-------+------------+------+--------+

| 3 | 1 | 1412680532 | news | 0 |

| 4 | 2 | 1412680930 | news | 0 |



数据库里也就创建了。。



这里的itemid 在**.**.**.**/dan/supesite/cp.php?ac=news&op=view&itemid=4

地址中就能看到为4



然后在$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('spacetags').' WHERE itemid=\''.$itemid.'\' AND status=\''.$status.'\'');

这里查询



s10.jpg





这里查询 后面虽然跟了一些字符 提示warning 但是还是能查询出来。



$_SGLOBAL['db']->query('DELETE FROM '.tname('spacetags').' WHERE itemid='.$itemid.' AND tagid IN ('.simplode($deletetagidarr).') AND status=\''.$status.'\'');

然后就进来delete 里面没单引号 且无intval 导致注入。



投稿的时候抓包一下



s11.jpg





s12.jpg





成功出数据

漏洞证明:

s12.jpg

修复方案:

intval 或者 单引号上把

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-10-14 09:08

厂商回复:

supesite已经停止维护。感谢您继续关注我们的其他产品

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2014-10-13 17:21 | BadCat ( 实习白帽子 | Rank:81 漏洞数:21 | 悲剧的我什么都不会)
    2

    围观DELETE注入

  2. 2014-11-03 23:30 | laoyao ( 路人 | Rank:14 漏洞数:5 | ด้้้้้็็็็็้้้้้็็็็...)
    1

    围观DELETE注入+1

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