使用类似的 Unicode 字符绕过身份验证

GitHub上 转身 容易受到允许您通过操纵电子邮件中的 Unicode 字符来获取帐户访问权限的攻击。 问题在于,某些 Unicode 字符在使用小写或大写转换函数时,会被翻译为样式相似的常规字符(当多个不同的字符被翻译为一个字符时 - 例如,土耳其语字符“ı”和“i”) " 当转换为大写时将转换为“I”)。

在某些服务和应用程序中检查登录参数之前,用户提供的数据首先被转换为大写或小写,然后在数据库中检查。 如果服务允许在登录名或电子邮件中使用 unicode 字符,则攻击者可以使用类似的 unicode 字符来执行操纵 Unicode 大小写映射冲突中的冲突的攻击。

'ß'.toUpperCase() == 'ss'.toUpperCase() // 0x0131
'K'.toLowerCase() == 'K'.toLowerCase() // 0x212A
'John@Gıthub.com'.toUpperCase() == '[电子邮件保护]'.toUpperCase()

GitHub 上的攻击者 可能 通过用于恢复忘记密码的表单,通过在表单中​​指示包含导致冲突的 unicode 字符的地址(例如,而不是 [电子邮件保护] 已指定电子邮件 mı[电子邮件保护])。 该地址通过了测试,因为它被转换为大写并且与原始地址匹配([电子邮件保护] ),但是在发送信件时,它被按原样替换,并且恢复代码被发送到假地址(mı[电子邮件保护]).

一些 人物,在转换寄存器时引起冲突:

ß 0x00DF SS
0x0131 我
ſ 0x017F S
ff 0xFB00 FF
Ø 0xFB01 FI
FL 0xFB02 FL
ffi 0xFB03 FFI
ffl 0xFB04 FFL
ſt 0xFB05 ST
st 0xFB06 ST
K 0x212A k

来源: opennet.ru

添加评论