ecology checkPassword 代码执行
未知渠道看到了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 字