什么是空指针异常?
如果一个未初始化或零编号(zero-ed out)的指针被取消引用时,将会导致程序计数器/指令指针(PC/IP)指向0,从而导致内核崩溃!
当遇到上述情况,首先需检查是否启用了任何保护程序,如果启用了就将其全部关闭,包括管理员保护模式、数据执行保护模式(DEP / NX)以及mmap_min_addr保护机制。
ring0层与ring3层有所区别(Intel的CPU将特权级别分为4个级别:RING0、RING1、RING2、RING3。Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用)。由于计算机使用二进制,因此在ring3层操作过程中,我们仅需要关注如何追加一个shell命令,我们需要这个时间来修改权限。庆幸的是,目前仍存在一些内核结构,持有当前的进程权限。我们将尝试利用权限来进行root,并在处理完这些后再追加一个shell命令。
如何提升权限?
在进行提升权限操作前,我们需要知道我们需要做哪些事情:
每个进程信息都存储为一个进程描述符(task_struct)
下列是sched.h文件:
下面我们将主要关注有效的用户身份证明(UID)任务。如果我们成功将其值设置为0,则当前任务将具有root权限!
我们应该如何找到他们?
可以利用一些内核符号。
一些功能可用于提升当前的进程权限,它们的地址是静态的,可以根据我们处理的内核重新生成:
上述这些函数在cred.c.中。
我们可以看到,prepare_Kernel_cred()函数的返回值类型为struct cred *,之后再以此作为参数传递给commit_creds(),这样就可以将我们新获得的权限分配给当前的进程!
结论:可以通过“commit_creds(prepare_kernel_cred(0))”命令来提升权限;
了解漏洞并学会触发这些漏洞
在进行内核开发前,我们需要知道如何触发漏洞,还需要知道在什么情况下指针会被取消。
解决内核威胁问题
我们首先需要检查保护程序
如上图所示,所有的保护措施都出于关闭状态。
在“tostring_write()”函数里,我们可以看到这些命令应该始终以10’*’开头。
当这个内核模块被加载时,它会在每次运行时启动结构,每次运行都会启动一次。
如上图所示,我们不难发现这会启动“tostring_create()”。当在“tostring_s struct!”下设置函数指针时,该功能就会响应
这一点非常重要,请谨记于心!因此,这两个指针在每次运行时都被设置一次(或者需要的话)。
现在我们轻易地就能辨认出漏洞的函数,如下所示:
正如我们所见,在“ten ‘*’”后会出现一个“S”。这就会使函数指针tostring_read无效,而这一点对我们有力。
但是,在将其设置为null之后,我们需要读取它,以使其被取消引用。因此,我们需要读取该文件,以触发启用“tostring_read()!”命令。
我们开始编写开发程序。我们之前使用Python语言进行编写,现在我们换成C语言。

我们先写一个较为简单的以触发命令和清除函数指针。
目前一切都比较顺利,但我们仍需通过读取文件使其取消引用。
我们做到了,我们将其IP指针设置为0
幸运的是,mmap_min_addr保护处于关闭状态。 我们可以在NULL中分配一个小区域,并放置我们的shellcode来提升权限。
现在就可以从“/proc/kallsyms!”中获得“prepare_kernel_cred”和“commit_creds”地址。
我将使用rasm2做一个shellcode:
以下是shellcode:
在我们的开发程序中取消指针前,我们就可以开始添加shellcode:
在完成后,开始运行
以下是root shell
希望文章能对大家有所启发和帮助!
编译LINUX内核时为什么总是要建一个链接文件夹,链接到内核源码文件夹
展开全部一般约定 内核源代码存在于 /usr/src/linux 但是下载下来的源码解压后都是包含版本号的,这样便于管理,所以做个到/usr/src/linux符号链接 安全方便 当然你也可以不做符号链接,直接将源码树目录改为linux
关于linux内核分哪几个部分,详解是?
进程管理(process management)定时器(timer)中断管理(interrupt management) 内存管理(memory management)模块管理(module management)虚拟文件系统接口(VFS layer)文件系统(file system)设备驱动程序(device driver)进程间通信(inter-process communication)网络管理(network management)系统启动(system init)等操作系统功能的实现。
关机的时候出现dde server windows程序没有响应?
这个问题是很正常的问题,假如次数很少的话那你不用管他用一段时间就好了原因是每次启动程序时都时,计算机会向内存要一个指令,由于一下无法分出这个指令就会出现那个现象.但是如果这个现象总是出现,甚至打不开一些文件,那么有可能就是中了病毒了啊,呵呵因为中了病毒,这些病毒程序就会占用你内存的一些地方导致无法分出使用正常程序的指令,那你可以进入安全模式下杀毒或者是打开注册表看看里面是否有不正常或者是从来没有出现过的程序,也有些病毒会隐藏在其中,仔细注意例如 而不正常的会模仿其名称如虽然只是一个字母的不同但他就应该是病毒了啊,你就把那些东西都栓掉,特别是要注意那些从来没有发现过的程序啊,我也只知道这么多了啊 具体你还可以看看其他的网站查看删除的一些方法,最好是自己能有个好的杀毒软件啊,自己把握把.
发表评论