我正在深入研究内存漏洞(C/C++),我很想知道什么样的漏洞允许任意内存写入(或读取)而不利用缓冲区溢出(或过度读取)。最终目标是利用内存漏洞(源)到达任意位置(目标),而无需访问目标和源之间的内存。位置是否可以选择无所谓,我只对到达远处位置的能力感兴趣。
我知道一个可能的例子是在 printf 函数和类似函数中使用 %n 占位符(格式字符串漏洞)。还有其他的吗?
我也知道以某种方式破坏索引(可能是整数溢出)可能会导致这样的任意写入,如下例所示:
#include <stdlib.h>
void main(int argc, char ** argv){
int c = atoi(*(argv+1)); //get value from input
char buf[40000];
if(c>39999) return 1; //check boundary for buffer
short ind = c; //wrong conversion --> integer overflow
buf[ind] = 'c'; //Write to arbitrary location (negative index)
}
但是,我想知道是否还有更多此类漏洞的经典示例。谢谢您的帮助!