欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]新手玩转Linux Kernel漏洞之Null Pointer Dereference

[原创]新手玩转Linux Kernel漏洞之Null Pointer Dereference

新手玩转Linux Kernel漏洞之Null Pointer Dereference

前言

这是我内核漏洞的入门篇, 不是很复杂, 希望能给徘徊在门外的小伙伴一点启发.

漏洞描述

    A NULL pointer dereference occurs when the application dereferences a pointer that it expects to be valid, but is NULL, typically causing a crash or exit.

漏洞代码

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/proc_fs.h>

void (*my_funptr)(void);

int bug1_write(struct file* file, const char* buf, unsigned long len){

    my_funptr();

    return len;

}

static int __int null_dereference_init(void){

    printk(KERN_ALERT "null_dereference driver init!\n");

    create_proc_entry("bug1", 0666, 0)->write_proc = bug1_write;

    return 0;

}

static void __exit null_dereference_exit(void){

    printk(KERN_ALERT "null_dereference driver exit\n");

}

module_init(null_dereference_init);

module_exit(null_dereference_exit);

小结: 这是一个Linux Kernel Module类型代码,载入内核执行初始化null_dereference_init. 在proc中创建一个Entrybug1.当write bug1时, 会触发Kernel调用bug1_write函数,而bug1_write中的my_funptr()是一个空指针.建议大家去学习一下这段代码中不懂的点, 理解上面这段代码很是重要

编译Module

obj-m := null_dereference.o

KERNELDR := /home/bill/CTF/Kernel/linux-2.6.32/

PWD := $(shell pwd)

modules:

    $(MAKE) -C $(KERNELDR) M=$(PWD) modules

modules_install:

    $(MAKE) -C $(KERNELDR) M=$(PWD) modules_install

clean:

    $(MAKE) -C $(KERNELDR) M=$(PWD) clean

需要注意的几点: KERNELDR填写为自己机器的源码根目录, 我自己在Ubuntu 12.04 i386上面没有编译成功, 在Ubuntu 16.04 64bit上面编译成功了.

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功