Replace/remap 服务器响应 body,同时保留大多数原始 header 字段提供给浏览器

Replace/remap server response body while preserving most of original header fields served to browser

如何替换远程服务器返回给浏览器的特定文件 body,但主要保留原始响应 header unchanged/intact/unaffected/unaltered/untouched? (我不知道在这种情况下哪个英语单词最好,所以请:解决我的问题!) 这可能可以使用渗透测试代理(Burp、OWASP ZAP、Charles、Fiddler、Paros 等)来完成,但我找不到合适的选项来将响应 body 映射到本地文件 body 而不会丢失重要信息header 个字段(Set-CookieContent-Type 等)。使用正则表达式模式仅重写 body 的一部分没有问题。重新映射整个文件(基于 URL)也没有问题,但是,它会生成一个新的 header 而不是复制服务器返回的原始文件。我知道我的本地文件可能与服务器上的文件大小不同,因此 Content-Length 字段应由代理更改。 header 中可能还有其他字段应由渗透测试工具修改,但 Set-CookieContent-Type 和其他一些选定字段以及所有自定义字段(如前缀为X-) 应该保留。

我应该为这些工具编写扩展程序或某种脚本吗?如果是这样,那么我可以搜索所选工具的 API 参考,但是我应该选择哪种渗透测试工具来用我最喜欢的语言 Python 编写?任何指向为此目的所需的特定 API 的帮助将不胜感激。这个脚本应该:

上面的列表表明需要 API 的哪些元素来指出我。理想情况下,如果在任何工具中都有用于描述任务的嵌入式选项,但如果不存在此类选项,那么 API 我应该学习在 Python 和 API 中编写哪个工具的代码我应该特别注意的部分?由于可移植性,所选工具不应依赖于 .NET(因此在这种情况下使用 Fiddler 将是一个问题)。 Java-dependent 工具还可以,因为使用可移植的 Java 运行时环境没有问题。

是的,您可以使用 OWASP ZAP 做到这一点。

ZAP 支持许多脚本语言,包括 python(实际上是 jython;)。 您可以使用代理脚本更改与请求和响应有关的任何内容。您可以完全访问有关请求和响应的所有信息、所有 ZAP 功能和您的本地文件存储。

我们这里有一些例子:https://github.com/zaproxy/community-scripts/tree/master/proxy None 个示例实际上使用 python,但 https://github.com/zaproxy/community-scripts/tree/master/payloadgenerator 中有一个示例 python 脚本 您将需要安装 python 脚本附加组件,其中包括必要的模板:https://github.com/zaproxy/zap-extensions/wiki/HelpAddonsJythonJython

如果您有关于 ZAP 脚本的具体问题,我们专门为此设立了一个小组:http://groups.google.com/group/zaproxy-scripts