专栏名称: 黑伞安全
安全加固 渗透测试 众测 ctf 安全新领域研究
目录
相关文章推荐
北京厚朴中医  ·  今晚19:00直播 | 筑基开课指北 ·  17 小时前  
北京厚朴中医  ·  厚朴电子日历 | 早 ·  4 天前  
北京厚朴中医  ·  樱花季,在厚朴汤河原学堂来一次身与心的对话 ·  4 天前  
北京厚朴中医  ·  今晚19:00直播 | 肩痛非药物攻略 ·  4 天前  
51好读  ›  专栏  ›  黑伞安全

高效处理流量加解密——Burpy

黑伞安全  · 公众号  ·  · 2020-12-29 18:00

正文



做项目时,如果遇到上面的流量,是不是觉得有点无从下手?

今儿就看下如何使用 Burpy 来高效处理流量加解密。

Burpy

先来地址: Github: https://github.com/mr-m0nst3r/Burpy

直接在 Release 下载下来,加载到 BurpSuite

它本身的功能很简单,就是执行我们指定的python脚本,而python脚本能用来干啥,你可以百度一下(你能想到的,基本都能做到)。

大概的实现是这样的:

启动一个RPC服务器,作为Java和Python之间的数据交换桥梁

解析python脚本,并新建Burpy类的一个实例

将脚本中的 一些 函数加载到BurpSuite右键菜单

当点击Burpy菜单项时,整个HTTP数据包通过RPC传给python脚本的对应函数进行处理,返回处理后的HTTP数据包,并更新BurpSuite

分析目标

这是个 Webpack 之后的H5界面,前端使用VueJS编写的:

我们将上面的几个JS脚本文件下载到本地,使用 prettier 进行美化格式之后,用VS Code打开,然后查找 encrypt

大概看了一下, Wn.a.encrypt 是加密函数, Wn.a.decrypt 是解密函数。

解密时有两个参数,K1和K2,K1就是密文,K2是通过一个计算(md5)K1变换之后与提交的K2是否相等,如果相等就进行解密,是一个解密带签名的操作。

加密时,将数据进行加密之后进行 base64 编码,构造K2的值,然后构造数据包。

ModuleRaid.js

这个工具脚本的功能不详,不过提供了一个非常有用的方法: findModule

用浏览器打开目标网站,F12打开检查,将ModuleRaid.js复制到 console 里面,回车,我们就能通过 window.mR 来使用它了。


思路

我们已经可以从浏览器中正常加解密数据了,但是如果让我们在浏览器/BurpSuite中间复制来粘贴去的,这活我干不了,想想都头疼。这时候就是Burpy大显身手的时候了。

我们不需要在python里面实现这个算法是如何实现的,不需要使用python重写加密和解密代码,只需要直接调用就好了。

但直接调用的时候,就像上面,是在浏览器中啊,怎么办? selenium

我们要达到的目的是:

轻轻一点,解密出来,修改数据包

再轻轻一点,加密,点击GO发送

再轻轻一点,解密,看看返回包

或者更好一点:

一点解密,修改数据包

点GO,自动加密

收到返回包之后自动解密出来显示在BurpSuite里

第二种情况下,加密解密已经透明了。

值得高兴的是,这些功能,Burpy都支持。

编写脚本

Burpy脚本的框架在Github里面有,各位自己看一下,很简单明了。
直接上代码:

#coding:utf-8
# 下载chromedriver,并指定路径
# 安装 selenium
# 下载moduleraid,并指定路径

from selenium import webdriverimport jsonimport hashlib

chromeExec = "/usr/bin/chromedriver"url = "https://xxxx.com/yyyy/zzzz"
class Burpy: def __init__(self): """ this is called from the start of PyRo4 service, so init webdriver here """ option = webdriver.ChromeOptions() option.add_argument('headless') self.driver = webdriver.Chrome(executable_path=chromeExec, chrome_options=option) self.driver.implicitly_wait(20) self.driver.get(url) self.k1 = '' self.k2 = '' self.k3 = ' h5 '
try: js = self._load_js() self.driver.execute_script(js) except Exception as e: print("Failed to load MouldueRaid JS") print(e) def __del__(self): self.driver.quit()
def _load_js(self): jsFilePath = r"/home/m0nst3r/tools/moduleraid.js" # jsFilePath = "E://moduleraid.js" with open(jsFilePath) as f: jsContent = f.read() return






请到「今天看啥」查看全文