ESPCMS最新 V5.8.14.03.03 UTF8 正式版暴力注入

文章目录

漏洞作者: 索马里的海贼

/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

27160419a34afc4bdb6863012f8bb77d91ea9850

 

注册完成之后去个人中心的个人资料修改页面查看源码 能找到userid

比如我的这个是3

好了 完整的前半部分cookie就是

3||0|1|22222222222222222222@baidu.com|

然后查看当前的cookie 记下ecisp_member_info值 丢进POC

27160847dbd461ce2ab445e6ea1fce71ee770412

 

 

得到这么一串东西

2ed61aee0bba9ff5fa59652ed61aee0bba9ff5

这里说明一下前面的加密算法

$keychar = substr($key, ($i % strlen($key)) – 1, 1);

这里可以看到 key不是从第一位开始加密的 当$i是0或者等于密钥长度的时候

$keychar = substr($key,-1,1) 取的是最后一位 再来看刚才那串东西

2ed61aee0bba9ff5fa59652ed61aee0bba9ff5
这里我加了个空格 可以看到5965之后就开始重复了

第一位是最后一位(拗口)所以真正的密钥应该是 ed61aee0bba9ff5fa59652 查看一下配置文件验证 没错吧

2716140909e8bfa4e5191c68090cf7ca0a984b0a

 

 

拿到这个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注入语句

这里就加了个单引号

271632181f9685b2a283ceeb849a1a91d92c2389

 

 

修改cookie ecisp_member_username值为生成的字符串

访问/index.php?ac=messmain&at=ajaxlist&did=1&ismess=1

27163404b4a4dc0a4aa98e30eb8d326670ab75b6

 

 

 

附上计算key的poc

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录