序言在安全测试或者日常工作中,你是否会遇到需要要对HTTP(S)包进行改包回放、数据储存的场景?这时你通常会选择使用Wireshark、BurpSuite、Charles等工具,但是这些工具都无法提供灵活的协议数据替换和自定义存储能力。如果你想要通过配置或者脚本来实现自定义、可拓展的请求响应修改和全量协议数据的存储,那就来试试这个工具吧!
关于SWProxy这是一款基于mitmproxy(python3)的极简代理工具,支持HTTP和HTTPS协议,能够通过代理配置(不限数量)或者自定义脚本(不限数量)实现URL、请求头、请求体、响应头、响应体中的任意数据的修改,以及Web请求的全量数据存储(当前版本数据仅可存储在mysql或sqlite中)。能够很方便的进行Web测试和详细的数据分析,同时也很容易将存储数据用在其他工具中。
功能介绍安装安装python(3.7)、mysql(8+)环境下载代码git clone https://github.com/r00tlin/swporxy.git安装第三方库pip3 install -r requirements.txt导入自定义/mitmproxy证书(否则无法在https场景中使用!!!),可以参考文档:https://www.jianshu.com/p/036e5057f0b9
配置自定义你的项目配置,对应的文件在项目路径/config.yaml,可以配置代理端口、数据库账号等信息自定义你的代理配置,对应的文件在项目路径/httpproxy.json。具体的编写方法可以参考文档:项目路径/httpproxy.json.md
运行终端执行命令:python3 SWProxy.py根据配置的不同,代理可以实现通过直接配置模式和脚本模式,对请求/响应进行替换或存储,下面就针对用法进行详细说明。
a. 直接配置模式
替换规则
编写配置文件{
"replace": [
{
"id": 1,
"point":"reqbody",
"match":"你好",
"replace":"好的",
"ignorecase": true,
"count": 0
}
]
}启动代理python3 SWProxy.py结果展示
存储规则
编写配置文件{
"store": [
{
"id": 1,
"point":"url",
"match":"ppp",
"store":"url|reqheader|rspbody",
"ignorecase": true,
"count": 1
}
]
}启动代理python3 SWProxy.py结果展示(展示项目中数据选用的是mysql,通过配置也可以指定sqlite3,截图来自于mysqlworkbence)
b. 脚本模式
替换规则
编写配置文件{
"replace": [
{
"id": 1,
"script":"ReplaceUA"
}
]
}具体脚本见:项目目录/scripts/ReplaceUA.py(python脚本)
启动代理python3 SWProxy.py结果展示,访问httpbin.org网站进行测试,该网站能够返回详细的请求头请求体信息
存储规则
编写配置文件{
"store": [
{
"id": 1,
"script":"StoreData"
}
]
}见项目目录/scripts/StoreData.py(python脚本)
启动代理python3 SWProxy.py结果展示(展示项目中数据选用的是mysql,通过配置也可以指定sqlite3,截图来自于mysqlworkbence)
结果分析1. 当代理配置为存储规则时,数据库中会记录匹配到的请求和响应信息。表中的数据可以通过配置文件进行修改(选择存储哪列的字段),所有存储的数据可以通过数据库客户端、代码进行进一步的分析。
2. 当代理配置为替换时,代理会直接将请求/响应替换成目标字符串,并完成该次请求。
实战演练演练目标:寻找网站中所有jsonp的接口
演练过程:
首先根据目标分析,仅需要需要寻找接口,不需要很复杂的数据处理和计算逻辑,所以选择直接配置模式-存储规则即可。同时需要的存储的数据仅url(记录接口)、respbody(检查是否符合预期),所以最终产生的规则如下:{
"store": [
{
"id": 1,
"point": "rspbody",
"match": "^\\w+\\s*\\(\\s*(\\{.*\\}|null)\\s*\\)\\s*;?$",
"store": "url|rspbody",
"ignorecase": true,
"count": 1
}
]
}2. 运行代理工具,并使用chrome浏览器SwitchyOmega插件设置好代理,然后正常访问浏览器。这里作者使用https://im.qq.com/index/、https://www.jd.com/进行测试。
3. 查看数据中记录的接口数据
总结:该示例仅展示了工具实用性的一部分,使用者可以根据自身需要,通过配置和脚本编写复杂的协议处理与数据计算方法。也可以与多进程/线程、协程结合完成丰富的测试需求,同时对于存储数据也高度可定制,方便与其他工具结合使用。
项目地址GitHub:【SWPorxy】