渗透测试-前端加密分析之RSA响应加密

news/2024/12/22 2:05:34/文章来源:https://www.cnblogs.com/CVE-Lemon/p/18621613

本文是高级前端加解密与验签实战的第7篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过请求包和响应包加密来爆破登录界面。

分析

这里的公私钥同上文一样是通过服务端获取

通过查看响应包可以看到,data字段被加密了,当然这里我已经知道了data字段和origin字段的内容是一样的,下面来看看该如何编写热加载代码吧。

热加载

方法1(固定私钥)

这里跟上文一样选择Web Fuzzer的序列功能。

数据提取器提取公私钥

由于afterRequest函数无法获取到参数,所以在代码里写死了私钥内容来解密响应包。

热加载代码:

var PRIVATE_KEY = `这里填私钥内容(可换行)`decryptData = (packet) => {body = poc.GetHTTPPacketBody(packet) // 获取响应包体jsonBody = json.loads(body) // 转为map格式//解密数据data = codec.DecodeBase64(json.loads(body).data)~data = codec.RSADecryptWithOAEP(PRIVATE_KEY/*type: bytes*/, data/*type: any*/)~data = string(data)// 使用JsonPath定位,替换json中的databody = json.ReplaceAll(jsonBody, "$..data", data)// 转为json格式body = json.dumps(body, json.withIndent("   "))// 替换正则匹配结果(可省略)pattern := `\\`body = re.ReplaceAll(body, pattern, "")return poc.ReplaceBody(packet, body/*type: bytes*/, false/*type: bool*/)
}encryptData = (pemPublic, data) => {data = codec.RSAEncryptWithOAEP(pemPublic /*type: []byte*/, data)~data = codec.EncodeBase64(data)body = f`{"data":"${data}"}`return body
}//分割参数的函数
splitParams = (params) => {pairs := params.SplitN("|", 2)return encryptData(pairs[0], pairs[1])
}// 修改响应包
afterRequest = func(rsp){return decryptData(rsp)
}

请求格式:

POST /crypto/js/rsa/fromserver/response HTTP/1.1
Host: 127.0.0.1:8787
Content-Type: application/json{{yak(splitParams|{{p(publicKey)}}|{"username":"admin","password":"admin23","age":"20"})}}

下图为效果图,响应包的data字段的值被解密后的数据替换。

方法2(使用mirrorHTTPFlow)

在这一关(响应加密)和下一关(RSA加密AES密钥)解密过程中,我一直都在寻找如何才能把数据提取器提取到的privateKey传参到beforeRequestafterRequest这类函数中,以达到修改数据包的目的。

从前端验签与加解密学习Yakit中WebFuzzer热加载。在这篇文章中学到了可以使用序列,将前两个序列提取到的key和数据,在第三个序列当做请求内容,解密后发送过去,这样也算是一种变相的完成了解密,但是这个方法感觉不太优雅,需要多一个额外的请求包。

这是当时测试的图片:

然后在 Yak Project官方公众号的文章中终于看到了一个函数,mirrorHTTPFlow可以解决这个问题,虽然不能直接替换响应包,但会出现在提取数据中。由于官方文档没有具体讲解这个函数,所以它的具体功能现在还不太清楚。

热加载代码:

//加密函数
encrypt = (pemPublic, data) => {data = codec.RSAEncryptWithOAEP(pemPublic /*type: []byte*/, data)~data = codec.EncodeBase64(data)body = f`{"data":"${data}"}`return body
}//分割参数的函数
splitParams = (params) => {pairs := params.SplitN("|", 2)return encrypt(pairs[0], pairs[1])
}mirrorHTTPFlow = (req, rsp, params) => {// 获取私钥以解密响应数据pem = params.privateKey// 切割响应中的数据,作为 JSON 加载_, body = poc.Split(rsp)body = json.loads(body)// 解密datadata = codec.DecodeBase64(body.data)~data = codec.RSADecryptWithOAEP(pem, data)~return string(data)
}

请求包格式:

POST /crypto/js/rsa/fromserver/response HTTP/1.1
Host: 127.0.0.1:8787
Content-Type: application/json{{yak(splitParams|{{p(publicKey)}}|{"username":"admin","password":"123","age":"20"})}}

效果如下图,可以看到解密后的data出现在了提取内容中。

爆破成功,但是看不到请求的原始密码,由于太累了懒得解决这个问题,啥时候闲了再说吧。

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

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

相关文章

【Flink系列】美团外卖实时数仓建设实践

一、实时技术及架构 二、业务痛点 三、数据特点与应用场景 四、实时数仓架构设计 五、基于Flink的实时数仓应用案例一、实时技术及架构 1.1 实时计算技术选型 目前,市面上已经开源的实时技术还是很多的,比较通用的有Spark Streaming、Flink等,技术同学在做选型时要根据公司的…

【系统开发】携程从零构建多端一致的设计研发体系实践

一、背景二、问题分析2.1 品牌一致性问题2.2 跨平台兼容性问题2.3 组件复用性问题三、解决方案3.1 模块化设计与主题配置3.2 跨平台开发解决方案3.3 自动化设计与开发流程四、技术实现4.1 视觉和研发组件库4.2 开发SDK的对接4.3 设计工具的集成五、实践与应用六、结语以下文章来…

【WEB安全】web源码泄露漏洞

前言 在Web安全之中,可能大家对SQL注入、XSS跨站脚本攻击、文件上传一些漏洞已经耳熟于心了,这些漏洞可以对系统造成严重的风险,今天来看一个造成的风险完全不低于上述的漏洞,那就是源码泄露,而且web源码泄露在实际中并不少见,一些大的厂商也有可能存在这种风险。 常见的…

MySQL分页性能思考

MySQL分页性能思考 关键词:深度分页背景 最近有一个需求:在后台管理页面中,需要展示产品信息的列表。 之前版本开发中产品信息是用户填写完所有字段之后能进行保存。在之前的基础上需要支持用户不完全填写字段进行展示和保存的功能。 一个很简单的想法是为空也直接保存就可以…

【apache漏洞】 flink web漏洞复现

#CVE-2020-17519 #CVE-2020-17518 flink简介 Apache Flink 是高效和分布式的通用数据处理平台,由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎(简单来说,就是跟spark类似)。Flink 具有监控 API,可用于查询"正在运行的jobs…

ORM框架与数据库交互

title: ORM框架与数据库交互 date: 2024/12/22 updated: 2024/12/22 author: cmdragon excerpt: 对象关系映射(Object-Relational Mapping,ORM)框架是简化数据库与编程语言之间交互的强大工具。通过使用ORM,开发者可以避免直接编写SQL代码,便捷地执行CRUD操作,从而提高…

实验6 模板类,文件I/O和异常处理

一、实验目的练习编写模板函数,模板类,从多态角度理解模板函数和模板类(类型作为参数) 体验标准I/O流类,文件I/O流类,字符串I/O流类的用法,能正确使用 针对问题场景,使用流类库对I/O数据进行格式化和读写操作 体验异常处理的基础用法,能解释异常处理的机制和流程 训练…

【IM专题】服务治理,是在谈什么?

先说交通治理。 没有交通治理,会是怎样的场景?见下图。交通没有治理,车流效率会大大降低,尤其是在十字路口这种有资源竞争的路段,交通很容易陷入瘫痪。 如果引入交通治理,会是怎样的场景?见下图。交通治理,通过使用信号灯或是建造立交桥,在即使有资源冲突的路口段,通…

[题解]AtCoder Beginner Contest 385(ABC385) A~F

A - Equally 显然分组情况一定是\(1+1+1\)或\(1+2\),直接判定即可。点击查看代码 #include<bits/stdc++.h> using namespace std; int a,b,c; signed main(){cin>>a>>b>>c;if((a+b==c)||(a+c==b)||(b+c==a)||(a==b&&b==c)) cout<<"…

【AI+模型】RAG 架构图解:从基础到高级的7种模式

RAG 技术通过在 AI 生成过程中引入外部知识检索,从基础的文档查询发展到多模态、Multi-Agent 体协同的智能架构,让 AI 回答更准确、更全面。 核心组件 嵌入模型: 将文本转换为向量表示 生成模型: 负责最终的内容生成 重排序模型: 优化检索结果的相关性 向量数据库:…

浅聊web前端性能测试

最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~最近正好在做web前端的性能测试,这次就来聊聊关于这个的测试思路~ 首先从用户的思维去思考,关于web前端性能,用户最看重的是什么...... 其实就是下面三个点:1. 加载性能(即页面加载时间+资源加载时间)2. …

使用magic-api实现增删改查分页

创建项目结构 pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apach…