漏洞概要 关注数(25) 关注此漏洞
缺陷编号: WooYun-2014-62528
漏洞标题: ESPCMS最新 V5.8.14.03.03 UTF8 正式版暴力注入
相关厂商: 易思ESPCMS企业网站管理系统
漏洞作者: 索马里的海贼
提交时间: 2014-05-27 16:42
公开时间: 2014-08-22 16:44
漏洞类型: SQL注射漏洞
危害等级: 高
自评Rank: 20
漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org
Tags标签: 无
漏洞详情
披露状态:
2014-05-27: 细节已通知厂商并且等待厂商处理中
2014-06-01: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-07-26: 细节向核心白帽子及相关领域专家公开
2014-08-05: 细节向普通白帽子公开
2014-08-15: 细节向实习白帽子公开
2014-08-22: 细节向公众公开
简要描述:
弱加密算法的悲剧 伪造任意用户登录 注入 一系列问题
详细说明:
/public/class_dbmysql.php行144
很明显用的维吉尼亚密码算法。
这个算法。。。key 原始文本 结果 3个值互相交换位置都可以运算
只要知道其中两个就能算出第三个,跟异或差不多。
来看看cookie的处理:
/interface/member.php 行109
可以看到 ecisp_member_info这个cookie是由 userid alias integral mcid email等等等等组合起来的 这里先不看后面那么多 因为密钥生成的时候指定长度为20~40 前面这些已经足够我们发挥了
通过注册部分sql语句可以知道 integral默认为0 mcid默认为1 至于alias没有看到初始化的地方,反正这里进sql是null。所以ecisp_member_info的前面部分应该是
userid||0|1|email
密钥最长有40位,所以这里我们注册账号的时候填一个很长的email
注册完成之后去个人中心的个人资料修改页面查看源码 能找到userid
比如我的这个是3
好了 完整的前半部分cookie就是
然后查看当前的cookie 记下ecisp_member_info值 丢进POC
得到这么一串东西
2ed61aee0bba9ff5fa59652ed61aee0bba9ff5
这里说明一下前面的加密算法
$keychar = substr($key, ($i % strlen($key)) - 1, 1);
这里可以看到 key不是从第一位开始加密的 当$i是0或者等于密钥长度的时候
$keychar = substr($key,-1,1) 取的是最后一位 再来看刚才那串东西
这里我加了个空格 可以看到5965之后就开始重复了
第一位是最后一位(拗口)所以真正的密钥应该是 ed61aee0bba9ff5fa59652 查看一下配置文件验证 没错吧
拿到这个key之后 就可以随意自己构造合法的cookie了
可以利用的地方不少 我这里随便找了一个点
/interface/messmain.php 函数in_ajaxlist()行43
member_cookieview()取到username之后丢给了get_member()
先看member_cookieview()
/public/class_connector.php 行401
从cookie中取出之后直接return了 没过滤
再看get_member()
public/class_connector.php 行2141
总的流程大概就是 cookie->eccode解密->sql; 整流程就通了
漏洞证明:
用获得的key来加密sql注入语句
这里就加了个单引号
修改cookie ecisp_member_username值为生成的字符串
访问/index.php?ac=messmain&at=ajaxlist&did=1&ismess=1
附上计算key的poc
修复方案:
换个算法吧
版权声明:转载请注明来源 索马里的海贼@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2014-08-22 16:44
厂商回复:
漏洞Rank:13 (WooYun评价)
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值