【web逆向】全报文加密及其登录流程的分析案例

news2024/11/28 12:55:34

aHR0cHM6Ly9oZWFsdGguZWxkZXIuY2NiLmNvbS9zaWduX2luLw
涉及加密库jsencrypt

定位加密点

先看加密的请求和响应:
在这里插入图片描述

全局搜索加密字段jsondata,这种非特定参数的一般一搜一个准,搜到就是断点。起初下的断点没停住,转而从调用栈单步调试来分析,一般情况下就可以走到加密的位置了,结果发现配置了多个拦截器,而这个请求正好没走通过搜索下的断点。
在这里插入图片描述

首先确认加密调用所在的文件app.9ce0f…8be4.js,从网络的发起者和其调用栈里确认一下这个js所处的调用位置,保险从最早进入这个js的调用下断点,也就是doquery这个方法。

在这里插入图片描述

在这里插入图片描述

单步调试注意观察调用栈中帧出入的变化,要在合适的帧上步进关键方法,观察调用栈变化的另一个目的是及时止损,即调用栈如果超出了断点的目标js的范围,就说明错过正确的调试位置了。没出错的话,很快就找到加密的位置,断点位置也就确定了。
在这里插入图片描述

下面就很简单了,步入加密方法中分析加密的方式。
在这里插入图片描述

同样的道理单步进入上一张图中30297行的方法,可以得出分析结果:json数据利用3des ecb加密,其中加密的key是约定长度的随机字串(简单向上审计下这个key即变量n的值生成的函数即可确定生成字串的字符集和base64是一样,因为后期作为key加密时二进制解析用的是base64解码),然后将这个key用rsa算法加密。如此就分别得到了两个加密的参数jsonData和DesKey。
简单记录下该加密库(jsencrypt)下该加密函数(3des)在cyberchef里的烘培料理。
在这里插入图片描述

还有个问题是响应加密,为什么同样给了一个deskey呢,首先这个响应和请求的加密模式大概率一样,即对称加密数据,公钥加密用于加密数据的key。解密的位置也是前端的拦截器里。
在这里插入图片描述

为了确认30316和30317两个方法的具体实现,在这里下断点,这两行代码很明显是解密方法,而前文已经分析了加密的过程,即得解密的加密模式。
tips:调用的方法的对象是m,和请求过程调用加密的对象是一样的,因此在请求过程断点停住时,打印这个对象,并找到对应的方法即可:
在这里插入图片描述

其实前文已经步入加密方法t.c了,加解密方法的具体实现在一个js里,简单翻一下就可以了,无奈前面分析的时候思路被既定的问题卡住了。
那么就得到了(数据的)解密方法t.a和(用于加密数据的对称密钥的)解密方法t.e:
在这里插入图片描述

在这里插入图片描述

注意此处23290行和23292行,实际是为前文提及的rsa加解密实例配置公钥/私钥,但其硬编码的公钥和私钥显然不是一对,即前后端分别掌握一对公钥,用于保证密钥的秘密性。
步入23280行的方法,简单解释下下图13993行的代码,加解密方法都从this,getkey获取的对象里调用,其返回hex编码的加密结果,外层的d是base64的调用。
在这里插入图片描述

步入进行审计即可,如下图,步入方法d后传入的参数e便是上图13993行encrypt方法返回的hex编码的加密结果。再看其方法实现,是通过定义的变量c字符集进行编码,其字符集正好符合base64。
在这里插入图片描述

总结,以上分析得出本系统所加密模式设计如下:
前端硬编码publicKeyA和privateKeyB
后端存储publicKeyB和privateKeyA

1.前端请求

前端参数加密:
jsonData:3des(random(32)->desKeyA,dataA) ;
desKey:rsa(publicKeyA,desKeyA);

2.后端接收请求

后端参数解密:
rsa(privateKeyA,desKey)->desKeyA;
3des(desKeyA,jsonData)->dataA;

3.后端响应请求

后端参数加密:
desMsg:3des(random(32)->desKeyB,dataB) ;
desKey:rsa(publicKeyB,desKeyB);

4.前端接收响应

前端参数解密:
rsa(privateKeyB,desKey)->desKeyB;
3des(desKeyB,desMsg)->dataB;

(后端可能直接传回desmsg和deskey,即3des加密结果和密钥)

登录流程分析

click事件处理,取得登录表单域password值,跟进702行:
在这里插入图片描述

4行queryKey实现了一个接口请求https://health.elder.ccb.com/api/sp/security/newkey?jsonData=Ft4qWHc9Y1t3HTB%2BZVM2wexOibDwkZre&desKey=f2pKDMU3OPsMJ%2FkQTRUVE%2F5EiLZZ6f4olO%2BLanYB%2FPHTBD9sqyZoC2ZL52jEP6XteTiMAEKykE63F9ry85EHgj91gVfd1xXRLiiImSuBPpCjfRoAsakMw%2FB4GHEmsmnC5%2F8Z%2B90js2vzSj1YiWvL5PUPqj%2BX0sFN97mwFF6%2Fldk%3D&_=1691127466956
获取对象形如:
{“id”:“279”,“secKey”:“a09VdERja0dueVBVSWZnWA”,“createTime”:null}
其中jsonData是固定值({“requestPkUser”:“”})的3des加密结果,3des加密的key仍然是随机的32位串,再由硬编码的rsa pub key加密得到deskey
在这里插入图片描述

得到的seckey用于对登录密码的aes/cbc加密,iv是硬编码的。
在这里插入图片描述

 得到一个新的对象

{ “success” : True, “id” : id,“encrypted” : aes(passwd, seckey,iv) }
在这里插入图片描述

这个对象再次被重组名为passwordJson的对象,转字符串作为表单对象中password的新值,最后表单对象由3des加密得到jsondata,3des加密密钥key由rsa加密得到deskey,形如{“jsondata”:”xxx”,”deskey”:”yyy”}的对象用作body请求登录。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL—— 基础语法大全

MySQL—— 基础 一、MySQL概述1.1 、数据库相关概念1.2 、MySQL 客户端连接1.3 、数据模型 二、SQL2.1、SQL通用语法2.2、SQL分类2.3、DDL2.4、DML2.5、DQL2.6、DCL 三、函数四、约束五、多表查询六、事务 一、MySQL概述 1.1 、数据库相关概念 数据库、数据库管理系统、SQL&a…

谈谈DNS是什么?它的作用以及工作流程

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、DNS是什么? 二、DNS的作用 三、DNS查询流程 1、查看浏览器缓存 2、查看系统缓存 3、查看路由器缓存 4、查看ISP …

arcgis栅格数据之最佳路径分析

1、打开arcmap,加载数据,需要对影像进行监督分类,如下: 这里任选一种监督分类的方法(最大似然法),如下: 这里会先生成一个.ecd文件,然后再利用.ecd文件对影像进行分类。如…

论 SoC上的Linux如何拉动外部I/O

在MCU中(如classic autosr或其他RTOS),一般可以直接通过往对应的寄存器(地址转为指针)写值, 或者调用一些硬件抽象层或者驱动接口来拉动芯片提供的GPIO。 但是在Linux中,可能不会让应用层直接去…

[CKA]考试之查看pod的cpu

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 找出标签是namecpu-loader的Pod,并过滤出使用CPU最高的Pod&#…

MCUXpresso for VS Code -- 基于VSCode开发RT1176

MCUXpresso for VS Code 是nxp推出插件,旗下MCX LPC, Kinetis和i.MX rt等MCU,都能在VS Code平台进行嵌入式开发。功能框图如下: 前期准备: 软件环境: windows(实际可以跨系统,linux和mac没有测试) VS Code ninja CMa…

LeetCode 热题 100 JavaScript--206. 反转链表

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* return {ListNode}*/1、逐个断键,将后一个节点放到前面 …

C语言笔试训练【第四天】

文章目录 1、设变量已正确定义&#xff0c;以下不能统计出一行中输入字符个数&#xff08;不包含回车符&#xff09;的程序段是&#xff08; &#xff09; 2、运行以下程序后&#xff0c;如果从键盘上输入 65 14<回车> &#xff0c;则输出结果为&#xff08; &#xff0…

centos7 yum源安装出错及更新问题

如下 首先&#xff0c;在搜索jdk时报错如下&#xff1a; 解决办法 1、进入 yum的repo目录 cd /etc/yum.repos.d/2、修改所有的CentOS文件内容 sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vau…

《南方都市报》:大众点评等互联网平台陷医美虚假“种草”质疑,或涉嫌违规广告

植发、整容&#xff0c;正在走向大众。近日&#xff0c;“妈妈带高考结束女儿整容提升自信”“长沙学生族暑假扎堆整容”等多个相关话题冲上热搜&#xff0c;学生整形热引发广泛关注。 爱美之心&#xff0c;人皆有之&#xff0c;当下早不是谈整容色变的时候&#xff0c;有人在…

【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别

文章目录 1、概述2、BN层3、LN层4、Pytorch的实现5、BN层和LN层的对比 1、概述 归一化(Normalization) 方法&#xff1a;指的是把不同维度的特征&#xff08;例如序列特征或者图像的特征图等&#xff09;转换为相同或相似的尺度范围内的方法&#xff0c;比如把数据特征映射到[…

IO学习-有名管道

1&#xff0c;要求实现AB进程对话 A进程先发送一句话给B进程&#xff0c;B进程接收后打印 B进程再回复一句话给A进程&#xff0c;A进程接收后打印 重复1.2步骤&#xff0c;当收到quit后&#xff0c;要结束AB进程 运行结果&#xff1a;

【面试八股文】每日一题:谈谈你对集合的理解

每日一题-Java核心-谈谈你对集合的理解【面试八股文】 谈谈你对集合的理解 Java集合是Java编程语言中用于存储数据的容器。它提供了一系列的类和接口&#xff0c;用于操作和管理数据集合。Java集合框架主要包括以下几个重要的接口和类&#xff1a; List&#xff1a;List是一个有…

掌握 JVM 调优命令

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM 日常调优总结起来就是&#xff1a;首先通过 jps 命令查看当前进程&#xff0c;然后根据 pid 通过 jinfo 命令查看和修改 jvm 参数&#xff0c;通过 jstat 命令查看 cla…

火力全开!百度文心3.5三大维度、20项指标国内问鼎!

近日&#xff0c;清华大学新闻与传播学院沈阳团队发布《大语言模型综合性能评估报告》&#xff08;下文简称“报告”&#xff09;&#xff0c;报告显示百度文心一言在三大维度20项指标中综合评分国内第一&#xff0c;超越ChatGPT&#xff0c;其中中文语义理解排名第一&#xff…

8.7一日总结

后台管理项目(使用vue3) 1.创建项目 npm init vuelatest 2.进入项目,下载依赖 3.下载需要的项目依赖 下载重置样式表 npm install reset-css 在main.js中阴入 import reset-css 4.清理目录 将项目中不需要的内容删除 5.运行项目 npm run dev 6.将仓库推送…

Kubectl 详解

目录 陈述式资源管理方法:项目的生命周期:创建-->发布-->更新-->回滚-->删除声明式管理方法:陈述式资源管理方法: kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将…

线程池优雅关闭

背景 线程池是日常我们写代码时经常打交道的知识点了&#xff0c;围绕线程池除了core核心线程数和最大max线程数的知识点外&#xff0c;我们一般会忽略然而却绕不开的问题时如何关闭线程池 如何关闭线程池 首先从优雅关闭线程池代码说起&#xff1a; public boolean graful…

在oracle SQL中创建返回表的函数

这是我的职责 create or replace FUNCTION split(i_str IN VARCHAR2,i_delim IN VARCHAR2 DEFAULT : ) RETURN TABLE AS BEGINRETURN SELECT trim(regexp_substr(i_str, [^||i_delim||], 1, LEVEL)) str FROM projetCONNECT BY instr(i_str, i_delim, 1, LEVEL - 1) …

Android安卓实战项目(10)---详细记录饮食与训练计划App【大Demo】可记录每日消耗和数据面板(源码在文末)可用于比赛项目或者作业参考中

Android安卓实战项目&#xff08;10&#xff09;—详细记录饮食与训练计划App【大Demo】可记录每日消耗和数据面板&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09;可用于比赛项目或者作业参考中 【bilibili演示】 https://www.bilibili.com/video…