freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

抓包改包存包,有它就够了!
2024-06-17 01:30:18

序言

在安全测试或者日常工作中,你是否会遇到需要要对HTTP(S)包进行改包回放、数据储存的场景?这时你通常会选择使用Wireshark、BurpSuite、Charles等工具,但是这些工具都无法提供灵活的协议数据替换和自定义存储能力。如果你想要通过配置或者脚本来实现自定义、可拓展的请求响应修改和全量协议数据的存储,那就来试试这个工具吧!

关于SWProxy

这是一款基于mitmproxy(python3)的极简代理工具,支持HTTP和HTTPS协议,能够通过代理配置(不限数量)或者自定义脚本(不限数量)实现URL、请求头、请求体、响应头、响应体中的任意数据的修改,以及Web请求的全量数据存储(当前版本数据仅可存储在mysql或sqlite中)。能够很方便的进行Web测试和详细的数据分析,同时也很容易将存储数据用在其他工具中。

功能介绍

安装

  1. 安装python(3.7)、mysql(8+)环境
  2. 下载代码git clone https://github.com/r00tlin/swporxy.git
  3. 安装第三方库pip3 install -r requirements.txt
  4. 导入自定义/mitmproxy证书(否则无法在https场景中使用!!!),可以参考文档:https://www.jianshu.com/p/036e5057f0b9


配置

  1. 自定义你的项目配置,对应的文件在项目路径/config.yaml,可以配置代理端口、数据库账号等信息
  2. 自定义你的代理配置,对应的文件在项目路径/httpproxy.json。具体的编写方法可以参考文档:项目路径/httpproxy.json.md


运行

终端执行命令:python3 SWProxy.py
根据配置的不同,代理可以实现通过直接配置模式和脚本模式,对请求/响应进行替换或存储,下面就针对用法进行详细说明。

a. 直接配置模式

替换规则

  1. 编写配置文件
{
  "replace": [
    {
      "id": 1,
      "point":"reqbody",
      "match":"你好",
      "replace":"好的",
      "ignorecase": true,
      "count": 0
    }
  ]
}
  1. 启动代理python3 SWProxy.py
  2. 结果展示

存储规则

  1. 编写配置文件
{
  "store": [
    {
      "id": 1,
      "point":"url",
      "match":"ppp",
      "store":"url|reqheader|rspbody",
      "ignorecase": true,
      "count": 1
    }
  ]
}
  1. 启动代理python3 SWProxy.py
  2. 结果展示(展示项目中数据选用的是mysql,通过配置也可以指定sqlite3,截图来自于mysqlworkbence)

b. 脚本模式

替换规则

  1. 编写配置文件
{
  "replace": [
    {
      "id": 1,
      "script":"ReplaceUA"
    }
  ]
}

具体脚本见:项目目录/scripts/ReplaceUA.py(python脚本)

  1. 启动代理python3 SWProxy.py
  2. 结果展示,访问httpbin.org网站进行测试,该网站能够返回详细的请求头请求体信息

存储规则

  1. 编写配置文件
{
  "store": [
    {
      "id": 1,
      "script":"StoreData"
    }
  ]
}

见项目目录/scripts/StoreData.py(python脚本)

  1. 启动代理python3 SWProxy.py
  2. 结果展示(展示项目中数据选用的是mysql,通过配置也可以指定sqlite3,截图来自于mysqlworkbence)

img.png

结果分析

1. 当代理配置为存储规则时,数据库中会记录匹配到的请求和响应信息。表中的数据可以通过配置文件进行修改(选择存储哪列的字段),所有存储的数据可以通过数据库客户端、代码进行进一步的分析。

2. 当代理配置为替换时,代理会直接将请求/响应替换成目标字符串,并完成该次请求。

实战演练

演练目标:寻找网站中所有jsonp的接口

演练过程:

  1. 首先根据目标分析,仅需要需要寻找接口,不需要很复杂的数据处理和计算逻辑,所以选择直接配置模式-存储规则即可。同时需要的存储的数据仅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】

# 工具 # burpsuite # web安全 # 代理 # HTTP
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录