整数溢出如何被利用?

wun*_*tee 21 security exploit integer-overflow

有没有人详细解释如何利用整数?我已经阅读了很多关于这个概念的内容,我理解它是什么,我理解缓冲区溢出,但我不明白如何可靠地修改内存,或者以修改应用程序流的方式,通过使一个大于它定义的记忆....

小智 17

它肯定是可以利用的,但当然取决于具体情况.

旧版本ssh有一个整数溢出,可以远程利用.该漏洞导致ssh守护进程创建大小为零的哈希表,并在尝试在其中存储某些值时覆盖内存.

关于ssh整数溢出的更多细节:http://www.kb.cert.org/vuls/id/945216

关于整数溢出的更多细节:http://projects.webappsec.org/w/page/13246946/Integer%20Overflows


Ira*_*ter 11

我在60年代后期在IBM 360/40上使用了APL/370.APL是一种语言,其中基本上所有东西都是多维数组,并且存在用于操纵数组的惊人操作符,包括从N维重构为M维等.

不出所料,N维数组的索引边界为1..k,每个轴的 k值不同.而且k在法律上总是小于2 ^ 31(32位有符号机器字中的正值).现在,N维的数组在内存中分配了一个位置.使用对于轴来说太大的索引来尝试访问数组插槽将针对APL的数组上限进行检查.当然,这适用于N维的数组,其中N == 1.

APL没有检查你是否用RHO(数组重塑)运算符做了一些非常愚蠢的事情.APL仅允许最多64个维度.因此,您可以创建1-64维的数组,如果数组维度小于2 ^ 31,则APL会执行此操作.或者,您可以尝试制作65个维度的数组.在这种情况下,APL傻逼,并且令人惊讶地回馈了64维阵列,未能检查轴尺寸.(这在"整数溢出发生"的情况下有效).这意味着你可以创建一个轴大小为2 ^ 31或更大的数组......但是被解释为有符号整数,它们被视为负数.

应用于这样一个数组的右RHO运算符咒语可以将dimensionaly减小到1,其上限为,得到这个"-1".将这个矩阵称为"虫洞"(你会在一瞬间看到原因).这样的虫洞阵列在内存中占有一席之地,就像任何其他阵列一样.但是所有数组访问都是根据上限检查的......但是数组绑定检查结果是由APL 的无符号比较完成的.因此,您可以无异议地访问WORMHOLE [1],WORMHOLE [2],... WORMHOLE [2 ^ 32-2].实际上,您可以访问整个机器的内存.

APL还有一个数组赋值操作,您可以在其中使用值填充数组.WORMHOLE [] < - 0因此将所有内存归零.

我只做了一次,因为它擦除了包含我的APL工作区的内存,APL解释器,以及显然启用分时的APL的关键部分(当时它没有受到用户保护)......终端室来自它在机械上非常嘈杂的正常状态(我们有2741个Selectric APL终端)在大约2秒钟内无声静音.通过玻璃进入计算机房我可以看到操作员抬头看着370上的灯,因为他们全都出去了.随之而来的是大量的奔跑.

当时很有趣,我闭嘴.

经过一些小心,显然可以以任意方式篡改操作系统.