Integer Overflow
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
在 整数溢出 的核心是计算机编程中数据类型的 大小 所施加的限制和数据的 解释。
例如,一个 8 位无符号整数 可以表示从 0 到 255 的值。如果你尝试将值 256 存储在 8 位无符号整数中,由于其存储容量的限制,它会回绕到 0。同样,对于一个 16 位无符号整数,它可以容纳从 0 到 65,535 的值,将 1 加到 65,535 会将值回绕到 0。
此外,一个 8 位有符号整数 可以表示从 -128 到 127 的值。这是因为一个位用于表示符号(正或负),剩下的 7 位用于表示大小。最小的负数表示为 -128(二进制 10000000
),最大的正数是 127(二进制 01111111
)。
对于潜在的 网络漏洞,了解最大支持值是非常有趣的:
打印的结果将是 0,因为我们溢出了 char:
考虑一种情况,其中从用户输入中读取一个有符号整数,然后在一个将其视为无符号整数的上下文中使用,而没有进行适当的验证:
在这个例子中,如果用户输入一个负数,由于二进制值的解释方式,它将被解释为一个大的无符号整数,这可能导致意外行为。
仅使用1B来存储密码的大小,因此可能会发生溢出,使其认为长度为4,而实际上是260,以绕过长度检查保护
给定几个数字,使用z3找出一个新数字,使其与第一个数字相乘将得到第二个数字:
仅使用1B来存储密码的大小,因此可能会发生溢出,使其认为长度为4,而实际上是260,以绕过长度检查保护并在栈中覆盖下一个局部变量,从而绕过这两种保护
这在ARM64中没有变化,正如你在这篇博客文章中看到的。
学习和实践AWS黑客技术:HackTricks培训AWS红队专家(ARTE) 学习和实践GCP黑客技术:HackTricks培训GCP红队专家(GRTE)