返回介绍

Unicode 介绍

发布于 2025-01-03 23:32:53 字数 813 浏览 0 评论 0 收藏 0

理解什么是 unicode 很重要. 假设有一个程序接受用户的输入,如果用户是比利时或美国字符编码可能不会有什么影响,因为我们(通常) 使用同样的字符集. 然而,如果用户用的是阿拉伯或中文字符集会怎么样呢? 显然它们不能用 ASCII 转换成相应语言. 如果软件开发者希望开发国际化的产品,不免要面对 unicode. 基本上 unicode 用一致方式直观表示大多数的字符集(ASCII 7 位表示 unicode 16 位表示). Unicode 字符代码:这里

我们猜想 unicode 类似于使用有限字符集(更多的在后面). 当我们利用这类型的漏洞是,传进去的字符会被传化为 unicode. 一般上仅仅在原始字节的前面追加 0x00. 看这面这个例子:

ASCII:
A  ==> 0x41

Unicode:
A  ==> 0x0041

2-bytes:
AB ==> 0x4142   (ASCII)
AB ==> 0x00410042 (Unicode)

显然这是一个大问题,像之前我们用于覆盖 EIP 的地址都会被转化为 unicode. 更别提 Shellcode 了(=头痛). 因此很长一段时间内人们普遍认为 uniocde 的漏洞不能利用. 然而, 2002 Chris 的一篇文章证明这是错的. 为了细致的分析 unicode 漏洞利用原理我推荐你看 Phrack 在 2003 年发的这篇文章. 大概对 unicode 利用最显著的贡献是 SkyLined 发布的编码器(alpha2), 他可以生成兼容 unicode 的 Shellcode. 更多细节在后面。

上面的介绍会使我们的漏洞利用更清晰. 再次说明这篇教程不会覆盖所有的系列,你还需要做更多的研究. 好吧,开始我们的旅途!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文