前言 最近工作中一直在使用mitmproxy
和burpsuite
进行自动化加解密,因此记一下笔记。
环境部署 python3 python
尽量选择高版本,不然安装后运行mitmproxy
会提示windows
无法使用mitmproxy
mitmproxy安装 通过指定清华源进行下载部署
1 pip3 install mitmproxy -i https://pypi.tuna.tsinghua.edu.cn/simple
安装过程应该是无报错,出现报错需要升级python
的版本
运行mitmproxy
证书安装 文件资源管理器直接访问这个目录
1 C:\Users\%USERNAME%\.mitmproxy\
双击mitmproxy-ca.p12
进行安装
安装过程中,直接都是下一步,密码不填写,证书颁发机构选择受信任的根证书颁发机构
然后就安装成功了
如果想检查证书
浏览器直接访问
1 chrome://certificate-manager/localcerts/platformcerts
可以看见证书是安装进去了
mitmproxy脚本编写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 from mitmproxy import ctxfrom Crypto.Cipher import AESfrom Crypto.Util.Padding import padfrom Crypto.Util.Padding import unpadimport base64key = b"XXXXX" Key = key.decode('utf-8' ) iv = b"XXXXX" def aes_encrypt (data ): print ('执行了加密' ) cipher = AES.new(key, AES.MODE_ECB) padded_data = pad(data.encode('utf-8' ), AES.block_size, style='pkcs7' ) encrypted_data = cipher.encrypt(padded_data) return base64.b64encode(encrypted_data).decode('utf-8' ) def aes_decrypt (data ): print ('执行了解密' ) cipher = AES.new(key, AES.MODE_ECB) encrypted_data = base64.b64decode(data) decrypted_padded_data = cipher.decrypt(encrypted_data) decrypted_data = unpad(decrypted_padded_data, AES.block_size, style='pkcs7' ) return decrypted_data.decode('utf-8' ) class ReplayBreakdown : def __init__ (self ): pass def request (self, flow ): if "www.example.com" == flow.request.host: data = flow.request.get_text() if data: encoded_data = base64.b64encode(data.encode()).decode() ecrypt_data = aes_encrypt(encoded_data) new_body = b'info=' +ecrypt_data.encode() flow.request.content = new_body def response (self, flow ): if "www.example" == flow.request.host: print (flow.response.content) decrypt_data = aes_decrypt(flow.response.content) print (decrypt_data) flow.response.content = base64.b64decode(decrypt_data) addons = [ReplayBreakdown()]
脚本运行 1 mitmproxy --listen-port 8086 -s test1.py
burpsuite设置
测试 没运行脚本前,请求和响应均是加密状态。
添加代理后,已经能将响应数据进行解密。
注意点
python得高版本
如果加密后的请求数据中请求的内容类型(content-type)是raw类型,即使加密前的数据是json格式,那也要设置成raw,不然会发送失败。即burpsuite请求里面的数据和content-type不一定得一致。