当前位置: 首页 > news >正文

【密码学】对称加密与非对称加密在JS逆向与爆破测试中的应用

一、引言

在现代Web安全测试实践中,密码学技术无处不在,尤其是在涉及用户身份验证、数据传输保护、签名验证等关键安全点上。作为渗透测试人员或红队工程师,我们常常会在诸如JS逆向工程、API接口还原、登录框爆破、参数构造复现等测试场景中,遇到前端或通信层所实现的加密逻辑。

要有效地进行模拟请求、自动化爆破或数据还原,必须具备一定的密码学背景知识,尤其是理解对称加密(Symmetric Encryption)与非对称加密(Asymmetric Encryption)的主要差异、识别方法与典型应用。

本文旨在从实用角度系统介绍两种加密方式的特点、判断方法,以及它们在前端JS逆向与接口爆破中的典型应用案例,避免空谈数学理论,更聚焦于实战分析、识别技巧与攻防对抗


二、对称加密与非对称加密:实用角度全面对比

1. 对称加密(Symmetric Encryption)

✅ 特点
  • 加解密使用相同的密钥(Key),加密与解密过程对称;
  • 速度快,计算资源占用少,适合大数据量的快速加解密;
  • 需要安全传输密钥给通信对方,是其最大弱点。
🧰 常见算法
  • AES(高级加密标准)
  • DES/3DES(现已不推荐)
  • RC4(已废弃)
  • Blowfish、ChaCha20等
🧪 典型前端表现
  • 前端存在一段明显的 AES.encrypt(明文, key)CryptoJS.AES.encrypt()
  • 加密结果每次一样,说明ECB模式或IV固定
  • 密文体积较小(相对非对称);
  • 密文可逆,说明前端可解密。

2. 非对称加密(Asymmetric Encryption)

✅ 特点
  • 使用一对密钥:公钥(Public Key)加密,私钥(Private Key)解密
  • 不需要共享私钥,适合非信任环境;
  • 计算开销大,不适合加密大数据(通常配合对称加密使用)。
🧰 常见算法
  • RSA(最常见)
  • ECC(椭圆曲线加密)
  • ElGamal、DSA(主要用于签名)
🧪 典型前端表现
  • 出现 JSEncrypt().encrypt()rsa.encrypt()node-forge 等 RSA 调用;
  • 公钥字符串常以内含 -----BEGIN PUBLIC KEY----- 开头;
  • 加密结果较长,长度和公钥位数有关(例如2048-bit公钥加密出的密文约为344字节)
  • 密文不可逆(在前端无法解密),即“黑盒”加密。

三、实战场景一:JS逆向分析登录加密逻辑

🎯 目标

识别登录请求中的加密机制,复原加密过程,从而实现接口自动化调用或爆破测试。

📜 示例分析

示例请求体(登录请求):
{"username": "admin","password": "U2FsdGVkX1+0sJgxOYd+yQ=="
}
分析步骤
  1. 密码字段已加密,判断是否可复现:

    • 首先复制该密文值多次尝试相同明文:

      • 若每次发送相同密码得出的密文都相同,则说明很可能是对称加密 + 固定密钥 + 固定IV(或ECB模式)

      • 若每次加密结果都不同,说明可能存在:

        • 随机IV + CBC模式;
        • 加盐;
        • 或者干脆是RSA非对称加密(由于公钥加密不可控)。
  2. 通过控制变量法确认加密类型:

    • 若存在 CryptoJS.AES.encrypt(plain, key)

      • 检查 key 是静态写死,还是通过接口动态拉取;
      • IV 是静态还是动态;
      • Base64后缀特征 U2FsdGVkX1+ 是 CryptoJS 的 Base64 + Salt 格式。
    • 若存在 new JSEncrypt().encrypt()

      • 说明是标准 RSA;
      • 密文长度可测(2048-bit 公钥输出 256 bytes Base64);
      • 基本无法通过爆破模拟,只能截断或 hook 函数拿明文。
  3. Hook 常用方法:

    • 针对对称加密,可 Hook CryptoJS.AES.encrypt() 输出:

      CryptoJS.AES.encrypt = function(data, key, cfg) {console.log("明文:", data);console.log("密钥:", key);return originalEncrypt.apply(this, arguments);
      };
      
    • 针对非对称加密,可直接 Hook JSEncrypt:

      JSEncrypt.prototype.encrypt = function(data) {console.log("加密前:", data);return originEncrypt.call(this, data);
      };
      

四、实战场景二:判断密文是否为对称加密(爆破前置分析)

🎯 应用背景

在某些接口或加密字段中,你拿到了大量密文样本(如密文密码、Token),你想判断是否能做字典碰撞 / 爆破

🔍 典型判断技巧

1. 明文与密文是否一一对应
  • 相同明文是否总是生成相同密文?

    • ✅ 是 → 高概率为对称加密;
    • ❌ 否 → 要么加盐/IV随机,要么非对称加密。
2. 密文长度是否随明文长度变化
  • 对称加密一般长度随明文增长(每16字节对齐);
  • RSA加密时,输出长度恒定,例如2048位RSA加密任意明文都会输出固定长度密文。
3. Base64/Hex 格式判断
  • CryptoJS 输出默认为 Base64;
  • RSA 加密输出也常为 Base64,但长度更长。
4. 是否存在 IV、Salt、Nonce 等参数在加密中
  • 通过抓包观察是否上传多个字段,如:

    {"data": "...","iv": "...","salt": "..."
    }
    
    • 说明存在 CBC 模式或加盐;
    • 若能控制 IV/Salt,可部分复现。

五、前端加密实战总结套路(爆破前识别重点)

特征可能的加密方式是否可爆破/还原
密文相同输入 → 输出恒定AES固定IV✅(可模拟)
密文长度固定,明文不同RSA加密❌(无法还原)
明文较长 → 密文变化倍增AES块加密
抓包发现有 iv/salt 参数AES CBC 或 CryptoJS✅(如能还原)
抓包参数中含公钥字符串RSA非对称加密
前端使用 window.crypto.subtleWeb Crypto API(强加密)❌(难以Hook)

六、爆破攻击中的密码学分析价值

✅ 典型目标

  • 验证码绕过:前端验证规则依赖加密字段构造;
  • 账号密码爆破:前端加密函数必须复现才能进行有效字典攻击;
  • 签名伪造/重放:需要理解加密或签名机制;

⚠️ 注意事项

  • 切勿盲目发送密文列表爆破,可能遭遇 WAF、验证码、多因素;

  • 若前端加密使用了 RSA 并上送密文,则密码爆破基本无意义(除非 Hook 前端获取明文);

  • 对称加密可构造自动化爆破脚本(如Python模拟 CryptoJS AES 加密):

    from Crypto.Cipher import AES
    import base64key = b'1234567812345678'
    iv = b'1234567812345678'
    data = 'admin123'.encode('utf-8')cipher = AES.new(key, AES.MODE_CBC, iv)
    padded = data + b'\x08' * (16 - len(data) % 16)
    encrypted = cipher.encrypt(padded)
    print(base64.b64encode(encrypted).decode())
    

七、攻防对抗建议

👨‍💻 攻击者视角

  • 主动识别加密类型,选择合适的还原或Hook方法;
  • 尽量避免暴力破解非对称密文(成本极高);
  • 优先关注可控参数、明文暴露点。

🛡️ 防守者建议

  • 前端不应暴露加密密钥;
  • 尽量使用非对称加密传输敏感参数;
  • 加密参数应带时间戳/随机数/签名;
  • 服务端校验应加入多因子/限速/WAF。

八、结语

在JS逆向与爆破测试过程中,加密逻辑是最常见也最关键的分析点。对称加密与非对称加密的区别不仅体现在理论上,更重要的是其在工程实现层面对渗透测试策略的影响巨大

懂密码学,不必钻研数学公式,但必须能根据样本快速判断加密类别、估算可行性、找到还原突破点。只有结合工具 + 分析思维 + 密码学判断逻辑,才能在黑盒测试中有效“打开”被加密的数据通道。

http://www.dtcms.com/a/462536.html

相关文章:

  • Qt 自定义无标题栏窗口:FramelessWidget 实现与解析
  • 海林建设局网站济南百度推广排名优化
  • 扩充ec2硬盘对应的lvm
  • 哪些公司的网站做的漂亮上海优化排名推广
  • 做素材类的网站赚钱吗改进网站建设
  • 中山好的网站建设西安公关公司
  • 网页网站的制作过程dedecms建设慕课网站
  • K8S(二)—— K8S 1.28 集群部署指南(kubeadm 方式)
  • Eclipse Mosquitto 在小内存下怎么修改配置文件
  • 猫眼浏览器(Chrome内核增强版浏览器)官方便携版
  • 福建省住房和建设厅网站合同 制作 网站
  • 构建可信数据体系——解读数据治理指南-构建可信数据路线图【附全文阅读】
  • qemu调试edk2
  • 正规网站做菠菜广告焦作网站建设哪家正规
  • 有什么网站可以发布个人信息网站优化计划书
  • 小程序停车场名称动态化实现方案
  • 张家港建设工程质量监督站网站中国廉政文化建设网站
  • sunshine :Moonlight 的自托管游戏串流服务端
  • 防爆手机与普通手机的区别!
  • 铁路建设标准网站专业网站建
  • 免费建网站可信吗wordpress 仪表盘界面
  • SQL Server 限制IP访问数据库的设置方法及注意事项
  • 测试中的 AAA 模式与 Given–When–Then 模式详解
  • Android Studio 虚拟机启动失败/没反应,排查原因。提供一种排查方式。
  • 网站设计需要考虑的基本原则建房子找哪个网站设计
  • C#基础11-常用类
  • 流媒体 网站开发网站制作排版
  • 那个网站适合学生做兼职广州网站车管所
  • 公司内部网站系统微信小程序直播开通条件
  • 个人备案做门户网站wordpress 视频