前端JS加密与Buspsuite的坦诚相待

news2024/9/22 21:25:23

6c6fb63106d7d93f5fef2246d577addb.jpeg


前端JS加密测试场景下的困惑


在渗透测试过程中经常会遇到JS前端加密的场景,假如不借助任何工具的情况下,我们一般是把JS代码进行扣取,本地进行加解密生成Payload,然后在Burpsuite里进行Payload替换。这种方式就存在一个很明显的问题,那就是在大量的Fuzz测试过程中,本地生成再手工替换会消耗大量的时间,这个时候我们就会想,能不能直接在Burpsuite前后利用脚本的形式进行加解密操作,让数据在Burpsuie里展示的时候已经是加解密后的数据呢?




代理的理解



先来看看平常我们渗透场景下Burpsuite代理转发数据包的原理

不挂Burpsuite代理,客户端浏览器直接访问服务器的流程

097a50f7bff762b0d4ce835f2561f1e8.jpeg

挂上Burpsuite代理之后

cd087b03a02f4583d5922084f32f4100.jpeg

现在想要在Burpsuite代理转发前后添加脚本进行加解密操作,那分别在客户端浏览器与Burpsuite之间、Burpsuite与服务端服务器之间添加一个代理即可实现。

a9cfcbf2cc59c5c7a1aed2bb6b28d045.jpeg

接下来就是分别实现这些代理功能了。市面上已经有很多优秀的类似代理工具,我们可以使用Python脚本进行编写加解密代码然后完成代理实现如上功能,但这样做每次进行不同的网站测试就需要每次都要修改自己的Python脚本,扩展性非常差。这里我们可以使用mitmproxy 来实现我们的需求。




mitmproxy简介


mitmproxy 是一个免费的 和开源 交互式 HTTPS 代理,可为 HTTP/1、HTTP/2 和 WebSocket 提供支持 SSL/TLS 的交互式拦截代理。相比于其他代理工具其优势有:

● 相对于fiddle代理工具,它可以跨平台
● 相对于跨平台charles代理工具,它开源免费
● 它支持使用Python进行二次开发,可以结合业务进行灵活拓展了

mitmproxy下载地址如下:

https://mitmproxy.org/

mitmproxy安装完成后有如下三个工具:

● mitmproxy命令行交互工具
● mitmdump命令行非交互工具
● mitmweb基于Web的用户界面

在客户端浏览器与Burpsuite之间、Burpsuite与服务端服务器之间的代理也分别有他们名词,分别为下游代理、上游代理。

1542165ace249b40163a8d88439bc8e8.jpeg

mitmproxy一大优势是支持Python的二次开发的,而在代理原理图中的请求和响应也依次对应着,mitmproxy提供Python中API的request和response。

from mitmproxy import ctxfrom mitmproxy.http import HTTPFlow

class MyAddon: def request(self, flow: HTTPFlow): # 这里可以处理请求,比如打印请求信息 ctx.log.info(f"Handling request: {flow.request.pretty_url}")
def response(self, flow: HTTPFlow): # 这里可以处理响应,比如修改响应内容 ctx.log.info(f"Handling response for: {flow.request.pretty_url}")
addons = [ MyAddon(), ]



mitmproxy实战使用


启动一个服务器,模拟口令登陆功能

edb7baae8346ab50e7e1aa1ff267ea3d.jpeg

在只配置Burpsuite代理下登陆抓包

65f226791945039ca867facd6709e195.jpeg

可以看到password字段是被加密的,当然这里只是一个简单的Base64加密,Burpsuite也支持直接在Burpsuite中直接解密数据,为了演示和后面编写Python脚本方便,这里就先假设Burpsuite上是不可对Password这个字段直接进行解密的。

在浏览器客户端到Burpsuite之前,我们最常做的处理就是把前端JS加密的数据解密到Burpsuite里,在Burpsuite里直接看到明文的数据。所以在客户端到Burpsuite我们走的一条流程就如下

c5d9b09da80f888aee43364a414c0a09.jpeg

那么我们可以进行编写如下脚本

de.py

from mitmproxy import ctximport base64

class MyAddon():
def request(self,flow): # 服务端host if flow.request.host=="www.xj.com": # 获取客户端浏览器发送的数据 req = flow.request.get_text() #截取password字段的加密字段值 result = req.split("&")[2].split("=")[1] #打印password字段的加密字段值 ctx.log.info("浏览器请求数据 => "+result) #对password字段的加密字段值进行解密 missing_padding = len(result) % 4 if missing_padding: result += '=' * (4 - missing_padding) data = base64.b64decode(str(result).encode()).decode() #打印解密后的数据 ctx.log.info("解密后的数据 => " + data) #重组Payload new_req = req.split("password")[0]+"password="+data #发送Payload flow.request.set_text((new_req))
addons = [MyAddon(),]

编写好脚本之后,需要配置好代理,代理配置如下

客户端浏览器代理转发给下游代理  代理端口为7070
下游代理代理转发给Burpsuite   代理端口为8080

浏览器代理配置

50f36f0ccebdd063f263edf6951b2c58.jpeg

mitmdump代理配置

mitmdump -p 7070 -s de.py --mode upstream:http://127.0.0.1:8080 --ssl-insecure

7bb826087af1916a54c7d0220488dac6.jpeg

Burpsuite代理配置

2f2e6db3763febfbaecb951079d88bb2.jpeg

配置好,我们重新进行抓包,可以看到已经可以成功解密数据,直接在Burpsuite里进行明文显示了

7c7e11dd986a0acee63d57d9dd8a779a.jpeg

f637c2798d0dd584471d20ebc76f2731.jpeg

提交之后,会提示Login failed!

2a5dcfb305ff6de81aa862d6030bf7bd.jpeg

其实口令admin、admin是正确的,只不过我们提交password已经是明文的admin了,后面还会对这个admin进行解密,导致解密后的口令就不再正确了,所以我们还需要在Burpsuite把数据提交给服务端服务器之前,重新把数据给加密回来。

所以在Burpsuite到服务端我们走的一条流程就如下

10d51ef055b1ca5f88cc24f1787eca71.jpeg

那么我们可以进行编写如下脚本

en.py

from mitmproxy import ctximport base64

class MyAddon(): def request(self,flow): # 服务端host if flow.request.host=="www.xj.com": req = flow.request.get_text() ctx.log.info("浏览器请求数据 => " + req) result = req.split("&")[2].split("=")[1] ctx.log.info("匹配前 => " + result) data = base64.b64encode(result.encode('utf-8')).decode('utf-8') ctx.log.info("加密后数据 => " + data) #重新组合payload new_req = req.split("password")[0]+"password="+data ctx.log.info("最终payload => " + new_req) flow.request.set_text(new_req)

addons = [MyAddon(),]

编写好脚本之后,之前的代理配置不需要改变,额外在Burpsuite里配置一个上游代理

Burpsuite代理配置

b1de095e3386a5c366cdf2ed925ea6ce.jpeg

mitmdump代理配置

mitmdump -p 9090 -s en.py --ssl-insecure

eb568771ccf85e4bd614423ff4544714.jpeg

配置好后,抓包提交

26cadc82843c60593b138acd3b5c1c03.jpeg

至此,整个测试流程就跑通了。

当然我们这里的只演示了上面请求流程

d4b983015c6cb45b4888e55a91a56a77.jpeg

下面的响应流程我们也可以更具业务需求在脚本的response方法里编写相应流程代码即可。




总结



本文结合渗透测试JS前端加密情况下的实战场景,利用mitmproxy解决了本地加解密测试繁琐的痛点,达到了编写完加解密脚本之后与Burpsuite前后建立代理直接在Burpsuite进行测试的效果。




本文作者


易安联玄影实验室(原高级攻防实验室),是易安联https://www.enlink.top/为落实公司发展战略,促进网络空间安全生态建设,孵化下一代安全能力,进行高级别的攻防对抗研究而组建的专业性安全实验室。推出的威胁情报和天织DNS威胁分析平台,可以为用户提供高效的威胁防护能力,帮助用户更好地应对各类网络威胁。



https://mp.weixin.qq.com/s/aZ-QZJIfYLJ1T5bputUfYw



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

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

相关文章

自然语言处理--双向匹配算法

自然语言处理作业1--双向匹配算法 一、概述 双向匹配算法是一种用于自然语言处理的算法,用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。 在双向匹配算法中,首先将两个文本分别进行处理,然后…

使用Docker部署Apache Superset结合内网穿透实现远程访问本地服务

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透,实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

操作系统导论-课后作业-ch14

1. 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h>int main() {int *i NULL;free(i);return 0; }执行结果如下&#xff1a; 可见&#xff0c;没有任何报错&#xff0c;执行完成。 2. 执行结果如下&#xff1a; 3. valgrind安装使用参考&a…

决策树的基本构建流程

决策树的基本构建流程 决策树的本质是挖掘有效的分类规则&#xff0c;然后以树的形式呈现。 这里有两个重点&#xff1a; 有效的分类规则&#xff1b;树的形式。 有效的分类规则&#xff1a;叶子节点纯度越高越好&#xff0c;就像我们分红豆和黄豆一样&#xff0c;我们当然…

UI设计中的插画运用优势(下)

6. 插画赋予设计以美学价值&#xff0c;更容易被接受 即使所有人都在分析和争论产品的可用性和易用性&#xff0c;大家在对美的追求上&#xff0c;始终保持着一致的态度。一个设计是否具备可取性&#xff0c;是否能够通过甲方、客户和实际用户&#xff0c;是每个设计人都需要面…

微服务Spring Cloud架构详解

"Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spring Cloud开…

c++QT文件IO

1、QFileDialog文件对话框 与QMessageBox一样&#xff0c;QFileDialog也继承了QDialog类&#xff0c;直接使用静态成员函数弹窗。弹出的结果&#xff08;选择文件的路径&#xff09;通过返回值获取。 1&#xff09;获取一个打开或保存的文件路径 // 获取一个打开或保存的文件路…

快速上手的AI工具-文心辅助学习

前言 大家好晚上好&#xff0c;现在AI技术的发展&#xff0c;它已经渗透到我们生活的各个层面。对于普通人来说&#xff0c;理解并有效利用AI技术不仅能增强个人竞争力&#xff0c;还能在日常生活中带来便利。无论是提高工作效率&#xff0c;还是优化日常任务&#xff0c;AI工…

MySQL>基础sql语句

阅读目录 1.进入数据库2.数据库操作&#xff08;增删改查用&#xff09;3.表操作(增删改查)4.语句操作(增删改查) 回到顶部 1.进入数据库 打开终端,输入&#xff1a; /usr/local/mysql/bin/mysql -uroot -p回车 输入密码&#xff1a; 回到顶部 2.数据库操作&#xff08;增…

FSCaptureSetup最新版下载与安装详细步骤,内附注册码

FSCaptureSetup FastStone Capture&#xff1a;功能强大且使用方便的截图软件一、使用方法二、常用功能 关注公众号&#xff1a;数据探索者007或扫描如下所示二维码回复07获取资源压缩包减压后如下所内容解压后按照如图所示操作进行安装 FastStone Capture&#xff1a;功能强大…

代码随想录算法训练营29期|day27 任务以及具体安排

39. 组合总和// 剪枝优化 class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> res new ArrayList<>();Arrays.sort(candidates); // 先进行排序backtracking(res, new ArrayList&…

ARM_Linux中GCC编译器的使用

目录 前言: GCC编译过程: 预处理&#xff1a; 编译阶段&#xff1a; 汇编&#xff1a; 链接阶段 GCC的常见使用 前言: 什么是GCC: gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Co…

linux之安装配置VM+CentOS7+换源

文章目录 一、centos07安装二、CentOS 07网络配置2.1解决CentOS 07网络名不出现问题此博主的论文可以解决2.2配置&#xff08;命令: 【ip a】也可查看ip地址&#xff09; 三、使用链接工具链接CentOS进行命令控制四、换软件源 一、centos07安装 1、在vmvare中新建虚拟机 2、下…

charles mac抓包unknown问题

第一步&#xff1a;mac上安装Charles后&#xff0c;mac安装证书&#xff1a; 第二步&#xff1a;mac上信任证书 第三步&#xff1a;手机上安装证书 安装提示&#xff1a;电脑上通过help–>SSLProxying–> Install Charles Root Ceriticate on a Mobile Device or Remote …

微信小程序从入门到进阶(二)

数据请求 wx.request发起网络请求&#xff0c;请求的方式主要分为两种&#xff1a; get 请求 post 请求 // get请求 // html <view><button type"primary" bindtap"onGetClick">发起 get 请求</button> </view> // js // inde…

redis 入门及相关知识汇总

什么是 Redis &#xff1f; 1&#xff0c;相对于mysql &#xff0c;oracle &#xff0c; 这种关系西数据库&#xff0c; 我们还有非关系数据库服务&#xff0c;他的产生是为了&#xff0c;解决常规数据库的并发能力&#xff0c;传统的关系型数据库受限于IO 和性能瓶颈&#xff…

xshell可以远程登录服务器但是vscode一直显示让输入密码的解决方案

vscode报错 但是xshell可以登录 原因&#xff1a;可能因为我上一次没有恰当的退出远程链接导致的&#xff0c;我每次退出远程都是直接强制关闭VScode。 解决方法&#xff1a;打开VScode的 view &#xff08;查看&#xff09; palette&#xff08;命令面板&#xff09;然后输…

[AutoSar]BSW_OS 06 Autosar OS_Alarms

一、 目录 一、关键词平台说明一、Timer1.1 配置1.2Periodical Interrupt Timer (PIT)和High Resolution Timer (HRT) 二、Alarm 工作机制三、Code3.1创建一个15ms的runnable3.2mapping到basic task3.3生成代码 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueO…

还在用JS?过来看看GS

什么是GS&#xff1f;GS是我自创的一门编程语言&#xff0c;全名叫“GreatScript”&#xff0c;是一门类型化语言&#xff0c;可以编译成JavaScript。简单来说&#xff0c;就是又一门TypeScript。 GreatScript的生态位跟Typescript&#xff0c;CoffeeScript&#xff0c;ReScri…

ZigBee学习(一)

文章目录 一、ZigBee介绍二、IEEE 802.15.42.1 物理层2.2 MAC层2.3 如何实现网络和设备寻址2.4 能量管理 三、ZigBee网络拓扑结构四、ZigBee配置参数 一、ZigBee介绍 ZigBee是一种基于IEEE 802.15.4标准的高级通信协议&#xff0c;它被设计用于低速率、低功耗和短距离无线通信&…