在本例中,我们将分析一个伪装成Netflix并采用实时控制受害者机制的网络钓鱼活动。 这并非普通的静态HTML表单,而是一套功能齐全的钓鱼服务:用户需经历多个阶段,而攻击者则通过控制面板决定将其引导至下一步——输入登录名、信用卡信息、短信验证码、PIN码,还是在应用中进行确认。
此外,我们通过获取访问权限并研究该钓鱼网站的控制面板,独立验证了其运作机制。
本文虽未详细描述获取控制台访问权限的方法,但将其存在本身作为运营模式的佐证:攻击是通过后端界面以手动或半自动方式进行的。
0. 诱饵

用户收到的第一封邮件采用了标准的社会工程学策略,要求用户采取行动。攻击者试图引起用户注意,声称其喜爱的电视节目观看权限可能会被暂停。 为了绕过邮件过滤器并隐藏最终的钓鱼域名,攻击者利用社交网络X的基础设施生成了一条短链接: https://t.co/XXXXXXX
乍看之下,这似乎是一个普通的链接,通过 t.co,因此无论对用户还是某些自动过滤器而言,看起来都较不显眼。
点击后,用户不会立即跳转到主要钓鱼页面。首先会被引导至一个中间资源。
1. 公共 S3 存储桶作为中间重定向服务器
该链接指向一个公共 S3 存储桶: https://access-authority-2faXXXXX.s3.eu-north-1.amazonaws.com/index.html
这一环节兼具过滤和重定向的功能。
index.html 其中包含针对特定国家和预先已知 IP 地址的过滤机制。这使得真正的钓鱼网站不会被研究人员、自动扫描器、沙箱及安全防护系统察觉。
通过过滤后,用户会收到一个简单的 HTML 重定向:
<meta http-equiv="refresh" content="1;url=https://www.XXXXX.help/index.html">
该域名伪装成一个验证码(CAPTCHA)解决服务。这是一个方便的掩护:用户看到技术名称后,可能会以为这是浏览器的中间验证、验证码或安全验证。

实际上,这是一种网络钓鱼基础设施。
在此阶段,设备指纹识别工作已悄然展开。代码会收集用户事件:
- mousemove
- touchmove
- keyup
- Backspace
- deviceorientation
该脚本不仅分析事件本身,还分析其参数:
- 移动速度;
- 事件之间的间隔;
- 归一化坐标;
- 方向变化的陡峭度;
- 键盘行为;
- 设备方向;
- 触摸/鼠标配置文件。
这些数据用于评估访问者是否为真实人类。
遥测数据的混淆与“加密”
部分遥测数据在发送前会通过AES-CBC进行加密: crypto.subtle.encrypt({ name: 'AES-CBC', iv: ... }, key, data)
代码中包含反调试逻辑。脚本会从 debugger ,并通过 new Function()。如果执行出现延迟,页面会向 /misc/index.php?r=<random> ,并传入参数 bcl
这似乎是试图判断用户是否打开了开发者工具,或者JavaScript执行是否在断点处被暂停;后端可能会改变行为,隐藏真实的流程,并显示错误,或者将用户重定向到正规的Netflix网站。
成功通过“验证码”后,将重定向至 main/prepare.php
2. 第一阶段:收集用户名和密码

攻击的第一个实际阶段既不是信用卡,也不是短信。首先,用户会被引导至一个模仿 Netflix 登录界面的页面。
在此阶段,攻击者会收集用户的电子邮件和密码。
这一点很重要:攻击首先从窃取账户信息开始,随后才转向支付数据。
提交POST表单后,页面会将用户引导至下一阶段——“支付卡验证”。
因此,即使后续的支付步骤未完成,攻击者也已获得宝贵的成果:对账户的访问权限。
3. 第二阶段:输入卡片信息

输入用户名和密码后,用户会被重定向至支付验证页面。
在此阶段,该攻击场景模拟了需要验证与 Netflix 绑定的信用卡的情况。用户会看到一个类似于正规计费流程的界面,并输入支付信息。
此阶段的目标是收集:
- 持卡人姓名
- 卡号
- 有效期
- CVV/CVC
在此过程中会持续发送遥测数据:

4. 第三阶段:加载界面及等待客服

输入卡片信息后,用户将进入等待页面。我们在分析的样本中看到的正是这个HTML页面。
页面提示:
需要进行额外验证才能完成您的卡片验证
您将收到一条发往手机的短信……
从视觉上看,这与通常等待银行确认的情况并无二致。但从技术角度而言,这不仅仅是一个“等待界面”,而是用户会话被保留的节点——在此期间,后端或客服人员正在决定应显示下一步操作。
5. 通过 WebSocket 进行实时控制

主要控制机制是 WebSocket。我们可以注意到请求底部有一个打开的 wss:// 。页面连接到 WebSocket 并等待后端发来的指令。HTML 中嵌入了逻辑,操作员可通过该逻辑将用户引导至不同的界面:
| 代码 | 路径 | 描述 |
|---|---|---|
| 1 | ./app.php | 银行应用中的确认请求页面 |
| 2 | ./payment.php | 因错误而再次请求输入卡片信息 |
| 3 | ./sms.php | 输入短信验证码页面 |
| 4 | ./pin.php | 输入卡片PIN码页面 |
| 5 | https://netflix.com | 重定向至真正的Netflix网站 |
用户输入的卡片信息会自动或半自动地被用于在不同商户处进行支付。这些商户极有可能是被攻击者控制的。
正是在这一环节,实时组件变得尤为危险。攻击者可以察觉支付系统请求了何种验证方式,并据此调整钓鱼页面以适应攻击的具体时机。时而要求在应用内进行验证,时而索要短信验证码,时而索要卡片PIN码。
6. 通过管理后台进行验证
在研究了钓鱼网站的运作机制后,我们决定寻找该管理面板的漏洞。在此过程中,我们还从该面板的创建者那里收到了相当奇怪的“彩蛋”。

根据日志记录可以确认,在24小时内,至少有4位不同的管理员以4至7小时为间隔登录了该管理面板。
此外,我们还发现控制面板上存在2082、2095、8880、1010等额外开放端口,这使我们得以查明真实的IP地址——毕竟诈骗网站是隐藏在CloudFlare后面的。
已向相关网络服务提供商发出通知。
7. 系统遭入侵的迹象
域名
*.solvecaptcha.help
8. 结论
此次攻击活动展示了现代钓鱼服务如何将普通的登录页面转变为可实时操控的攻击行动。
攻击者首先获取用户名和密码,随后获取支付信息,之后将用户困在加载界面中。 此时,操作员会通过后端/管理面板决定显示下一步操作:短信验证码、PIN码、应用内确认,还是最终重定向至真正的Netflix。
该骗局的主要技术特征是WebSocket控制。正是这一技术使攻击具有交互性,并允许操作员根据具体受害者和具体的银行流程调整攻击脚本。
这已不再是“钓鱼页面”。这是一场实时钓鱼攻击。