渗透测试JS前端加密浅谈
字数 1043 2025-08-07 08:22:15

渗透测试中JS前端加密分析与利用方法

0x00 前言

在渗透测试过程中,经常会遇到登录页面密码字段被前端加密传输的情况。本文详细分析几种常见的前端加密场景,并提供具体的利用方法,包括如何定位加密函数、构造加密脚本以及生成密文字典进行爆破。

0x01 案例一:通达OA RSA加密分析

1.1 加密现象分析

  • 抓包发现密码字段为长字符串密文
  • 明文"123456"被加密为325aa8b667...的长字符串

1.2 定位加密函数

  1. 使用浏览器开发者工具(F12)
  2. 全局搜索关键词"PASSWORD"
  3. 在(index)文件中发现rsa.encrypt()函数

1.3 调试分析

  1. 在获取表单PASSWORD语句和加密函数调用处设置断点
  2. 输入测试密码触发断点
  3. 观察明文密码变量(psw)和加密过程

1.4 构造加密脚本(Python)

import rsa

# 构造公钥
def rsa_ne_key(modulus, exponent):
    rsaModulus = int(modulus, 16)
    rsaExponent = int(exponent, 16)
    return rsa.PublicKey(rsaModulus, rsaExponent)

# RSA加密函数
def rsa_encrypt(text, public_key):
    cipher_text = rsa.encrypt(text, public_key)
    return cipher_text.hex()

# 使用示例
if __name__ == '__main__':
    exponent = "10001"  # 公钥指数
    modulus = "B87A3BE2184FED0973FFB0B02A862DCAD15A1A29172EC8FF67E841FE26749A6AA04E48E9B02D963ED81DCE2B0086C034F7D47CCBACF8539C36B9445ABA5EF484F3CA32593762641B4C9683C79801D087198370D5719BB4E422FADAA4D883D13874DE67D8B6E883EBAACC53A8480F41EE8BE70D2F70BECF3CB7F1023D2C901CC3"  # 模数
    key = rsa_ne_key(modulus, exponent)
    result = rsa_encrypt("Admin123456".encode(), key)
    print(result)

1.5 利用方法

  1. 修改脚本读取明文字典文件
  2. 批量生成密文字典
  3. 在BurpSuite中使用密文字典进行爆破

0x02 案例二:常见登录加密分析

2.1 加密现象

  • 密码字段loginPwd被加密
  • 明文"123456"被加密为特定格式密文

2.2 定位加密点

  1. 全局搜索"loginPwd"
  2. 在JS文件中找到加密赋值语句
  3. 发现通过Object(v.a)函数进行加密

2.3 控制台验证

// 在浏览器控制台测试加密函数
Object(v.a)("123456")
// 输出结果应与抓包密文一致

0x03 案例三:RSA公钥直接暴露

3.1 加密现象

  • JS文件中直接暴露RSA公钥
  • 使用标准RSA加密算法

3.2 Python加密脚本

import rsa
import base64

public_key = b'''
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD
2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ==
-----END PUBLIC KEY-----
'''

def rsa_encrypt(text):
    rsa_key = rsa.PublicKey.load_pkcs1_openssl_pem(public_key)
    info = rsa.encrypt(text, rsa_key)
    return base64.b64encode(info)

result = rsa_encrypt("admin888".encode())
print(result)

0x04 通用分析方法总结

  1. 抓包分析:确认密码字段是否被加密
  2. 定位加密点
    • 全局搜索关键词(PASSWORD/loginPwd等)
    • 搜索加密相关关键词(encrypt/crypto等)
  3. 调试分析
    • 在关键位置设置断点
    • 跟踪明文到密文的转换过程
  4. 验证加密
    • 在控制台测试加密函数
    • 确保输出与抓包密文一致
  5. 构造脚本
    • 提取加密参数(模数、指数、公钥等)
    • 编写加密函数
  6. 生成字典
    • 批量加密明文字典
    • 准备用于爆破的密文字典

0x05 注意事项

  1. 加密方式可能包括:

    • RSA非对称加密
    • AES对称加密
    • 自定义加密算法
    • Base64编码(非加密但常见)
  2. 调试技巧:

    • 所有密码相关赋值语句都设置断点
    • 关注网络请求发起前的最后加密步骤
    • 注意加密前的可能存在的编码处理(如UTF-8)
  3. 常见加密库:

    • CryptoJS
    • forge
    • jsencrypt
    • 自定义实现

通过系统性地分析前端加密逻辑,可以有效地绕过加密限制,进行后续的渗透测试工作。

渗透测试中JS前端加密分析与利用方法 0x00 前言 在渗透测试过程中,经常会遇到登录页面密码字段被前端加密传输的情况。本文详细分析几种常见的前端加密场景,并提供具体的利用方法,包括如何定位加密函数、构造加密脚本以及生成密文字典进行爆破。 0x01 案例一:通达OA RSA加密分析 1.1 加密现象分析 抓包发现密码字段为长字符串密文 明文"123456"被加密为325aa8b667...的长字符串 1.2 定位加密函数 使用浏览器开发者工具(F12) 全局搜索关键词"PASSWORD" 在(index)文件中发现 rsa.encrypt() 函数 1.3 调试分析 在获取表单PASSWORD语句和加密函数调用处设置断点 输入测试密码触发断点 观察明文密码变量(psw)和加密过程 1.4 构造加密脚本(Python) 1.5 利用方法 修改脚本读取明文字典文件 批量生成密文字典 在BurpSuite中使用密文字典进行爆破 0x02 案例二:常见登录加密分析 2.1 加密现象 密码字段loginPwd被加密 明文"123456"被加密为特定格式密文 2.2 定位加密点 全局搜索"loginPwd" 在JS文件中找到加密赋值语句 发现通过 Object(v.a) 函数进行加密 2.3 控制台验证 0x03 案例三:RSA公钥直接暴露 3.1 加密现象 JS文件中直接暴露RSA公钥 使用标准RSA加密算法 3.2 Python加密脚本 0x04 通用分析方法总结 抓包分析 :确认密码字段是否被加密 定位加密点 : 全局搜索关键词(PASSWORD/loginPwd等) 搜索加密相关关键词(encrypt/crypto等) 调试分析 : 在关键位置设置断点 跟踪明文到密文的转换过程 验证加密 : 在控制台测试加密函数 确保输出与抓包密文一致 构造脚本 : 提取加密参数(模数、指数、公钥等) 编写加密函数 生成字典 : 批量加密明文字典 准备用于爆破的密文字典 0x05 注意事项 加密方式可能包括: RSA非对称加密 AES对称加密 自定义加密算法 Base64编码(非加密但常见) 调试技巧: 所有密码相关赋值语句都设置断点 关注网络请求发起前的最后加密步骤 注意加密前的可能存在的编码处理(如UTF-8) 常见加密库: CryptoJS forge jsencrypt 自定义实现 通过系统性地分析前端加密逻辑,可以有效地绕过加密限制,进行后续的渗透测试工作。