ecology checkPassword 代码执行
yzcxld 发表于 四川 技术文章 1249浏览 · 2024-11-27 06:37

未知渠道看到了ct发了一个漏洞,简单跟了一下

ecology的api接口都在@PATH下 所以很快定位到了路由点

代码很简单,看起来似乎只可能是checkPassword()出了问题,简单跟踪一下。checkPassword内部会调用一系列execute()
,没有太多需要注意的点,后面也只看关键的地方。

CheckPasswordCmd.exec(),其中有如下的要求

String var3 = Util.null2String(this.params.get("password"));
  List var7 = var6.decryptList(this.request, var5);




简单来说,也就是我们需要传入一个password,然后数据需要满足泛微的rsa编码,然后后缀是``RSA``结尾,这里格式需要正确,不然的话rsa解码会报错。在weaver.rsa.security.RSA类的静态方法里能看到公私钥的文件信息,everything搜索一下就找到了


然后写个生成加密数据的代码生成password的数据

import weaver.rsa.security.RSA;

import javax.servlet.http.HttpServletRequest;

public class test {
    public static void main(String[] args) {
        RSA var1 = new RSA();
        String var2 = "111111111111";
        String var3 = var1.encrypt((HttpServletRequest)null, var2, (String)null);
        System.out.printf("var3++++++++++++++"+var3);
        System.out.println(var1.decrypt((HttpServletRequest)null, var3, true));
    }
}

一开始走了弯路,以为是password的反序列化问题,后面发现不是 继续向下看。
这里反射调用了com.cloudstore.dev.api.util.Util_DataCache.getObjVal()方法 要求如下

randCodeMap.get(var7) == "" or null 
var 7 来源于getCookie(var1, "__randcode__");



继续向下走,当满足上诉条件会去调用getObjVal()

内部又会继续调用getObjValWithRedis()

这就很简答了 通过redis取出value然后反序列化 朴实无华

但是有以下的要求,其他的自行研究吧。
(1)需要找个地方可以插入redis的数据(key的值需要为 e9DataCache:开头)

(2)新版本泛微需要绕过rasp

(3)上面看起来password的数据是只要满足rsp编码就行的 但是对长度其实有点要求 问题不大

0 条评论
某人
表情
可输入 255
目录