本文是高级前端加解密与验签实战的第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中的data
body = 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) // 解密data
data = 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出现在了提取内容中。

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

渗透测试-前端加密分析之RSA响应加密的更多相关文章

  1. 渗透测试常规思路分析-FREEBUF

    最基础但练得好最后也非常厉害 1.  主要由于服务器配置等原因造成的信息泄露 常用google ,bing等搜索工具,轻量级的搜索出一些遗留后门,不想被发现的后台入口,中量级的搜索出一些用户信息泄露, ...

  2. 银联手机支付(.Net Csharp),3DES加密解密,RSA加密解密,RSA私钥加密公钥解密,.Net RSA 3DES C#

    前段时间做的银联支付,折腾了好久,拼凑的一些代码,有需要的朋友可以参考,本人.Net新手,不保证准确性! 这个银联手机支付没有SDK提供,技术支持也没有.Net的,真心不好搞! RSA加解密,这里有个 ...

  3. 34款Firefox渗透测试插件工具

    工欲善必先利其器,firefox一直是各位渗透师必备的利器,小编这里推荐34款firefox渗透测试辅助插件,其中包含渗透测试.信息收集.代理.加密解密等功能. 1:Firebug Firefox的 ...

  4. 前后端数据加密传输 RSA非对称加密

    任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密.实现方式:公钥加密,私钥解密.研究进度:javascript与java端皆已 ...

  5. Kali Linux Web渗透测试手册(第二版) - 1.0 - 渗透测试环境搭建

    一.配置KALI Linux和渗透测试环境 在这一章,我们将覆盖以下内容: 在Windows和Linux上安装VirtualBox 创建一个Kali Linux虚拟机 更新和升级Kali Linux ...

  6. GraphQL渗透测试详解

    GraphQL介绍 GraphQL概述 GraphQL 是一种查询语言,用于 API 设计和数据交互.它是由 Facebook 发布的一款新型的数据查询和操作语言,自 2012 年起在内部使用,自 2 ...

  7. RSA 非对称加密,私钥转码为pkcs8 错误总结

    RSA 非对称加密,私钥转码为pkcs8 错误总结 最近在和某上市公司对接金融方面的业务时,关于RSA对接过程中遇到了一个坑,特来分享下解决方案. 该上市公司简称为A公司,我们简称为B公司.A-B两家 ...

  8. 前端js,后台python实现RSA非对称加密

    先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密; # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Cr ...

  9. 【渗透技术】渗透测试技术分析_TomCat

    [渗透技术]渗透测试技术分析_TomCat 本文转自:i春秋论坛 渗透测试-中间人攻击(原理)说起“中间人攻击”我想大多数对渗透测试又了解的朋友都多少有所了解,因为我们用到的次数真是非常的多.它可以将 ...

  10. iOS RSA非对称加密测试流程

    非对称加密需要两把钥匙:公钥和秘钥. 单向加密:一般情况下服务器会持有秘钥和公钥,那该怎么使用呢?以注册场景为例,最初服务器持有公钥和密钥. 用户注册时不是直接发送用户名,密码,验证码等明文信息给服务 ...

随机推荐

  1. 无人值守的IDC机房动环综合运维方案

    ​ 企业数字化转型以及5G.物联网.云计算.人工智能等新业态带动了数据中心的发展,在国家一体化大数据中心及"东数西算"节点布局的推动下,数据中心机房已成为各大企事业单位维持业务正常 ...

  2. Windows下安装Nessus 10.8.3安装破解教程

    1.下载: 下载地址:https://www.tenable.com/downloads/nessus 浏览器访问 https://127.0.0.1:8834 重点:Register offline ...

  3. G-数据结构-G

    \[\huge 近日多做数据结构题,或恐后再读不能醒悟,或记其思路,或骂出题人,或不想刷题,虽有此篇. \] \[\] \[\] \[\] \[\] T1 距离 首先这题部分分很多,直接 $ O (n ...

  4. python多进程完成模拟支付

    #!/usr/bin/python # -*- coding: UTF-8 -*- '''@auther :mr.qin @IDE:pycharm''' from tool.Common import ...

  5. house of cat

    调用方法 调用链1 house of cat调用链 __malloc_assert 在 2.35 的 glibc 中源码如下 static void __malloc_assert (const ch ...

  6. .net 在线客服系统,到底能不能处理 50万 级消息量,系统架构实践

    业余时间用 .net core 写了一个在线客服系统.我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免费和分享. 后来我索性就发了一个100%私有化版直接 ...

  7. VMware安装Ubuntu操作系统 2024.9.27

    1.安装 Ubuntu的官方网站是:https://www.ubuntu.com/download 点进去可以直接下载 文件下载会比较慢,我这点用了约5分钟 然后就可以打开vmware,选择: 就可以 ...

  8. 关于C++当中的指针悬空问题

    一.哪里遇到了这个问题 在进行MNN机器学习框架的MFC应用开发的时候遇到了这个问题,在窗口控件代码段 "MNN_Inference_BarCode_MFCDlg.cpp" 当中需 ...

  9. 使用 C# 入门深度学习:Pytorch 基础

    教程名称:使用 C# 入门深度学习 作者:痴者工良 地址: https://torch.whuanle.cn 1.2 Pytorch 基础 本文内容介绍 Pytorcn 的基础 API,主要是数组的创 ...

  10. NZOJ 模拟赛7

    T1 字符串 小X十分热爱学习.有一天,他刚学完"漂亮的k字符串"的概念:给定长度为n的字符串和整数k,k能整除n,如果该字符串满足以下两个条件: s是一个回文串,即对于任意1≤i ...