0%
毅种循环

返回

邮件钓鱼攻防工程·5:无链接投递与 QR 码Blur image

本文是「邮件钓鱼攻防工程」系列的第 5 篇。篇幅不长:其实没啥好说的了,所以单纯拎二维码投递链路实现开个坑。


0x01 设计原点:危险不一定住在 URL 里#

1.1 SEG 流水线的隐含公理#

主流邮件安全网关(无论是 SpamAssassin/Rspamd 思路的开源栈,还是 Defender / Proofpoint 一类商业 SEG)在「链接类威胁」上,常见是同一条流水线:

MIME 拆包 文本/HTML URL 信誉 / 沙箱 / 重写
bash

Part 3 的贝叶斯与 NLP,加在这条流水线的内容评分侧;Part 4/5 讨论点击之后钓鱼站怎么活。整条链有一个很少写进需求文档的前提:

威胁载体最终会以「字符串形式的 URL」出现在可解析的邮件层里。

「无链接投递」不是修辞,而是对这条公理的否定。否定至少有2种工程形态

形态信任从哪迁到哪网关「抽 URL」是否还在主路径上
日历 / .ics邮件客户端 → 日历库 → 系统通知常常不在:入口是 text/calendar 或附件
二维码桌面渲染环境 → 手机相机与蜂窝出口在图里:有 URL,但不在文本抽取层

payload 形态和持久性都不同。再次之前,可以先聊一下Exchange日历钓鱼。

image 1785951301 002
image 1785951301 002


0x02 日历通道:CalPhishing(日历钓鱼)#

2.1 iCalendar / iMIP 在邮件里长什么样#

RFC 5545 定义日历对象;经邮件投递时常用 iMIP(RFC 6047)。MIME 上典型是:

Content-Type: text/calendar; method=REQUEST; charset="UTF-8"
bash

或把 .ics 当附件。核心是 VEVENTMETHOD:REQUEST 表示请把这件事当作会议请求处理。

攻击者利用 iCalendar(.ics)文件,能在部分客户端/租户策略下,把未充分验证的会议推进用户日历(例如 Outlook 侧常见「暂定」一类呈现)。用户有没有删原邮件是一回事;邀请是否已经进入日程服务是另一回事

2.2 为什么这比附件里藏 exe 更难防#

传统附件威胁模型是:附件 = 潜在可执行 / 宏 / 脚本 → 沙箱检测。.ics 大部分情况被归类为结构化数据,走日历解析器,不走附件威胁主路径。

更麻烦的是持久性:

  • 用户删除原邮件,不等于删除日历项;

  • 桌面删了,手机同步可能还在。

2.3 实现层风险:CVE-2025-27915#

日历通道不只有社工。2025 年公开的 CVE-2025-27915(Zimbra Classic Web Client)是对日历相关内容消毒不足导致的存储型 XSS,已被用于定向活动,并进入 CISA KEV。公开报道将其与恶意 .ics 投递路径联系在一起。

工程含义:

  • .ics 在「实现有洞」时可以是 RCE / 会话面风险,不只是弹窗社工;

0x03 二维码:控制面被物理切开#

3.1 迁出模型#

用户在办公 PC 看信,掏出手机扫码——几秒内发生:

桌面(常:EDR / AV / 企业代理)
  相机扫码

手机(常:无 EDR / 移动网络 / 个人机)


落地页 / 钓鱼站
bash

二维码在检测上的位置是:

  • 有 URL,所以不是真·无链接;

  • URL 不在文本层,所以对抽 <a href> 的 SEG 主路径是盲点;

  • 打开动作发生在另一套控制面,桌面侧 EDR / AV / 代理策略可能全部看不到真正打开落地页的那一跳。

image 1785951301 001
image 1785951301 001

3.2 taigong 的实现方案#

工程上分两截,对应两种演练姿势:

  1. 发信嵌入:模板字段 qrsize(JSON qrsize)非空则生成二维码;models/qr_code.goskip2/go-qrcode 出 PNG → base64;EmailRequestQRBase64 有值时追加 image/png 附件(vanillaFile)。

  2. 钓鱼站即时出图/qrcodeQRHandler),受 EnableQRCode 控制;关闭时与未知流量一样走伪装 404/跳转(与 Part 4 未知流量哲学一致)。

已实现未实现
把追踪 URL(或你配置的内容)编成标准 QR 图并发出HTML table / Unicode 画码生成器
用附件或内嵌图 / /qrcode 承载码
自动 PDF 嵌码流水线
落地页仍走盲搜 RID、两段式等后续能力默认「手机专属自适应」全家桶

image 1785951301 003
image 1785951301 003

0x04 结束#

Part 3/4 默认「点的是邮件里的链」。本篇是无链接投递,把检测面从客户端放到移动端上。 后面应该还会有一篇LLM多态化生成文案模板的引擎介绍,别的应该不会再写了(没有大更新的前提下,现有的能力基本也够用了。)


系列导航