使用Selenium IDE构建渗透测试机器人:绕过复杂认证协议的自动化实战

本文详细介绍了如何利用Selenium IDE自动化工具构建渗透测试机器人,重点解决Amazon Cognito SRP认证等复杂协议的暴力破解难题,包含Shadow DOM处理、JavaScript脚本执行等实战技术。

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

你是否曾在渗透测试过程中想过:“要是有个机器人能替我完成这些测试就好了,这工作量实在太大了”?我确实这样想过。这就是我开始使用QA工具Selenium IDE来自动化以下任务的原因:

  • 暴力破解复杂认证协议(例如Amazon Cognito实现的Secure Remote Password协议)
  • 密码喷洒服务(当缺乏可用工具且没有足够时间/意志力配置Burp Suite Intruder攻击时)
  • 从动态渲染的网站中收集邮箱地址
  • 绕过Google reCAPTCHA(仅限需要解决JavaScript挑战的透明类型)

实战演示:暴力破解React应用

我们将通过一个示例React应用来演示如何构建渗透测试机器人。该应用使用Amazon Cognito SRP进行认证,这种协议几乎无法用Burp Suite Intruder模块实现自动化。

SRP是一种“增强型密码认证密钥交换(PAKE)协议”,其特点是“密码永远不会离开客户端”。这意味着无法在HTTP请求中标记密码位置进行暴力破解。

Selenium IDE基础配置

安装Selenium IDE后,需要设置项目名称和基础URL。点击“开始录制”后,SIDE会打开新的浏览器实例并开始记录操作。

处理Shadow DOM挑战

在录制登录过程中,发现SIDE无法定位Shadow DOM内的表单字段。通过使用“execute script”命令执行JavaScript代码来解决这个问题:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 选择用户名字段并设置值
document.querySelector('input-selector').shadowRoot
  .querySelector('nested-selector').shadowRoot
  .getElementById('username').value = 'testuser'

// 触发输入事件
document.querySelector('input-selector').shadowRoot
  .querySelector('nested-selector').shadowRoot
  .getElementById('username')
  .dispatchEvent(new Event('input', {bubbles: true}))

构建暴力破解循环

使用SIDE的“for each”命令循环遍历密码列表:

  1. 创建返回密码数组的命令
  2. 添加循环控制命令
  3. 使用${variable}语法动态插入密码
  4. 添加3秒延迟确保请求处理完成

最终测试仅需10行“代码”即可实现完整的暴力破解流程。

技术要点总结

  • Shadow DOM处理:通过querySelector和shadowRoot属性多层遍历
  • 事件触发:使用dispatchEvent方法模拟用户输入
  • 循环控制:利用SIDE的循环命令和变量系统
  • 延迟策略:添加适当延迟确保操作同步

这种方法特别适用于工具不可用或配置复杂的情况,为渗透测试人员提供了高效的自动化解决方案。

参考文献详见原文技术文档链接

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