烽火戏诸侯tyq
- 关注

1. 实现原理
Burpsutie 通过上游代理将请求转发给mitmproxy代理,mitmproxy通过加、解密脚本实现对数据的加、解密后,将请求转发给服务器
2. 实现目标
- 可对请求的数据加、解密
- 可对响应的数据加、解密
3. Mitmproxy 环境安装
pip install mitmproxy
4. 环境配置
- mitmproxy启动命令
方式1:mitmproxy.exe -p 8888 -s md5.py
方式2:mitmweb.exe -p 8888 -s md5.py
说明:-p 指定监听端口,-s 指定加载脚本,也就是加、解密的脚本
- burpsuite配置upsteream proxy servers
配置上游代理,mitmproxy代理的地址及端口
5. MD5加密实例
请求包:
POST /login_check.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 60
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=1
m=1&username=admin&password=21232f297a57a5a743894a0e4a801fc3
通过请求可判断加密是md5
MD5脚本:
# -*- coding: utf-8 -*-
from mitmproxy import http, ctx
import hashlib
def md5_encryption(pwd):
md5 = hashlib.md5()
md5.update(pwd.encode('utf-8'))
md5_pass = md5.hexdigest()
return md5_pass
class MD5:
def request(self,flow: http.HTTPFlow)-> None:
#获取请求POST数据,如m=1&username=admin&password=admin
data = flow.request.text
#将数据以'='分切成数组,如['m', '1&username', 'admin&password', 'admin']
d = data.split('=')
#通过md5_encryption加密方法对明文密码加密
md5_pass = md5_encryption(d[3])
#将加密后的密文重新赋值给数组
d[3] = md5_pass
#将数组元素重新变成post字符串格式
data = '='.join(d)
#将加密后data数据赋值给flow.request.text
flow.request.text = data
#info = ctx.log.info
#info(data)
def response(self,flow: http.HTTPFlow):
# 获取响应对象
response = flow.response
# 实例化输出类
info = ctx.log.info
# 打印响应码
info(str(response.status_code))
# 打印所有头部
info(str(response.headers))
# 打印cookie头部
info(str(response.cookies))
# 打印响应报文内容
info(str(response.text))
addons = [MD5()]
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)