我必须在运行glibc-2.9的64位系统中验证一个漏洞。
http://scarybeastsecurity.blogspot.in/2011/02/i-got-accidental-code-execution-via.html
上面的链接提供了一个脚本,当传递一个幻数时,显然会导致任意代码执行。但当我在我的系统上尝试时,似乎什么都没有发生。
我做错什么了吗?如果存在漏洞,系统会崩溃吗?如何检测是否是意外代码执行?

最佳答案

如果要在64位计算机上遇到问题,则必须模拟原始代码,但提供一个数字,将堆栈包装在64位计算机上。提供的原始号码是:
1073741796个

$ bc
z=1073741796
z+28
1073741824
(z+28)*4
4294967296
2^32
4294967296
quit
$

因此,描述输入数的一种方法是(ulong_max-112)/4。
64位计算机的模拟数字是461168618427387876:
$ bc
x=2^64
x
18446744073709551616
y=x/4
y
4611686018427387904
y-28
4611686018427387876
quit
$

但是,要想成功,您必须修改报告的代码以使用strtroull()或类似的代码;atoi()通常限制为32位整数,并且在上面的64位数字上不起作用。代码还包含:
num_as = atoi(argv[1]);
if (num_as < 5) {
    errx(1, "Need 5.");
}
p = malloc(num_as);

其中num_as是asize_tp是achar *。因此,您必须能够malloc()一个巨大的空间(几乎4 eib)。大多数人的机器上没有足够的虚拟内存,即使有足够的磁盘空间做备份。现在,也许,仅仅是也许,linux会允许您过度提交(并让oom杀手稍后突袭进来),但是malloc()更可能失败。
还有其他一些相关的特性,它们影响32位系统,但不能影响64位系统。
如果要在64位计算机上复制它,可能需要进行32位编译。然后,如果风在你身后,你有适当的旧版本的相关软件,也许你可以复制它。

关于linux - glibc fnmatch漏洞:如何暴露该漏洞?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10117308/

10-14 10:35