BadSecrets终极指南:如何快速检测Web应用中的已知密钥漏洞

BadSecrets终极指南:如何快速检测Web应用中的已知密钥漏洞

【免费下载链接】badsecrets A library for detecting known secrets across many web frameworks 【免费下载链接】badsecrets 项目地址: https://gitcode.com/gh_mirrors/ba/badsecrets

BadSecrets是一个纯Python库,专为检测Web应用中使用的已知或弱加密密钥而设计。它通过分析加密产品(如Cookie、令牌、签名URL等),帮助开发者和安全人员快速识别潜在的安全风险,避免因密钥泄露或使用弱密钥导致的安全漏洞。

🚀 BadSecrets核心功能解析

被动检测模块:离线分析加密产品

被动模块通过分析已获取的加密产品(如Cookie、JWT令牌等),离线验证其是否使用了已知密钥。目前支持以下主流Web框架和技术:

模块名称检测目标
ASPNET_ViewstateASP.NET ViewState和生成器
Flask_SignedCookiesFlask签名Cookie
Django_SignedCookiesDjango会话Cookie
Rails_SecretKeyBaseRuby on Rails签名/加密会话Cookie
Generic_JWTJWT令牌的HMAC密钥或RSA私钥
Shiro_RememberMeApache 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检测到已知密钥后,应立即采取以下措施:

  1. 轮换密钥:生成新的强密钥,替换所有环境中的旧密钥
  2. 审计依赖:检查是否使用了包含默认密钥的示例代码或教程
  3. 加密产品失效:使所有使用旧密钥签名的令牌、Cookie失效
  4. 安全编码培训:确保开发团队了解密钥管理最佳实践

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应用免受潜在攻击。

【免费下载链接】badsecrets A library for detecting known secrets across many web frameworks 【免费下载链接】badsecrets 项目地址: https://gitcode.com/gh_mirrors/ba/badsecrets

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值