Kernel Pwn环境搭建
准备开始搞 kernel pwn 了。
环境搭建
编译内核
首先下载 kernel 源码:https://mirrors.tuna.tsinghua.edu.cn/kernel/
需要什么版本就指定什么版本好了。
因为我现在想复现 Dirty Cred,所以我下载了 5.8.1 版本的内核,解压之后使用 make menuconfig 可以打开一个配置界面,这里一定要把调试符号勾选,方便我们调试。
具体在 kernel hacking->kernel debugging 勾选,kernel hacking->Compile-time checks and compiler options->Compile the kernel with debug info
 
因为我们还是使用 pwndbg 去调试,所以不勾选 kgdb 了,最后呢,使用命令 make -j3 bzImage 来编译内核。
这里我遇到一个错误,根据说法,安装开发环境即可,如图示命令安装。
 
这里遇到一个坑的地方,如果开 wsl 在 E 盘下面编译,不仅慢而且容易错,所以还是建议把源码移动到 home 目录下再去编译,几分钟就能搞定。
这里我修改了一点源码,因为之前编译遇到问题,具体修改参考这个:https://gitee.com/openeuler/kernel/pulls/141/files
关于 wsl 编译错误的问题,我也参考了这个 issue:https://github.com/microsoft/WSL/issues/8045
最后输出
 
我们的内核就编译完了。
编译文件系统
这里我们使用 busybox 制作根文件系统,下载地址 https://www.busybox.net/ ,这里我选用了 1.32 版本。
同样使用 make menuconfig 打开配置界面。
Setting-> (build option分页下)Build static binary (no shared libs) 勾选,编译为静态链接的文件。
Networking Utilities->inetd 取消勾选。
然后 make -j8 去编译,编译完成之后使用 make install 创建 _install 目录,完成之后进这个目录再创建一些文件夹 mkdir -p  proc sys dev etc/init.d,那么这里就是我们要打包的文件系统了。当然还需要创建一个 init 启动脚本,主要是挂载那些目录。
| 1 | !/bin/sh | 
然后建立系统的配置文件。
etc/passwd
| 1 | root:x:0:0:root:/root:/bin/sh | 
etc/group
| 1 | root:*:0: | 
之后可以用一个命令打包这个文件系统 find . | cpio -o --format=newc > ../rootfs.img。
如果要重新解包文件系统可以使用这个命令 cpio -idmv < rootfs.img。
qemu启动
然后把 bzImage 和 rootfs.img 放一起,新建一个启动脚本,输入以下命令:
| 1 | !/bin/sh | 
就可以启动 qemu 了。
 
OK,配置环境到这里也就差不多了。
