我一直在阅读关于在 Windows XP 和 WindowsServer2003上针对 GDI + 的一个较老的漏洞,它被称为 JPEG 的死亡,我正在从事的一个项目。
该漏洞在以下链接中得到了很好的解释: Http://www.infosecwriters.com/text_resources/pdf/jpeg.pdf
基本上,JPEG 文件包含一个名为 COM 的部分,其中包含一个(可能是空的)注释字段,以及一个包含 COM 大小的两字节值。如果没有注释,则大小为2。读取器(GDI +)读取大小,减去2,并分配一个大小适当的缓冲区来复制堆中的注释。
攻击包括在字段中放置值 0。GDI + 减去 2,得到一个值 -2 (0xFFFe),通过 memcpy转换为无符号整数 0XFFFFFFFE。
示例代码:
unsigned int size;
size = len - 2;
char *comment = (char *)malloc(size + 1);
memcpy(comment, src, size);
请注意,第三行上的 malloc(0)应该返回一个指向堆上未分配内存的指针。如何写入 0XFFFFFFFE字节(4GB! ! !) 可能不会让程序崩溃?这是否超出了堆的范围,进入了其他程序和操作系统的空间?然后呢?
根据我对 memcpy的理解,它只是将 n字符从目的地复制到源。在这种情况下,源应该在堆栈上,目标在堆上,而 n是 4GB。
 
                                
                            