安全测试 — 密文与源码可见性

  • 有源码:直接阅读后端源码分析加密算法与密钥分配,能彻底知道加解密流程。
  • 无源码:常见流程:
    1. 猜测与识别加密类型(特征匹配)。
    2. 检查前端 JS(是否在前端实现加密逻辑或签名)。

算法加密 — 概念、分类与类型

1. 单向散列(Hash / 摘要) — 以 MD5 为例

  • 特点:单向、不可逆,输出固定长度。
  • 优点:计算代价低,便于存储与比对。
  • 缺点:易受暴力/彩虹表攻击,存在碰撞风险。
  • 常见实现:MD5、SHA 系列、HMAC、CRC。
  • 解密条件:无直接解密,通常靠碰撞/字典/暴力破解(概率取决于明文复杂度及是否加盐)。

2. 对称加密 — 以 AES 为代表

  • 特点:加/解密使用相同密钥。
  • 优点:速度快、效率高,适合大量数据加解密。
  • 缺点:密钥分发与管理是核心难题;密钥泄露即导致全部破坏。
  • 常见实现:DES、AES、RC4 等。
  • 解密条件:需要密文 + 密钥(及模式与 IV/偏移量)。

3. 非对称加密 — 以 RSA 为代表

  • 特点:使用公钥/私钥对,公钥可公开,私钥保密。
  • 优点:密钥分配灵活,便于签名与密钥交换。
  • 缺点:计算量大、速度慢,适合少量数据或对称密钥加密场景。
  • 常见实现:RSA、RSA2、PKCS 等。
  • 解密条件:密文 + 对应私钥或公钥(视加密方式而定)。

加密/密文识别特征与解密条件

MD5 特征

  • 0-9a-f 组成的十六进制字符串。
  • 常见长度:16(简写)或 32 字符。
  • 解密/还原:依赖字典、暴力或彩虹表;若有盐则难度上升。

Base64 特征

  • 可包含大小写字母、数字、+/,尾部常有 = 填充。
  • 非加密,仅编码,易还原(base64 decode)。
  • 注意:较长明文→较长密文;少量明文可能无填充等号。

AES/DES 等对称密文特征

  • 常见会看到 /+(若再经 Base64 编码)。
  • 解密条件:密文 + 模式(ECB/CBC/CFB 等) + 密钥 + IV/偏移量。

RSA 特征

  • 长度相对较长(取决于密钥位数),并可能经 Base64 编码。
  • 解密条件:密文 + 私钥(或用于签名校验的公钥),或利用密钥泄露/侧信道等手段。

常用参考资料(特征与实例)

  1. 30 余种加密编码类型特征分析(收藏):微信文章(示例)
  2. CTF 密码题解密网站与总结(示例):CSDN 博客
  3. 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 进行验证。

数据通讯中的前端加密示例

  1. 前端 MD5(示例)
// 引入 md5.js
var strPassWord = $("#edtPassWord").val();
$("#password").val(MD5(strPassWord));
  1. 前端 RSA(示例):使用 JSEncrypt 对字段加密后 encodeURI(encrypt.encrypt(str)) 发送。

测试要点:若加密逻辑在前端,复测时要调用相同的前端加密函数或在代理中复写/模拟相同加密逻辑,才能让服务端接受并处理 Payload。


常见解密/破解工具与在线资源

  • 对称/非对称在线工具(示例):http://tool.chacuo.net/cryptdes
  • 字典与暴力破解工具:hashcat、john the ripper、在线彩虹表服务

漏洞测试对安全测试的影响与思路

  1. 发送加密数据:在渗透测试中,Payload 必须按照目标协议与加密逻辑进行加密后发送,才会被后端处理。
  2. 获取明文的难点:缺少密钥/IV/私钥时难以恢复明文;需要结合源码/前端/内存/侧信道或运维失误进行密钥获取。
  3. 高影响目标:API 接口与前后端分离应用占比高;重点关注认证、签名、参数完整性与密钥管理漏洞。

后续学习建议

  1. 加密算法识别:掌握常见编码与加密输出特征(MD5/SHA/Base64/AES/RSA 等)。
  2. 自定义算法逆向:学习静态反编译(查看 JS/后端源码)与动态调试(Frida、浏览器 DevTools)以定位并复现自定义加密逻辑。
  3. 实践工具链:熟练使用 Python/Node 编写加解密脚本,掌握 hashcat 与 john 的使用场景。

结论

  • 在安全测试中,识别加密类型与定位密钥是能否成功复现攻击或得到明文的关键。
  • 结合前端/后端源码分析、抓包回放与自动化字典破解,是常见且高效的工作流程。