安全测试 — 密文与源码可见性
- 有源码:直接阅读后端源码分析加密算法与密钥分配,能彻底知道加解密流程。
- 无源码:常见流程:
- 猜测与识别加密类型(特征匹配)。
- 检查前端 JS(是否在前端实现加密逻辑或签名)。
算法加密 — 概念、分类与类型
1. 单向散列(Hash / 摘要) — 以 MD5 为例
- 特点:单向、不可逆,输出固定长度。
- 优点:计算代价低,便于存储与比对。
- 缺点:易受暴力/彩虹表攻击,存在碰撞风险。
- 常见实现:MD5、SHA 系列、HMAC、CRC。
- 解密条件:无直接解密,通常靠碰撞/字典/暴力破解(概率取决于明文复杂度及是否加盐)。
2. 对称加密 — 以 AES 为代表
- 特点:加/解密使用相同密钥。
- 优点:速度快、效率高,适合大量数据加解密。
- 缺点:密钥分发与管理是核心难题;密钥泄露即导致全部破坏。
- 常见实现:DES、AES、RC4 等。
- 解密条件:需要密文 + 密钥(及模式与 IV/偏移量)。
3. 非对称加密 — 以 RSA 为代表
- 特点:使用公钥/私钥对,公钥可公开,私钥保密。
- 优点:密钥分配灵活,便于签名与密钥交换。
- 缺点:计算量大、速度慢,适合少量数据或对称密钥加密场景。
- 常见实现:RSA、RSA2、PKCS 等。
- 解密条件:密文 + 对应私钥或公钥(视加密方式而定)。
加密/密文识别特征与解密条件
MD5 特征
- 由
0-9和a-f组成的十六进制字符串。 - 常见长度:16(简写)或 32 字符。
- 解密/还原:依赖字典、暴力或彩虹表;若有盐则难度上升。
Base64 特征
- 可包含大小写字母、数字、
+、/,尾部常有=填充。 - 非加密,仅编码,易还原(
base64 decode)。 - 注意:较长明文→较长密文;少量明文可能无填充等号。
AES/DES 等对称密文特征
- 常见会看到
/、+(若再经 Base64 编码)。 - 解密条件:密文 + 模式(ECB/CBC/CFB 等) + 密钥 + IV/偏移量。
RSA 特征
- 长度相对较长(取决于密钥位数),并可能经 Base64 编码。
- 解密条件:密文 + 私钥(或用于签名校验的公钥),或利用密钥泄露/侧信道等手段。
常用参考资料(特征与实例)
- 30 余种加密编码类型特征分析(收藏):微信文章(示例)
- CTF 密码题解密网站与总结(示例):CSDN 博客
- CTF 密码学常见加解密总结(示例):CSDN 博客
密码存储(后端示例与破解思路)
1. Discuz / ZBlog 等示例(X3.2 示例)
- 存储策略示例(伪代码):
// DZ 示例 $password = md5(md5($password) . $salt); - 破解思路:若已知 salt,可对字典中的明文做
md5(md5(pw) . salt)比对,或做暴力/字典破解。 - 示例 PHP 破解脚本(字典遍历)见文档内示例。
2. 更强的哈希(bcrypt / password_hash)
- 示例(PHP
password_hash/password_verify):bcrypt ($2y$...)。 - 破解思路:对 bcrypt 无法直接逆算,通常用字典/暴力尝试
password_verify进行验证。
数据通讯中的前端加密示例
- 前端 MD5(示例):
// 引入 md5.js
var strPassWord = $("#edtPassWord").val();
$("#password").val(MD5(strPassWord));- 前端 RSA(示例):使用 JSEncrypt 对字段加密后
encodeURI(encrypt.encrypt(str))发送。
测试要点:若加密逻辑在前端,复测时要调用相同的前端加密函数或在代理中复写/模拟相同加密逻辑,才能让服务端接受并处理 Payload。
常见解密/破解工具与在线资源
- 对称/非对称在线工具(示例):http://tool.chacuo.net/cryptdes
- 字典与暴力破解工具:hashcat、john the ripper、在线彩虹表服务
漏洞测试对安全测试的影响与思路
- 发送加密数据:在渗透测试中,Payload 必须按照目标协议与加密逻辑进行加密后发送,才会被后端处理。
- 获取明文的难点:缺少密钥/IV/私钥时难以恢复明文;需要结合源码/前端/内存/侧信道或运维失误进行密钥获取。
- 高影响目标:API 接口与前后端分离应用占比高;重点关注认证、签名、参数完整性与密钥管理漏洞。
后续学习建议
- 加密算法识别:掌握常见编码与加密输出特征(MD5/SHA/Base64/AES/RSA 等)。
- 自定义算法逆向:学习静态反编译(查看 JS/后端源码)与动态调试(Frida、浏览器 DevTools)以定位并复现自定义加密逻辑。
- 实践工具链:熟练使用 Python/Node 编写加解密脚本,掌握 hashcat 与 john 的使用场景。
结论
- 在安全测试中,识别加密类型与定位密钥是能否成功复现攻击或得到明文的关键。
- 结合前端/后端源码分析、抓包回放与自动化字典破解,是常见且高效的工作流程。