使用Selenium IDE构建渗透测试机器人:自动化破解复杂认证协议

本文详细介绍了如何利用Selenium IDE自动化工具破解采用Amazon Cognito SRP协议的React应用登录表单,包括处理Shadow DOM的技术方案和密码喷洒实现方法。

如何使用Selenium IDE构建渗透测试机器人

你是否曾在渗透测试过程中想过:“真希望有个机器人能替我完成这些测试工作,这实在太繁琐了”?我深有同感。这正是我开始使用QA工具Selenium IDE来自动化以下任务的原因:

  • 暴力破解复杂的认证协议(例如Amazon Cognito实现的Secure Remote Password协议)
  • 对缺乏现成工具的服务进行密码喷洒攻击,特别是当没有足够时间或精力配置Burp Suite Intruder应对复杂CSRF防护时
  • 从动态渲染的组织网站中采集邮箱地址(无法直接从HTML源码中grep)
  • 绕过Google reCAPTCHA(适用于需要解决JavaScript挑战的透明reCAPTCHA,而非"点击网格中所有熊猫"类型)

实战演示:破解React应用的SRP认证

我们将通过一个示例React应用来演示如何暴力破解登录表单。该应用基于AWS Amplify和Cognito构建,使用Amazon Cognito的SRP协议进行认证——这种协议几乎无法用Burp Suite的Intruder模块实现自动化。

根据维基百科,SRP是"增强型密码认证密钥交换(PAKE)协议",其特点是"密码永远不会离开客户端"。这直接导致无法使用Burp Intruder进行认证攻击,因为通常需要标记HTTP请求中的密码位置,而SRP协议根本不发送密码。

解决方案:Selenium IDE自动化

安装Selenium IDE扩展后,首先设置项目名称和基础URL,然后开始录制测试过程。录制完成后,通过回放测试验证登录过程是否被正确记录。

处理Shadow DOM挑战

在实际测试中发现,SIDE无法直接访问位于Shadow DOM中的表单字段。解决方案是使用"execute script"命令执行JavaScript代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 选择用户名输入框并设置值
document.querySelector('amplify-authenticator')
  .shadowRoot.querySelector('amplify-sign-in')
  .shadowRoot.getElementById('username').value = 'testuser';

// 触发输入事件
document.querySelector('amplify-authenticator')
  .shadowRoot.querySelector('amplify-sign-in')
  .shadowRoot.getElementById('username')
  .dispatchEvent(new Event('input', {bubbles: true}));

实现密码喷洒功能

通过以下步骤实现暴力破解循环:

  1. 创建密码数组并通过"return"关键字返回给SIDE
  2. 使用"for each"命令遍历密码列表
  3. 将硬编码密码替换为迭代器变量${password}
  4. 添加3秒延迟确保登录请求有足够处理时间

最终测试脚本仅需10行"代码"即可完成自动化密码喷洒攻击。

技术要点总结

  • Shadow DOM处理:使用querySelector和shadowRoot属性嵌套访问深层DOM元素
  • 事件触发:通过dispatchEvent方法模拟用户输入行为
  • 循环控制:利用SIDE的"for each"命令实现密码遍历
  • 时序控制:添加pause命令确保操作同步性

这种方法特别适用于工具支持有限、时间紧迫的渗透测试场景,为安全测试人员提供了高效的自动化解决方案。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计