-1

我正在深入研究内存漏洞(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)
}

但是,我想知道是否还有更多此类漏洞的经典示例。谢谢您的帮助!

4

1 回答 1

1

只需设置一个指向任意地址的指针并间接通过它。

#include <stdlib.h>

void main(int argc, char ** argv){
    char *c = (char *)strtoul(*(argv+1), NULL, 0); //get value from input
    *c = 'c';
}
于 2022-01-05T16:15:51.667 回答