主页 > 网络知识 > 用BurpSuit的Burpy插件搞定WEB端中的JS加密算法

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

上次写过一篇文章,那篇文章主要是是针对移动应用进行加解密处理的,今天我们要说的是WEB端的加解密处理方式。

大家在进行WEB渗透测试的时候,有没有像我一样遇到这样的问题?

下图可以看到发送的数据和接收到数据都是密文,应该都是通过加密变形,这样给我们进行渗透测试的时候,带来了很大的麻烦。

 

1591609852_5ede09fc15364.png!small

 

今天我找到了一款神器(Burpy),通过这个神器的处理后,对密文进行右键点击解密后,就会显示明文。

 

1591609868_5ede0a0c5bf1d.png!small

 

在重放的区域,修改要发送的内容,进行加密后,可以直接进行渗透测试。

 

1591609882_5ede0a1a91d70.png!small

 

完成了以上的内容后,我们就可以开开心心的进行渗透测试了。

二、 必备工具

操作系统: 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中的数据进行处理了。这个功能很不错,给作者点个赞。

 

1591610033_5ede0ab148ce4.png!small

 

四、WEB调试步骤

1、打开要调试的js脚本,发现js脚本被压缩了,我用的是chrome流量器,可以点一下那个红色的框(pretty printf)浏览器就会自动给我们把格式对齐

 

1591610064_5ede0ad0d33ff.png!small

 

2、对齐格式后,在我们需要的地方下断点,点击运行,浏览器就会在相应的地方停止等待我们调试,一步步的走下来,就会来到加密解密的js代码。

 

1591610077_5ede0adde3ad1.png!small

 

3、我们已经走到了,加密解密的方法了,从下图可以看出明文显示着使用的是AES的加密算法(iv/mode/padding)都一目了然。

 

1591610095_5ede0aefea887.png!small

 

五、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,)   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,) 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. 右键点击解密后,可以看到发送的真是内容:

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!