从mmaped NULL指针读取数据

问题描述 投票:1回答:1

检查此代码:

char * addr = mmap(NULL , 6, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0);
if (addr == MAP_FAILED){
    return -errno;
}
printf("Mapped into addr=0x%X\n", addr);
printf("%s\n", addr);
printf("%s\n", NULL);

fd是包含字符串abcxyz的文件的文件描述符我希望程序在访问NULL指针时应收到SIGSEGV但具有讽刺意味的是,我得到了>

Mapped into addr=0x0
abcxyz
abcxyz

发生了什么事?为什么可以将可访问数据映射到地址NULL?通过这种行为,如何使用它来利用系统?

注意:该程序必须在root特权下运行。

注2:该行为是在Linux XXXXXX 4.4.0-174-generic #204-Ubuntu SMP Wed Jan 29 06:41:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

检查此代码:char * addr = mmap(NULL,6,PROT_READ | PROT_WRITE,MAP_SHARED | MAP_FIXED,fd,0);如果(addr == MAP_FAILED){返回-errno; } printf(“映射到addr = 0x%X \ n”,addr); printf(“%s \ ...

c linux linux-kernel null mmap
1个回答
1
投票

发生了什么事?

© www.soinside.com 2019 - 2024. All rights reserved.