JaFak:一款无视js前端加密的账号密码爆破工具

Wesley13
• 阅读 870

JaFak:一款无视js前端加密的账号密码爆破工具

点击蓝字关注我哦

JaFak:一款无视js前端加密的账号密码爆破工具

freebuf原文链接:

https://www.freebuf.com/sectool/257685.html

已经上传到github,文末附有github地址

JaFak:一款无视js前端加密的账号密码爆破工具

前因:

其实这文讲得重点不是工具的开发,而是一种思想:

完全可以利用一些可自动化测试来帮助我们进行渗透测试任务

为什么会想到写这个脚本?爱恨情仇加纠缠

在我的潜意识里,我只会在真正用的时候才会去找轮子,造轮子,所以这次的脚本也是因为一次实际的常规测试引发的一连串连锁反应,我称之为铁索连环!

在一次授权的系统测试中,我发现了系统找回密码功能处有个很有趣的事情,找回密码进行验证的时候,需要输入用户名和相应绑定的邮箱,当我输入正确的用户名时候,系统会提示“用户名或邮箱错误”

没毛病,模糊信息返回,但是当我输入正确的用户名和错误的邮箱时,系统会提示“输入邮箱错误”,相信各位大佬都知道了,这里挖掘到一枚用户名枚举的漏洞,通过系统的提示系统,批量爆破系统存在的用户名。

但是,交过洞的大佬们都知道,除非是金融行业,或者其他很重要系统,一般是不会收这样的漏洞,收也是低位(超低的哟),恰巧我做的这个项目,不是那一类,所以没啥卵用。

                          JaFak:一款无视js前端加密的账号密码爆破工具

但是但是!这不像我们不曲不折的安全人员!毕竟国内的饭不太好要是吧(玩笑话)。

JaFak:一款无视js前端加密的账号密码爆破工具

JaFak:一款无视js前端加密的账号密码爆破工具

差点劝退

所以我决定搞点事情,把这个洞危害加大,我第一个想的就是爆破固定的用户名与密码,因为系统的登录页面,无论是你用户名错误还是密码错误,都返回“用户名和密码或错误!”,且没有验证码验证,也不限制次数,又因为我们枚举了正确的用户名,这个提示相当于变成了“密码错误,请重新输入”,就可以爆破固定用户名的密码了,burp启动,直接就冲了!

看到密码后面有%3D%3D,我逐渐兴奋,这不就是base64加密吗?直接python脚本,先base64加密,然后爆破,舒服,等着出密码就行了!

但是得先验证是否是base64加密,然后放入burp解码,我擦,解不出来,我刚开始还不相信,多试了几次,还真不是!

没事没事,冷静冷静!这玩意密码学嘛,这不有手就能把他的加密逻辑给逆出来,哎呀,我擦,我的手勒?

                                   JaFak:一款无视js前端加密的账号密码爆破工具

然后打开js,进行源码分析,漂亮,一个混淆把我思路绕城了钢丝球!

直接给我整劝退,再见项目,再见网安,再见打工人,回家种田去了。

                              JaFak:一款无视js前端加密的账号密码爆破工具

JaFak:一款无视js前端加密的账号密码爆破工具

天马行空

但是吧,我觉得难不倒我,我还可以抢救一下,因为我以前看过大佬,通过本地建立服务,去调用系统的js,然后为己用,但是也得找到加密函数的接口,bp上面就有插件,本地起服务,但是也得找到加密的入口函数!还是佩服那些前端调试硬刚的大佬,真是大佬!

因为我以前见过国外的某性能测试软件,不知道啥名字了,反正挺贵的,能自动控制浏览器进行性能设置,就好比一个机器人帮你输入,帮你提交,帮你访问网站,我觉得酷死了,然后我就想了想咋实现的,想起自动化,我肯定第一时间想起了python,Google一搜还真有!

有事找百度,google准没错!

JaFak:一款无视js前端加密的账号密码爆破工具

开始奇幻之旅

JaFak:一款无视js前端加密的账号密码爆破工具

为什么说奇幻勒?因为爬坑的故事真的一把鼻涕一把泪的,别说了,哭晕在厕所。

开始使用selenium框架。。。。。。。。。。。。。

Selenium 是什么?一句话,自动化测试工具。

它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现 Web 界面的测试。换句话说叫 Selenium 支持这些浏览器驱动。

这里用的东西python+selenium+browsermobproxy

爱 之 初 步 体 验

我们先来一个小例子感受一下 Selenium,这里我们用 Chrome 浏览器来测试(当然你可以i缓存其他的浏览器不影响)。

注意在尝试这段代码之前,你得安装chrome浏览器。

from selenium import webdriver

运行这段代码,它会自动打开chrome浏览器,然后打开http://www.baidu.com/这个网页,完全可视化,因为你会看到你的chrome浏览器打开浏览这个过程。

JaFak:一款无视js前端加密的账号密码爆破工具

如果代码执行错误,浏览器没有打开,那么应该是没有装 Chrome 浏览器或者 Chrome 驱动没有配置在环境变量里。下载驱动,然后将驱动文件路径配置在环境变量即可

JaFak:一款无视js前端加密的账号密码爆破工具

但是因为我们的测试需要提交爆破的用户名和密码打开网页是远远不够的,所以

from selenium import webdriver

这段代码会遍历打开http://www.python.org这个网页,等Python字体加载出来的时候,才遍历html 树状结构,找到name为q的标签,然后填入pycon,然后模拟点击

这里为什么要等待加载,因为可能网站有jq什么的加载没完全,再点击会失去原来的韵味。

根据实际需求的情况需要这段代码被我改成了这个样子:

from selenium import webdriver

这样就模拟了一次完整的用户名和密码输入,以及点击登录的效果.

JaFak:一款无视js前端加密的账号密码爆破工具

坑点1

这里为什么要用css_selector,本来可以直接使用by_class_name的,但是因为我实际利用场景这里很特殊,class的名字之间有空格,使用by_class_name获取不到,如果class的名字没有空格,就可以直接获取,当然也可以通过标签的其他的属性访问到.

JaFak:一款无视js前端加密的账号密码爆破工具

但是这样只能提交一次登录请求,而且还得必须清空上一次填写的账号密码,再改进

from selenium import webdriver

再此基础上加个循环,可以批量爆破他的密码了,因为chrome浏览器已经自动加载调用js帮我们加密好了变成了密文,然后再发送过去,真是nice鸭!

但是有个问题,就是我无法捕获服务器的返回包,刚开始使用selenium抓取chromedriver的network

JaFak:一款无视js前端加密的账号密码爆破工具

抓到的流量还得自己分析,就很难受,然后就是使用了browsermobproxy 来开启一个中间的代理,让我的chrome先去经过browermobproxy,然后browermobproxy抓取我的http流量,就可以拿到了服务器返回包了.就很nice!

JaFak:一款无视js前端加密的账号密码爆破工具

Browsermob-Proxy是一个开源的Java编写的基于LittleProxy的代理服务。Browsermob-Proxy的具体流程有点类似与Flidder或Charles。即开启一个端口并作为一个标准代理存在,当HTTP客户端(浏览器等)设置了这个代理,则可以抓取所有的请求细节并获取返回内容。

安装:

直接到项目的github上下载打好的压缩包即可:https://github.com/lightbody/browsermob-proxy/releases,支持Linux和Windows。

配置Proxy启动WebDriver:

from selenium import webdriver

值得注意的是:

browsermob-proxy起的Server默认是8080端口

可以直接进入到Server这个类里面去修改他的监听端口

直接上根据实际测试需求最终代码:

import os

拿去实战爆破效果一浏览:

JaFak:一款无视js前端加密的账号密码爆破工具

坑点二:

实际爆破效果不是这样的

密码输入依次为 123456 123456456789 123456455678955664 ........................一直增大 ,好像缓存没有清楚一样,但是我实际确实clear了

JaFak:一款无视js前端加密的账号密码爆破工具

坑点2

实际爆破效果不是这样的

密码输入依次为 123456 123456456789 123456455678955664 ........................一直增大 ,好像缓存没有清楚一样,但是我实际确实clear了

JaFak:一款无视js前端加密的账号密码爆破工具

这个问题把我搞了很久,百思不得其解

最后,在部门大神的指点下,成功找到原因,并解决问题,果然听君一席话,胜读10年书,不愧是大佬!!

JaFak:一款无视js前端加密的账号密码爆破工具

因为起的浏览器默认是记住上次密码的,当我输入一个admin账号的时候,在输入密码,然后浏览器记住了我的账号了,虽然错误,然后继续输入admin,然后浏览器会自动补全123456,然后我再输入了一个456789 结果就成了123456456789了..... 就这个理

JaFak:一款无视js前端加密的账号密码爆破工具

更改只需要把顺序调换一下就行了:

self.chrome.find_element_by_css_selector("[class='class_name']").clear()

只需要在它补全之前,再次clear就行

坑点3

如果登录标签使用cJaFak:一款无视js前端加密的账号密码爆破工具 lick属性,因为元素被包裹的问题,click多了会报错!,解决办法是使用send_keys()

JaFak:一款无视js前端加密的账号密码爆破工具

self.chrome.find_element_by_css_selector(("[class='class_name']")).send_keys(Keys.RETURN)

好了这里基本上解决了所以的坑点,但是实际的坑点很多,我只是把主要的几点放出来讲了一下,最终代码:

import os

这里仅仅把这种方式利用在密码爆破上面,但是实际的利用场景远不止这些,我觉得可以利用任何js加密,jq加密的,前端加密的场景,都可以用到,根本不需要去分析它的js前端加密代码,只需要把爆破行为模拟正常的用户行为就欧克了,不得不说,这种智能的方式真的太方便了!太香了!!!!!!!!

github已经上传了一个我已经写好的爆破登录界面账号和密码的,大家可以去下载自行享用!

https://github.com/Gamma-laboratory/JsFak

JaFak:一款无视js前端加密的账号密码爆破工具

后果

正当我美滋滋的撰写报告,准备提交的时候,我突然发现这个项目明文规定了,枚举用户名爆破不在收录漏洞范畴之内!!!!!

漂亮!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,来世还做安全!

JaFak:一款无视js前端加密的账号密码爆破工具

JaFak:一款无视js前端加密的账号密码爆破工具

END

JaFak:一款无视js前端加密的账号密码爆破工具

JaFak:一款无视js前端加密的账号密码爆破工具

看完记得点赞,关注哟,爱您!

请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付!

关注此公众号,回复"Gamma"关键字免费领取一套网络安全视频以及相关书籍,公众号内还有收集的常用工具!

在看你就赞赞我!

JaFak:一款无视js前端加密的账号密码爆破工具

JaFak:一款无视js前端加密的账号密码爆破工具

JaFak:一款无视js前端加密的账号密码爆破工具

JaFak:一款无视js前端加密的账号密码爆破工具

扫码关注我们

JaFak:一款无视js前端加密的账号密码爆破工具

扫码领hacker资料,常用工具,以及各种福利

JaFak:一款无视js前端加密的账号密码爆破工具

转载是一种动力 分享是一种美德

本文分享自微信公众号 - Khan安全团队(KhanCJSH)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这