freeBuf
用BurpSuit的Burpy插件搞定WEB端中的JS加密算法
2020-07-02 21:42:49

一、提问

上次写过一篇文章,那篇文章主要是是针对移动应用进行加解密处理的,今天我们要说的是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, 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. 右键点击解密后,可以看到发送的真是内容:

1591610233_5ede0b791cf4e.png!small

2. 修改完要发送的内容,然后点击加密,

1591610238_5ede0b7e7e5d4.png!small

3. 点击加密后会自动变成加密后的内容,就可以直接进行渗透测试。

1591610244_5ede0b845fbdd.png!small

七、总结

本文通过一个案例,介绍了如何对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

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏