【JS逆向】前端加密对抗基础

目录

    • 逆向基础
      • 断掉调试
      • 基本常见的加解密方式
    • encrypt-labs靶场
      • 搭建过程
      • 靶场基本教程
        • AES加密key前端体现(固定key)
        • AES服务端获取key
        • RSA非对称加密
        • DES加密存在规律key
        • 明文加签sign
        • 加签key在服务端sign
        • AES+RAS组合

逆向基础

断掉调试

通过浏览器站点控制台(F12),进行断掉调试js代码,查看和调试代码。(断点处,代码会停在断点,不继续运行。还可通过控制台查看断点前的函数值,也称为作用域)

image.png

基本常见的加解密方式

对称加密、非对称加密、Hash散列值…等等

常见对称加密如AES加密、DES加密。非对称加密RAS加密。Hash如MD5、SHA、国密SM1,2,3,4等。

encrypt-labs靶场

https://github.com/SwagXz/encrypt-labs

搭建过程

使用phpstudy搭建即可,但需要导入数据库,否则无法正常使用。源码当中有sql后缀配置文件,即数据库文件。

image-20250122103619235

导入数据库可以使用第三方工具或mysql的命令行。

简单方式的创建数据库信息,可以将sql后缀数据库文件导入到第三方工具,直接执行即可创建数据库,如navicat。

image-20250122103825328

完成上述过程,即可搭建完成,可正常访问。

注意:

默认密码:admin/123456

默认访问地址http://127.0.0.1(混淆)

http://127.0.0.1/easy.php (无混淆)使用无混淆的进行学习

image-20250122104534431

靶场基本教程

首先需要加解密工具或插件。

burp插件:https://github.com/f0ng/autoDecoder

浏览器插件:Ctool 程序开发常用工具,https://ctool.dev/

若插件使用不熟悉,可直接使用在线的加解密平台也可基本实现加解密。

以下主要是常见的加解密以及一些基本加解密,若有复杂加解密环境情况,也可自行编写脚本,结合此插件通过接口加解密进行处理。也可使用其他方法或工具。

AES加密key前端体现(固定key)

1、正常可任意输入用户名密码,选择第一关登录接口,AES固定key。

2、使用F12断点调试,在登陆js处打下断点,查看js代码运行情况,向上翻找执行记录,发现js当中AES加密固定key,使用AES-CBC方式进行加密以及填充方式。最后得到加密的数据encryptData参数值内容为加密信息。

image-20250122105517449

填充方式以及加密参数:

image-20250122110117045

数据包信息:

观察发现encryptData参数加密内容加密后还进行了一次URL编码。

image-20250122110213863

3、配置autoDecoder插件

根据上述分析得到的加密方式和key,iv。即可配置自带算法的加解密,自动加解密。

(1).在自带算法加解密模块当中,配置加密方式为AES-CBC和填充方式。添加请求包的加密方式为AES-CBC。响应包无需加解密。

(2).正则提取请求包当中加密解密的内容,精确匹配内容。验证是否生效,可正常加解密。

(3).保存配置信息为任意文件,命名随意即可。

(4).回到autoDecoder选项卡,通过原始数据包特点可断定请求包的加密信息还通过了一次URL编码,需要勾选保存。

自带算法解密模块配置:

image-20250122111713971

选项卡配置:

image-20250122111241172

完成以上配置后。回看数据包,通过插件可观察到,可以正常加解密。

image-20250122112111349

由此可通过此配置,来实现数据包的自动加解密。

也可以构造使用明文数据包,也可正常发送请求,自动加解密处理。

image-20250122112225151

同理通过借助此插件加解密配置进行爆破、结合burp其他插件的使用均可实现。

明文方式:

成功登录

image-20250122112416863

密文方式:

成功登录

image-20250122112700606

AES服务端获取key

正常输入用户名和密码,进行选择登录接口。

image-20250122135852482

通过流量数据包,可观察到,数据加密内容以及加密的key和iv通过服务端进行了返回,体现在了数据包的回包当中。

image-20250122140235764

回包解码后,为用户名或密码错误

image-20250122140320554

返回的key和iv值

image-20250122140123129

余下操作和配置同第一关的固定key一致。

image-20250122141704684

RSA非对称加密

PS:RSA非对称加密,方式为公钥加密,私钥解密的过程。同时,对于RSA加密对较大的数据处理时,无法进行加密,会导致加密失败。

在登录验证处添加断点,可以看到数据成功加密后的内容,以及RSA的公钥key值。加密参数是data。

img

也可通过向上翻找js文件,找到publickey。并无发现私钥。

image.png

数据包信息:

加密结果以及加密的参数为data。加密数据依旧进行了URL编码。

image.png

autoDecoder插件配置

1、自动化算法加解密模块配置,模式选择RSA,添加公钥key。由于没有私钥,只有公钥,所以只能进行加密处理,无法解密。每次加密结果都会不同,但是不影响最终结果。

image.png

2、选项卡配置,选择加密数据后进行URL编码,保存即可。

image.png

配置完成后,可构造明文数据包,成功登录。会通过插件进行自动加密传输。

image.png

密文数据包:

image.png

DES加密存在规律key

通过打下断点,观察js代码执行逻辑,查看到加密方式为DES-CBC模式,并且发现key和iv存在规律。

通过js代码分析可得,加密key和偏移量iv,规律为8位长度,并且都引用了用户名username,对于秘钥key,如果用户名长度不满足8位长度,则自动填充,填充数值为6;同理,偏移量iv值,999+用户名前四位。

因此得到key值为:admin666,iv:9999admi

image.png

通过js代码可分析发现,password参数被加密

image.png

数据包信息:

password参数被加密

image.png

根据以上js信息和数据包信息,对autoDecoder插件进行配置。

1、选择加密方式为DES加密,模式选择CBC,填入对应的key和iv即可。

2、正则匹配加密数据包内容,提取需要的加密内容,精确匹配。

3、保存配置到任意文件即可。

4、选项卡配置,保存即可。

自带算法加解密模块配置

image.png

选项卡配置:

image.png

完成以上配置后,回看数据包,可正常解密。

image.png

可构造明文数据包,成功登录。

image.png

密文数据包,成功解密。

image.png

明文加签sign
签名的意义在于数据防篡改,通过特定的签名规则进行哈希计算,当修改原始数据当中的任意条件数值时,都会签名不通过。

正常登录,选择明文加签的登录接口。F12在登录处打下断点,查看并调试代码。发现HmacSHA256加密的key值,以及签名的逻辑。

dataToSign = username + password + nonce + timestamp

image.png

数据包信息:

image.png

若修改信息,则签名不通过。数据防篡改

image.png

因此,通过以上js代码得到的签名逻辑以及数据包特征,重新生成签名即可。将签名替换,验证通过,成功登录。(实战环境编写脚本,自动化处置即可。)

使用哈希加密在线平台加密即可。也可使用开头提到的Ctool工具

image.png

加签key在服务端sign

通过js断点分析,签名sign在服务端生成并返回,也可以通过抓包看到。

image.png

数据包:

返回签名内容

image.png

提示密码错误。

image.png

操作方式和上述明文加签一致,只是本次加签key在服务端返回,需要再拿着这个签名去认证登录。只需获取正确的签名,再带着正确的签名,认证登录即可。(也可通过脚本,自动化处置并实现)

AES+RAS组合

通过断点调试,对js进行分析,发现首先获取随机的key和iv值,使用AES-CBC模式对数据进行加密,得到加密参数为encryptedData,然后再对key和iv进行RSA加密,并且RSA加密的公钥key固定,分别得到加密后的数据,加密参数为encryptedKey、encryptedIv。

image.png

对key和iv进行RSA非对称加密。公钥key固定

image.png

数据包如下:

image.png

由于key和iv随机变化,无法进行固定。因此通过替换的方式,固定AES加密的key和iv,进行加解密。替换的key和iv使用之前固定的即可。

js处打断点进行替换即可。

image.png

配置autoDecoder插件即可。配置和第一关AES加密key固定,基本一致。

image.png

回看数据包,成功解密,成功登录。

image.png

image.png

文章不妥之处,欢迎批评指正!

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

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

相关文章

C# 多线程同步(Mutex | Semaphore)

Mutex: 用于保护临界区,确保同一时间只有一个线程能够访问共享资源; Semaphore: 允许同时有多个线程访问共享资源,但会限制并发访问的数量。 Mutex运行输出 Semaphore运行输出 namespace SyncThreadDemo {internal class Program{static stri…

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录 背景前言一、复位信号的同步与释放1.1 同步复位1.1.1 综述1.1.2 优缺点 1.2 recovery time和removal time1.3 异步复位1.3.1 综述1.3.2 优缺点 1.4 同步复位 与 异步复位1.5 异步复位、同步释放1.5.1 总述1.5.2 机理1.5.3 复位网络 二、思考与补充2.1 复…

git远程仓库如何修改

1.需要做的事情:把git的远程仓库修改掉,在git创建一个自己的仓库 如果你是私有化的话,可以生成一个自己token令牌也可以。到时候push的时候会让你登录你就可以输入你的token令牌和用户名。 2.查看当前仓库的远程地址是不是自己的 &#xff…

mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看数据库,删除数据库,使用数据库;

SQL通用语法 SQL语句分类 DDL data definition language : 用来创建数据库,创建表,创建表中的字段,创建索引。因此成为 数据定义语言 DML data manipulation language 有了数据库和表以及字段后,那么我们就需要给这个表中 添加数…

【xcode 16.2】升级xcode后mac端flutter版的sentry报错

sentry_flutter 7.11.0 报错 3 errors in SentryCrashMonitor_CPPException with the errors No type named terminate_handler in namespace std (line 60) and No member named set_terminate in namespace std 替换sentry_flutter版本为: 8.3.0 从而保证oc的…

【回忆迷宫——处理方法+DFS】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 250; int g[N][N]; bool vis[N][N]; int dx[4] {0, 0, -1, 1}; int dy[4] {-1, 1, 0, 0}; int nx 999, ny 999, mx, my; int x 101, y 101; //0墙 (1空地 2远方) bool jud(int x, int y) {if…

wireshark工具简介

目录 1 wireshark介绍 2 wireshark抓包流程 2.1 选择网卡 2.2 停止抓包 2.3 保存数据 3 wireshark过滤器设置 3.1 显示过滤器的设置 3.2 抓包过滤器 4 wireshark的封包列表与封包详情 4.1 封包列表 4.2 封包详情 参考文献 1 wireshark介绍 wireshark是非常流行的网络…

⽤vector数组实现树的存储(孩⼦表示法)c++

在我们遇到的算法题中&#xff0c; ⼀般给出的树结构都是有编号的&#xff0c;这样会简化我们之后存储树的操作 &#xff0c;⼀般提供两个信息&#xff1b; 结点的个数 n;n-1条x结点与y结点相连的边 题⽬描述: ⼀共9个结点셈 1号结点为根节点&#xff0c;接下来8⾏&#xff…

C语言-内存管理

1、malloc()函数 用于动态分配一块指定大小的内存&#xff0c;并返回指向这块内存的指针。如果分配失败&#xff0c; 返回 NULL。 int* ptr (int*)malloc(sizeof(int) * 10); // 分配一个包含 10 个整数的内存 if (ptr NULL) {printf("Memory allocation failed!\n&q…

蓝桥杯lesson3---string的使用

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” string的概念 string字符串是一种更加高级的封装&#xff0c;string字符串中包含了大量的方法&#xff0c;这些方法使得字符串的操作变得更加简单&#xff0c;string的使用&…

进制之间转换

「 一、十进制 二进制 」 1.十进制转二进制&#xff1a;一直除以2直到商为0&#xff0c;再反向取余数。 例&#xff1a;13&#xff08;十进制&#xff09;转1101&#xff08;二进制&#xff09; 2.二进制转十进制:最后一位数开始是2^0&#xff0c;然后一直按照指数递增的方式…

3b1b线性代数基础

零、写在前面 3b1b之前没认真看&#xff0c;闲了整理整理。 一、向量 学习物理的时候&#xff0c;向量是空间中的箭头。由其方向和长度决定。 学习数据结构的时候&#xff0c;向量是有序的数字列表。向量的每一维度有着不同含义。 线性代数中&#xff0c;我们通常认为**向量…

Consul持久化配置报错1067---consul_start

报错都是文件写的有问题或者格式问题&#xff0c;直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在&#xff1a;mydata 注&#xff1a;D:\consul\consul_1.20.2_windows_386改成自己consul的…

【Unity3D】Unity混淆工具Obfuscator使用

目录 一、导入工具 二、各种混淆形式介绍 2.1 程序集混淆 2.2 命名空间混淆 2.3 类混淆 2.4 函数混淆 2.5 参数混淆 2.6 字段混淆 2.7 属性混淆 2.8 事件混淆 三、安全混淆 四、兼容性处理 4.1 动画方法兼容 4.2 GUI方法兼容 4.3 协程方法兼容 五、选项 5.1 调…

JavaScript学习笔记(3)

一.BOM对象 BOM的全称是Browser Object Model,翻译过来是浏览器对象模型。也就 是JavaScript将浏览器的各个组成部分封装成了对象。我们要操作浏览器的部分功能&#xff0c;可以通过操作 BOM对象的相关属性或者函数来完成。例如&#xff1a;我们想要将浏览器的地址改为 http:/…

Hive之加载csv格式数据到hive

场景&#xff1a; 今天接了一个需求&#xff0c;将测试环境的hive数据导入到正式环境中。但是不需要整个流程的迁移&#xff0c;只需要迁移ads表 解决方案&#xff1a; 拿到这个需求首先想到两个方案&#xff1a; 1、将数据通过insert into语句导出&#xff0c;然后运行脚本 …

stm32f103 单片机(一)第一个工程

先看一个简单的 系统上已经安装好了keil5 与ARM包&#xff0c;也下载好了STM32固件库 新建一个工程&#xff0c;添加三个组 加入如下文件 在options 里作如下配置 准备在main.c 中写下第一个实验&#xff0c;点亮一个小灯。 像51单片机一样直接对引脚赋值是行不通的 在…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户&#xff0c;包括以下功能&#xff1a; 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…

绘制决策树的尝试1

代码复制 import pydotplus 复制 - 这一行代码用于导入pydotplus模块&#xff0c;这是一个用来在Python中创建图形的工具。2. python from IPython.display import Image 这一行代码用于从IPython显示模块中导入Image类&#xff0c;它允许我们在Jupyter笔记本中显示图像。…

知识图谱结合大模型用于聊天分析

知识图谱结合大模型在聊天分析中的应用主要体现在以下几个方面&#xff1a; 1. 提升对话理解和生成能力 知识图谱&#xff08;KG&#xff09;与大模型&#xff08;LLM&#xff09;的结合能够显著增强对话系统的语义理解能力和生成能力。例如&#xff0c;通过知识图谱的结构化…