抓包改包存包,有它就够了!

2024-06-22 283 0

序言

在安全测试或者日常工作中,你是否会遇到需要要对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)

抓包改包存包,有它就够了!插图3

结果分析

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】


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

如何使用CODASM编码Payload并降低熵值
SessionExec:一款针对会话安全的安全命令测试工具
Arkime:一款大规模数据包捕获和索引数据库系统
从蓝队流量角度分析Shiro-550反序列化漏洞
万字长文浅谈三高系统建设方法论和实践
你遇到过哪些奇葩面试题目;如何考察渗透测试与安全管理能力| FB甲方群话题讨论

发布评论