用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
一、提问
上次写过一篇文章,那篇文章主要是是针对移动应用进行加解密处理的,今天我们要说的是WEB端的加解密处理方式。
大家在进行WEB渗透测试的时候,有没有像我一样遇到这样的问题?
下图可以看到发送的数据和接收到数据都是密文,应该都是通过加密变形,这样给我们进行渗透测试的时候,带来了很大的麻烦。
今天我找到了一款神器(Burpy),通过这个神器的处理后,对密文进行右键点击解密后,就会显示明文。
在重放的区域,修改要发送的内容,进行加密后,可以直接进行渗透测试。
完成了以上的内容后,我们就可以开开心心的进行渗透测试了。
二、 必备工具
操作系统: WIN10_X64
BurpSuit: 渗透神器,如果你还不知道这个,那么只能说明你不是圈内人,赶快去百度一下吧。
Burpy(Ver:1.2.5): 一个可以让你能够在Burpsuite中运行自己指定python脚本的插件。
写这个插件的原因是因为这样我可以在Burpsuite里面直接执行python,尤其是当需要对一些明文数据进行RSA加密之后再发送给服务器的时候。
正如前面所说,使用这个插件时,我们可以写一个python小脚本来进行RSA加密,并指定一个公钥,这样我们就可以直接在Burp里面得到加密之后的结果,可以省去在命令行/工具界面 和 Burp 界面复制粘贴的麻烦。
GitHub:https://github.com/mr-m0nst3r/Burpy
Python2.7: 我使用的是Python2.7。
三、 burpy的原理
burpy的原理是通过PyRO来连接burpsuit与python,可以让你能够在Burpsuite中运行自己指定python脚本。这样可以使用python来对burpsuit中的数据进行处理了。这个功能很不错,给作者点个赞。
四、WEB调试步骤
1、打开要调试的js脚本,发现js脚本被压缩了,我用的是chrome流量器,可以点一下那个红色的框(pretty printf)浏览器就会自动给我们把格式对齐
2、对齐格式后,在我们需要的地方下断点,点击运行,浏览器就会在相应的地方停止等待我们调试,一步步的走下来,就会来到加密解密的js代码。
3、我们已经走到了,加密解密的方法了,从下图可以看出明文显示着使用的是AES的加密算法(iv/mode/padding)都一目了然。
五、python代码(加密、解密)
根据调试,收集到AES相关的参数如下:
key = ‘1234567812345678’
iv = ‘abcdefabcdef’
mode = CBC
padding = Pkcs7
我们就可以使用python代码进行加密和解密了。
关键代码:
# 加密过程
def encrypt(text):
key = '1234567812345678'
mode = AES.MODE_CBC
iv = b'abcdefabcdef'
cryptos = AES.new(key, mode, iv)
b64_text = base64.b64encode(text)
print b64_text
pad_pkcs7 = pad(b64_text.encode('utf-8'), AES.block_size, style='pkcs7')
cipher_text = cryptos.encrypt(pad_pkcs7)
return hexlify(cipher_text)
# 解密过程
def decrypt(text):
key = '1234567812345678'
iv = b'abcdefabcdef'
mode = AES.MODE_CBC
cryptos = AES.new(key, mode, iv)
pad_pkcs7 = pad(text, AES.block_size, style='pkcs7')
plain_text = cryptos.decrypt(a2b_hex(text))
print plain_text
result = base64.b64decode(plain_text)
return result.decode('utf-8')
class Burpy:
def encrypt(self, header, body):
_new_body = encrypt(body)
return header, _new_body
def decrypt(self, header, body):
_new_body = decrypt(body)
return header, _new_body
六、成果展示
1. 右键点击解密后,可以看到发送的真是内容:
2. 修改完要发送的内容,然后点击加密,
3. 点击加密后会自动变成加密后的内容,就可以直接进行渗透测试。
七、总结
本文通过一个案例,介绍了如何对WEB端的js脚本进行调试并找到加密算法;然后介绍了如何使用burpy插件,对已经找到的算法进行还原。让我们在进行渗透测试的时候,节省了不少时间。
具体的案例代码我放到了github上:https://github.com/yearnwang/Burpy_web_decode
有什么问题大家可以随时留言给我或者Email给我。
八、参考文献
Burpy:连接你的BurpSuite和Pythonhttps://www.freebuf.com/sectool/231825.html
用BurpSuit的Brida自定义插件搞定加密签名算法https://www.freebuf.com/sectool/236911.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用darknet框架的imagenet数据分类预训练操作
- php两点地理坐标距离的计算方法
- tp5(thinkPHP5)框架连接数据库的方法示例
- CI框架附属类用法分析
- ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
- PHP封装的page分页类定义与用法完整示例
- Swoole实现异步投递task任务案例详解
- Keras预训练的ImageNet模型实现分类操作
- 通过实例解析Python RPC实现原理及方法
- PHP实现的支付宝支付功能示例
- 为Plesk PHP7启用Oracle OCI8扩展方法总结
- PHP模版引擎原理、定义与用法实例
- python如何查看安装了的模块
- Linux下源码包安装Swoole及基本使用操作图文详解
- python实现简易版学生成绩管理系统