找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3515

积分

0

好友

483

主题
发表于 20 小时前 | 查看: 1| 回复: 0

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

举个例子:

  • Unicode编码邮箱:аdmin@example.com(西里尔语а)
  • Punycode编码格式:xn--dmin-7cd@example.com

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

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

什么是Punycode编码?

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

示例:

Unicode编码邮箱аdmin@example.com(含西里尔语а)转换为Punycode编码后为:
xn--dmin-7cd@example.com

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

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

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

示例:

“admin@example.com”与“аdmin@example.com”(含西里尔语а)

看起来是不是一模一样?正是这种视觉欺骗性,使其成为安全测试中需要重点关注的攻击向量。

实验环境搭建与所需工具

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

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

漏洞利用步骤全解析

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

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

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

security@gmail.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com

用户注册表单截图

验证账号功能可用性

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

用户个人资料界面截图

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

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

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

Punycode生成器脚本运行结果

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

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

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

Burp Suite拦截HTTP请求截图

查看重复邮箱的响应结果

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

邮箱已存在错误提示界面

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

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

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

密码重置请求输入界面

步骤五:完成账号劫持

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

Burp Collaborator收到的SMTP回调信息

设置新密码界面

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

登录成功界面

劫持后的用户资料界面

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

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

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

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

攻击原理与步骤

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

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

小技巧:绕过二次验证

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

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

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

结语

基于Punycode编码的国际化域名攻击,是现代漏洞赏金挖掘中最精妙、最被低估且杀伤力极强的账号劫持手段之一。掌握其原理并善用Burp Suite等工具,你就能发现许多人忽略的高危安全漏洞。希望这篇实战解析能为你带来启发,更多技术讨论欢迎访问云栈社区进行交流。

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




上一篇:大众点评默认开启相册分析权限:技术实现、隐私风险与手动禁用指南
下一篇:Seata迁移实战:从AT到TCC的改造指南与避坑要点
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-25 21:48 , Processed in 0.364507 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表