
kernel
文章平均质量分 69
Akura@lan
咸鱼………
展开
-
ch2 系统调用实验
call sys_call_table(,%eax,4) 之前是一些压栈保护,修改段选择子为内核段,call sys_call_table(,%eax,4) 之后是看看是否需要重新调度。根据汇编寻址方法它实际上是:call sys_call_table + 4 * %eax,其中 eax 中放的是系统调用号,即 __NR_xxxxxx。他俩以及所有 put_fs_xxx() 和 get_fs_xxx() 都是用户空间和内核空间之间的桥梁,在后面的实验中还要经常用到。系统调用与调用自定义函数不一样的是。原创 2023-02-05 23:26:19 · 538 阅读 · 1 评论 -
kernel bypass smep
和之前的babydriver一样,用这个来解semp开启以后,ret2usr就不能用了,因为semp让在ring0权的时候执行用户空间的代码直接crash掉而系统开启semp的方法是设置cr4寄存器的第20位为1,第20位为0时关闭gdb 如果不能看 cr4 寄存器的值,可以通过 报错查看。为了关闭 smep 保护,常用一个固定值 0x6f0,即 mov cr4, 0x6f0#include <stdio.h>#include <stdlib.h>#include &l原创 2021-11-09 17:45:28 · 513 阅读 · 0 评论 -
kernel pwn ret2usr
思路通过读取 /tmp/kallsyms 获取 commit_creds 和 prepare_kernel_cred 的方法相同,同时根据这些偏移能确定 gadget 的地址。leak canary 的方法也相同,通过控制全局变量 off 读出 canary。但是之后就不同了rop的构造是执行函数commit_cred(prepare_kernel_cred(0))进行提升权限,通过swapgs; iretq返回用户态执行system_calll而ret2usr是执行用户态中的commit_cre原创 2021-11-08 00:30:03 · 228 阅读 · 0 评论 -
kernel ROP
之前有一个点,root权限时的gid和uid为0内核态提权到root,一般就是执行commit_creds(prepare_kernel_cred(0));这两个函数原理就是分配一个新的cred结构,uid = 0,gid = 0。此时就是root权限输入cat /proc/kallsyms可以查看他们的地址commit_creds和prepare_kernel_cred(0)都是内核函数现在看一下2018年qwb的core,回顾一下之前的start.sh:启动脚本,标明了启动的方法,保护措施原创 2021-11-07 01:57:41 · 920 阅读 · 0 评论 -
kernel pwn-kernel UAF
不同于用户态pwn,内核pwn就不是用python远程拿shell,而是给一个环境包,下载qemu本地起系统。给定以下文件boot.sh: 一个用于启动 kernel 的 shell 的脚本,多用 qemu,保护措施与 qemu 不同的启动参数有关bzImage: kernel binary rootfs.cpio: 文件系统映像...原创 2021-10-24 17:02:09 · 2292 阅读 · 0 评论