linux-kernel - 内核试图执行受 NX 保护的页面——利用尝试?
问题描述
看看这个非常基本的 linux 模块:
static ssize_t checksec_write(struct file *f, const char __user *buf,size_t len, loff_t *off)
{
unsigned long addr_fonction_userspace;
memcpy(&addr_fonction_userspace,buf,sizeof(unsigned long));
void (*functionPtr)(void);
functionPtr = addr_fonction_userspace;
(*functionPtr)();
return len;
}
该模块适用于这个 /dev/checksec 字符设备。
看看这个基本的 c 用户态程序:
void fonction_userland();
void fonction_userland()
{
asm ("nop");
}
void main()
{
FILE *f=fopen("/dev/checksec","w");
unsigned long addr_fonction_userland = &fonction_userland;
fwrite(&addr_fonction_userland,sizeof(unsigned long),1,f);
}
当我运行程序时,我在 dmesg 中收到此错误:
kernel tried to execute NX-protected page - exploit attempt?
我知道这是一种利用尝试,因为这是我想要学习的。但我不明白为什么该页面受 NX 保护。该函数不在非执行页面中,它是一个用户态函数。SMEP 和 SMAP 未启用(CR4 寄存器中的位 0)
非常感谢
解决方案
推荐阅读
- reactjs - TypeError:无法读取未定义的属性(读取“值”)
- ffmpeg - 这些元数据的命令行和程序
- python - Django 中的设置在运行服务器时重复运行
- c++ - 使用 SetupAttachment 函数后虚幻引擎 5 崩溃
- vb.net - '没有为一个或多个必需参数提供值。' 数据类型的规范是否有错误?
- angular - TSLint:forIn 循环必须被过滤
- python - 美丽的汤:试图得到一个 div 的孩子
- pcre - PCRE 匹配捕获子模式
- video-processing - 使用 FFMPEG 在流中搜索音频剪辑或视频帧
- npm - 您好,我在尝试启动 stencil 时遇到了这个问题