利用 Unicode 溢出绕过字符阻止列表

admin 2025年2月10日20:48:30评论12 views字数 729阅读2分25秒阅读模式

利用 Unicode 溢出绕过字符阻止列表

利用 Unicode 溢出绕过字符阻止列表

Unicode 代码点截断(也称为Unicode 溢出攻击)是指服务器尝试将 Unicode 字符存储在单个字节中。由于字节的最大值为 255,因此可以构造溢出来生成特定的 ASCII 字符。

以下是几个以 0x41 结尾(代表 A)的示例:

0x4e41 0x4f41 0x5041 0x5141

如果对上面的代码点执行模数运算,你会看到它们产生字符“A”:

String.fromCodePoint(0x4e41 % 256, 0x4f41 % 256, 0x5041 % 256, 0x5141 % 256) // AAAA

不仅字节存在此问题,JavaScript 本身在fromCharCode()方法中也存在代码点溢出。此方法允许您生成 0-0xffff 之间的字符,但如果超出此范围,它将溢出并生成溢出量的字符。

String.fromCharCode(0x10000 + 0x31, 0x10000 + 0x33, 0x10000 + 0x33, 0x10000 + 0x37)

//1337

上述代码使用十六进制值 0x10000,该值比该fromCharCode()方法支持的最大代码点高 1。然后我向其添加一个溢出,在本例中,每个代码点的十六进制为 1337。然后当溢出发生时,它会产生 1337。

漏洞赏金猎人正在积极使用这种方法, Ryan Barnett提醒我们注意了这一点。为了方便大家,我们在ActiveScan++中添加了这些截断攻击,感谢 Ryan 的 PR,我们创建了一个Hackvertor 标签来帮助重现这些字符。非常感谢我的同事Zak ,我和他一起调查了这个问题。我们还更新了Shazzer unicode 表以显示潜在的 unicode 截断字符。

利用 Unicode 溢出绕过字符阻止列表

原文始发于微信公众号(Ots安全):利用 Unicode 溢出绕过字符阻止列表

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月10日20:48:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用 Unicode 溢出绕过字符阻止列表https://cn-sec.com/archives/3689337.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息