【SRC】使用Punycode编码同形异义词攻击利用实现零点击账号劫持

admin 2026-03-03 06:33:12 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文详解利用Punycode编码实施零点击账号劫持的攻击手法。攻击者通过注册含视觉相似Unicode字符的邮箱,利用系统规范化缺陷,在密码重置环节劫持账号。文中展示了利用BurpSuite的具体步骤、绕过二次验证技巧及强化邮箱验证、统一标准化流程等修复方案,指出该漏洞在SRC挖掘中极具价值。 综合评分: 85 文章分类: WEB安全,SRC活动,渗透测试,漏洞分析


cover_image

【SRC】使用Punycode编码同形异义词攻击利用实现零点击账号劫持

原创

coffinxp coffinxp

Z2O安全攻防

2026年2月24日 21:03 北京

引言

国际化域名(IDN)同形异义词,利用的是不同语言中外观几乎完全相同的字符,比如拉丁语的字母a和西里尔语的字母а。从表面上看,这样的域名或邮箱地址与正常地址毫无差别,但背后实则是用外观相似但技术层面完全不同的Unicode字符做了替换。

举个例子: Unicode编码邮箱:а[email protected](西里尔语а) Punycode编码格式:[email protected]

当邮件服务商、身份验证流程等系统无法正确区分这些视觉相似的字符时,就会引发严重的安全漏洞。这包括用户注册、密码重置环节的账号劫持,甚至能绕过二次验证保护机制,若未妥善修复,将带来极高的安全风险。

Punycode编码与IDN同形异义词攻击的区别

什么是Punycode编码?

Punycode编码是一种仅通过ASCII字符集表示Unicode字符的方式,能让不直接支持Unicode的系统(如域名系统)也实现兼容。

示例:

1. Unicode编码邮箱а[email protected](含西里尔语а)转换为Punycode编码后为:
2. [email protected]

对大多数系统而言,这只是另一个合法的邮箱地址。

什么是IDN同形异义词攻击?

这类攻击会欺骗系统(有时也会欺骗用户),让其认为两个视觉相似的字符序列完全相同,但实际上二者在底层逻辑中截然不同。

示例:

1. "[email protected]"与"а[email protected]"(含西里尔语а)

看起来是不是一模一样?

实验环境搭建与所需工具

  • 渗透测试工具Burp Suite:用于拦截和修改HTTP请求
  • Burp Collaborator:搭建专属的简单邮件传输协议/邮件回调服务器
  • Punycode编码生成器:实现Unicode字符的编码转换

本漏洞验证实验无需准备国际化域名或简单邮件传输协议服务器,仅使用Burp Suite即可模拟完整攻击流程。

漏洞利用步骤全解析

以下将结合Voorivex团队搭建的实验环境,从简单的用户注册到完成完整的账号劫持,为大家分步拆解攻击流程。

步骤一:使用正常邮箱完成注册

进入任意支持邮箱注册的目标网站(任意登录页面均可),使用常规邮箱注册新账号。为接收邮件回调信息,我们将使用Burp Collaborator作为伪造的简单邮件传输协议服务器,示例邮箱地址如下:

1. [email protected]

验证账号功能可用性

注册完成后,使用该账号信息登录,确认账号功能正常,随后退出账号。

步骤二:在邮箱中植入Punycode编码字符,重新注册

再次进行注册操作,此次需在邮箱地址中加入Punycode编码字符。你可以使用我开发的脚本,该脚本会展示所有可用的Punycode编码字符及其对应编码值,只需输入需要转换的字母,即可自动生成对应的Punycode编码。 脚本地址:

1. https://github.com/coffinxp/scripts/blob/main/punycode_gen.py

我在实验中仅通过自研的Punycode编码生成器,将邮箱域名中的字母a替换为了à。你也可以通过Punycode在线解码工具(如https://www.punycoder.com/)验证转换结果。

步骤三:通过Burp Suite拦截请求并替换为Punycode编码内容

这里有个关键要点:Chrome等浏览器会自动对特殊字符进行编码,导致攻击手段失效。因此需要通过Burp Suite拦截注册请求,手动将请求中的邮箱字段替换为Punycode编码后的邮箱地址,再转发该请求。

查看重复邮箱的响应结果

若服务器返回“邮箱已存在”这类提示,说明应用系统经过标准化处理后,将原始邮箱与Punycode编码的邮箱判定为同一个地址。这是系统配置错误的明确信号,也意味着该系统存在潜在的安全漏洞。

步骤四:通过Punycode编码邮箱触发密码重置流程

进入目标网站的“忘记密码”或密码重置页面,输入Punycode编码后的邮箱地址。此操作仍需通过Burp Suite完成,避免字符被浏览器自动编码,示例地址如下:

1. security@gmàil.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com

步骤五:完成账号劫持

转发上述请求后,你会在Burp Collaborator中收到包含密码重置链接的邮件回调信息。复制该链接并在浏览器中打开,完成密码重置操作。

随后尝试使用原始的非Punycode编码邮箱,搭配刚重置的新密码登录。

至此,账号劫持成功。这是不是你见过的最简洁且最具破坏性的账号劫持手段?整个过程无需用户交互、无需钓鱼诱导、无需用户点击任何链接,仅通过巧妙利用Punycode编码的邮箱地址即可实现。也正因如此,该漏洞被列为高危漏洞,一旦在主流网站中发现此类漏洞,漏洞提交者能获得高额的漏洞赏金。

进阶手段:在邮箱用户名段植入Punycode编码

前文我们探讨了域名段的邮箱标准化处理不当引发的账号劫持问题,而如果漏洞出现在邮箱的用户名段,攻击手段会更加隐蔽。

多数开发人员不会对邮箱的本地用户名部分做完善的Unicode字符清洗处理,这就给了攻击者可乘之机。

攻击原理与步骤

  1. 使用经Punycode编码修改后的用户名注册账号,示例地址:
1. ṡ[email protected]
  1. 依旧通过Burp Suite拦截并修改注册请求(浏览器会默认对Unicode字符编码,需手动干预)。
  2. 若服务器接受该邮箱地址并完成账号注册,说明第一步攻击成功。
  3. 进入“忘记密码”页面,此次输入用户名段为非Punycode编码的原始邮箱地址:
1. [email protected]
  1. 若能在Burp Collaborator中收到密码重置邮件,即可确认服务器将两个邮箱判定为同一个账号。

通过收到的重置链接完成密码修改后,就能使用原始邮箱登录目标账号。这一通过邮箱本地用户名段实现的零点击账号劫持,同样具有极强的破坏性。

小技巧:绕过二次验证

如果目标网站开启了二次验证,但对邮箱的标准化处理存在漏洞(例如将gmáil.com判定为gmail.com),攻击者可注册victim@gmáil.com账号并开启二次验证,随后使用自己的二次验证验证码,登录受害者的[email protected]账号。

修复方案:开发人员如何防范此类攻击

  1. 强化邮箱验证规则:仅允许邮箱输入框中出现ASCII字符(可通过正则表达式或输入清洗类库实现)。
  2. 统一邮箱地址标准化处理流程:将Unicode字符转换为ASCII字符(如调用IDN.toASCII()方法或同类功能接口),并在所有业务流程中执行统一的标准化处理。
  3. 非必要情况下屏蔽国际化域名与Punycode编码域名:拒绝接收包含Punycode编码前缀的域名邮箱(如xn--example),除非应用系统明确支持国际化域名。
  4. 在注册、登录、密码重置流程中应用统一的验证逻辑:确保所有环节的邮箱验证与对比采用相同的处理逻辑,避免出现逻辑不一致导致的漏洞或绕过问题。

结语

基于Punycode编码的国际化域名攻击,是现代漏洞赏金挖掘中最精妙、最被低估且杀伤力极强的账号劫持手段之一。掌握合适的工具并建立对应的安全思维,你就能发现许多人忽略的高危安全漏洞。

翻译自:https://infosecwriteups.com/the-most-underrated-0-click-account-takeover-using-punycode-idn-attacks-c0afdb74a3dc


建了个src专项圈子,内容包含src漏洞知识库src挖掘技巧src视频教程等,一起学习赚赏金技巧,以及专属微信群一起挖洞

圈子专注于更新src相关:

1、维护更新src专项漏洞知识库,包含原理、挖掘技巧、实战案例2、分享src优质视频课程3、分享src挖掘技巧tips4、小群一起挖洞

图片

图片

图片


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Z2O安全攻防 coffinxp coffinxp《【SRC】使用Punycode编码同形异义词攻击利用实现零点击账号劫持》

评论:0   参与:  0