FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法

一、提问
上次写过一篇文章 , 那篇文章主要是是针对移动应用进行加解密处理的 , 今天我们要说的是WEB端的加解密处理方式 。
大家在进行WEB渗透测试的时候 , 有没有像我一样遇到这样的问题?
下图可以看到发送的数据和接收到数据都是密文 , 应该都是通过加密变形 , 这样给我们进行渗透测试的时候 , 带来了很大的麻烦 。
FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
文章图片
今天我找到了一款神器(Burpy) , 通过这个神器的处理后 , 对密文进行右键点击解密后 , 就会显示明文 。
FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
文章图片
在重放的区域 , 修改要发送的内容 , 进行加密后 , 可以直接进行渗透测试 。
FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
文章图片
完成了以上的内容后 , 我们就可以开开心心的进行渗透测试了 。
二、必备工具操作系统: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中的数据进行处理了 。 这个功能很不错 , 给作者点个赞 。
FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
文章图片
四、WEB调试步骤1、打开要调试的js脚本 , 发现js脚本被压缩了 , 我用的是chrome流量器 , 可以点一下那个红色的框(prettyprintf)浏览器就会自动给我们把格式对齐
FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
文章图片
2、对齐格式后 , 在我们需要的地方下断点 , 点击运行 , 浏览器就会在相应的地方停止等待我们调试 , 一步步的走下来 , 就会来到加密解密的js代码 。
FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
文章图片
3、我们已经走到了 , 加密解密的方法了 , 从下图可以看出明文显示着使用的是AES的加密算法(iv/mode/padding)都一目了然 。
FreeBuf|用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
文章图片
五、python代码(加密、解密)key=‘1234567812345678’我们就可以使用python代码进行加密和解密了 。
关键代码:
key='1234567812345678'mode=AES.MODE_CBCiv=b'abcdefabcdef'cryptos=AES.new(key,mode,iv)b64_text=base64.b64encode(text)printb64_textpad_pkcs7=pad(b64_text.encode('utf-8'),AES.block_size,style='pkcs7')cipher_text=cryptos.encrypt(pad_pkcs7)returnhexlify(cipher_text)key='1234567812345678'iv=b'abcdefabcdef'mode=AES.MODE_CBCcryptos=AES.new(key,mode,iv)pad_pkcs7=pad(text,AES.block_size,style='pkcs7')plain_text=cryptos.decrypt(a2b_hex(text))printplain_textresult=base64.b64decode(plain_text)returnresult.decode('utf-8')defencrypt(self,header,body):_new_body=encrypt(body)defdecrypt(self,header,body):_new_body=decrypt(body)returnheader,_new_body六、成果展示1.右键点击解密后 , 可以看到发送的真是内容: