BadSecrets终极指南:如何快速检测Web应用中的已知密钥漏洞
BadSecrets是一个纯Python库,专为检测Web应用中使用的已知或弱加密密钥而设计。它通过分析加密产品(如Cookie、令牌、签名URL等),帮助开发者和安全人员快速识别潜在的安全风险,避免因密钥泄露或使用弱密钥导致的安全漏洞。
🚀 BadSecrets核心功能解析
被动检测模块:离线分析加密产品
被动模块通过分析已获取的加密产品(如Cookie、JWT令牌等),离线验证其是否使用了已知密钥。目前支持以下主流Web框架和技术:
| 模块名称 | 检测目标 |
|---|---|
ASPNET_Viewstate | ASP.NET ViewState和生成器 |
Flask_SignedCookies | Flask签名Cookie |
Django_SignedCookies | Django会话Cookie |
Rails_SecretKeyBase | Ruby on Rails签名/加密会话Cookie |
Generic_JWT | JWT令牌的HMAC密钥或RSA私钥 |
Shiro_RememberMe | Apache Shiro rememberMe Cookie |
每个模块都针对特定框架的加密实现进行了优化,例如ASPNET_Viewstate模块会检查ViewState值是否使用已知的MachineKey签名,而Generic_JWT模块则支持多种JWT算法的密钥检测。
主动检测模块:在线验证目标系统
主动模块通过YARA规则识别目标系统特征,然后使用已知密钥生成伪造的加密产品并发送请求,验证目标是否接受这些密钥。目前支持的主动检测包括:
- Shiro_RememberMe_Key:检测Apache Shiro是否使用已知AES密钥(可能导致反序列化RCE)
- GlobalProtect_DefaultMasterKey:检测PAN-OS GlobalProtect是否使用默认主密钥
- LTPA_Token_Key:检测IBM WebSphere是否使用已知LTPA密钥(可能导致认证绕过)
主动检测功能默认在URL模式下启用,可通过--passive-only参数禁用。
💻 快速安装与基础使用
一键安装步骤
BadSecrets提供PyPI包,可通过pip快速安装:
pip install badsecrets
如需从源码安装,可克隆仓库后手动安装:
git clone https://gitcode.com/gh_mirrors/ba/badsecrets
cd badsecrets
pip install .
最快检测方法:命令行界面
安装完成后,可直接使用badsecrets命令检测加密产品。例如检测JWT令牌:
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
若检测到已知密钥,将输出详细信息:
Known Secret Found!
Detecting Module: Generic_JWT
Product Type: JSON Web Token (JWT)
Secret: 1234
Details: {'Issuer': 'Issuer', 'Username': 'BadSecrets', 'exp': 1593133483, 'iat': 1466903083}
URL模式:自动爬取并检测目标
BadSecrets还支持URL模式,自动爬取目标页面并检测其中的加密产品:
badsecrets --url http://example.com/contains_bad_secret.html
可通过--proxy参数设置代理,--user-agent自定义用户代理,--header添加自定义请求头。
🛠️ 高级使用技巧
自定义密钥列表
如需添加自定义密钥,可使用-c参数指定密钥文件或内联密钥:
# 使用密钥文件
badsecrets <product> -c my_keys.txt
# 内联指定模块专用密钥
badsecrets <product> -c Shiro_RememberMe_Key:key1,key2
哈希破解支持
当未检测到已知密钥时,BadSecrets会自动生成适用于hashcat的破解命令。例如针对JWT的HS256算法:
Potential matching hashcat commands:
Module: [Generic_JWT] JSON Web Token (JWT) Algorithm: HS256
Command: [hashcat -m 16500 -a 0 <jwt_token> <dictionary_file>]
作为Python库集成
BadSecrets可作为库集成到其他Python项目中。例如检测Django签名Cookie:
from badsecrets import modules_loaded
Django_SignedCookies = modules_loaded["django_signedcookies"]
x = Django_SignedCookies()
result = x.check_secret(".eJxVjLsOAiEURP-F2hAuL8HSfr-BAPciq4ZNlt3K-O9KsoU2U8w5My8W4r7VsHdaw4zswoCdfrsU84PaAHiP7bbwvLRtnRMfCj9o59OC9Lwe7t9Bjb2OtbMkAEGQtQjekykmJy9JZIW-6CgUaCGsA6eSyV65s1Qya_xGKZrY-wPVYjdw:1ojOrE:bfOktjgLlUykwCIRIpvaTZRQMM3-UypscEN57ECtXis")
if result:
print(f"Found secret: {result['secret']}")
也可使用check_all_modules函数一次性检测所有模块:
from badsecrets.base import check_all_modules
results = check_all_modules("eyJhbGciOiJIUzI1NiJ9...")
for r in results:
print(f"[{r['type']}] {r['detecting_module']}: {r['secret']}")
📊 支持的Web框架与技术
BadSecrets覆盖了当前主流的Web框架和加密实现,包括但不限于:
- Python生态:Flask、Django
- Java生态:Apache Shiro、JSF ViewState
- .NET生态:ASP.NET ViewState、WebResource.axd
- Ruby生态:Ruby on Rails
- Node.js生态:Express(express-session、cookie-session)
- PHP生态:Laravel、Symfony
- 其他:Telerik UI、Yii2、Peoplesoft、LTPA Token
完整模块列表可通过badsecrets --list-modules命令查看。
🔒 安全最佳实践
使用BadSecrets检测到已知密钥后,应立即采取以下措施:
- 轮换密钥:生成新的强密钥,替换所有环境中的旧密钥
- 审计依赖:检查是否使用了包含默认密钥的示例代码或教程
- 加密产品失效:使所有使用旧密钥签名的令牌、Cookie失效
- 安全编码培训:确保开发团队了解密钥管理最佳实践
BadSecrets可作为CI/CD流程的一部分,在代码提交或部署前自动检测密钥问题,防止弱密钥被部署到生产环境。
📚 资源与贡献
BadSecrets的源码和文档托管在GitCode仓库。如需贡献新模块或密钥列表,可提交Pull Request。项目还提供了详细的示例代码,位于badsecrets/examples/目录,包括:
cli.py:命令行工具实现telerik_knownkey.py:Telerik UI密钥检测工具symfony_knownkey.py:Symfony签名URL检测工具
通过持续更新密钥数据库和支持新的Web框架,BadSecrets致力于成为Web应用密钥安全检测的终极工具。无论是安全审计人员、开发者还是DevOps工程师,都能通过BadSecrets快速发现并修复密钥相关的安全漏洞,保护Web应用免受潜在攻击。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



