繁体   English   中英

无缓冲区溢出的任意写入漏洞

[英]Arbitrary write vulnerability without buffer overflow

我正在深入研究 memory 漏洞(C/C++),我很想知道什么样的漏洞允许任意 memory 写入(或读取)而不利用缓冲区溢出(或过度读取)。 最终目标是利用 memory 漏洞(源)到达任意位置(目标),而无需访问目标和源之间的 memory。 位置是否可以选择无所谓,我只对到达远处位置的能力感兴趣。

我知道一个可能的例子是在 printf 函数和类似函数(格式字符串漏洞)中使用 %n 占位符。 还有其他的吗?

我也知道以某种方式破坏索引(可能是 integer 溢出)可能会导致这样的任意写入,如下例所示:

#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)
}

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

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

#include <stdlib.h>

void main(int argc, char ** argv){
    char *c = (char *)strtoul(*(argv+1), NULL, 0); //get value from input
    *c = 'c';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM