跳到主要内容

功能发布:MITM 流量替换/染色/标记与免配置启动 Chrome

· 阅读需 5 分钟
Yak ProjectYak Project

Intro

在用户量逐渐变多的时候,很多用户提出了更加贴近实战的需求:

  1. HaE 有 Yakit 支持吗?(Inspired HaE by @gh0stkey)

  2. 测试的时候如何避免其他网站的干扰?

我们十分感谢用户的深度使用,这些非常贴近大家实战的需求,是需要一点一点积累的。实际在早些时候,Yakit 已经增加了针对替换 / 染色 / 标记的支持;上线之后并没有做详细介绍,灰度测试一段时间之后,功能相对趋于稳定。

02

MITM 替换 / 染色 / 标记

实际在 HTTP History 的使用中,我们会在 History 花费非常多的时间,寻找可用于测试或者感兴趣的数据包,同时在一些数据安全测试场景中,我们需要检查数据包的内容

  1. 是否有敏感数据?(?i)access_?key 这类命中?

  2. 能否标记一下 document.write 这类危险 JS 操作(DOM XSS)

  3. 替换掉敏感信息:比如我的手机号和 ID 不想让他出现在流量中

  4. ....

Memmet

技术实现

*

*

虽然表面上,Match & Replace 大家可能会觉得,这非常简单,不就是 strings.ReplaceAll 的事儿嘛?其实远没有这么简单,这是一个非常考验 MITM 技术细节实现的功能

  1. 能否正确识别并解码 chunked 数据包?

  2. 能否正常解码 gzip / flate / zlib-flate 等数据?

  3. 在解码之后,能否正确修复数据包的 Headers?

  4. 在修复了数据包之后,可以对 Response 进行替换,在替换之后,能否合理修复数据包 Content-Length

  5. 在 UTF8 作为通用编码的情况下,遇到 GBK / GBxxx 情况应该怎么处理?

  6. ...

在解决了上面这些细节之后,我们还实现了很多应用层面的功能

  1. 针对 Header / Body 进行可配制化的处理

  2. 替换功能的启动与关闭

  3. 标记与染色是否会对 “Header / Body” 分别生效?

  4. 标记了的 Tag 如何展示到 HTTP History 中?

在配置了上面内容之后,我们作为日常使用访问一些网页的时候,将会看到 Yakit MITM 通过配置的规则,将命中的规则进行染色,并且把追加 Tag 填在了 History 中,标注出这个响应 / 请求的 History 的补充属性

Memmet

如何使用:导出,导入,编辑规则

*

*

在启动 MITM 之前,我们就可以配置这些规则,当然,我们也可以在 MITM 劫持过程中动态修改。

如何编辑规则 / 如何导入现有规则

编写规则的部分采用 Golang 风格正则表达式:推荐使用 https://regex101.com/ 调试,规则如果编译失败,则自动降级为关键字匹配。

如何添加规则并配置?

在视频中我们做了如下操作:

  1. 添加一个 gstatic 规则,把所有有关这个的字段标注为 Google GStatic 并且设置为绿色

  2. 使用浏览器随意搜索内容,查看 History 中关于 Google GStatic 相关的记录

导出规则:分享给你的朋友!

到此用户应该可以熟练使用 Yakit MITM 的这个新功能了,但是独乐乐不如众乐乐,如果你写了非常棒的规则,如何把它分享给你的朋友呢?

我们在操作界面选择 “导出配置 / 导出为 JSON” 即可进入这个配置,复制或者另存为文件均可!

当然,你也可以脱离 Yakit 自己编写 JSON 规则,然后导入到 MITM 中!这些都是被允许的

Memmet

细节说明

*

*

  1. 这些规则是针对代理全流量的,不光会对用户在 History 看到的过滤后的请求生效,对一些已经被过滤掉的 JS 或者静态文件都是生效的,编写简单规则务必明确场景
  2. 规则的执行顺序是有意义的
  3. 规则基于 Golang 风格正则 / Glob / 关键字,采取降级策略:即如果无法编译为正则,将会最后被降级为 “关键字” 匹配。
  4. 替换后的数据包将会被自动修复,用户不需担心数据包毁坏协议

03

不配置证书也能抓 HTTPS?

其实这是一个 “标题党”,不过通过启动 Chrome 的时候设置一些参数,我们确实可以实现这个功能,核心原理其实非常简单,我们给 Chrome 启动增加一些 “不安全参数” 即可实现:

根据这个最朴素的想法, 我们把它做成了接口比较友好的界面:

当启动之后,会提示用户确认配置,并提示用户潜在风险:

当用户明确这个配置之后,将可以启动这个功能

如何使用免证书配置浏览器?

Memmet

细节说明

*

*

  1. Yakit 关闭的时候,通过 Yakit 启动的浏览器会自动关闭
  2. 浏览器暂时并没有继承用户的各种信息(为了安全考虑),这个是可以配置的
  3. 慎重在浏览器配置中进行日常生活的操作,避免安全问题

04


本文首发于 Yak Project 公众号,阅读原文