我正在尝试理解这个堆溢出漏洞。说我有以下代码:
struct data *arr = malloc(sizeof(struct data)*numElems);
/*... use arr[0], arr[1], etc if arr is not NULL*/
攻击者可以控制numElems。
我知道这可以通过导致堆溢出写入空闲块的元数据中的任意指针地址来利用。但这是怎么回事? malloc给我们的记忆是安全的,所以我假设arr[numElems-n]
(n>0;n<=numElems)
也是安全的。漏洞来自访问arr[numElems]
并写入下一个块的空间吗?