一、提问
上次写过一篇文章,那篇文章主要是是针对移动应用进行加解密处理的,今天我们要说的是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相关的参数如下:
代码语言:javascript复制key = ‘1234567812345678’
iv = ‘abcdefabcdef’
mode = CBC
padding = Pkcs7
我们就可以使用python代码进行加密和解密了。
关键代码:
代码语言:javascript复制# 加密过程
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)
代码语言:javascript复制# 解密过程
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