只用几个命令即可编译各个版本的内核,且qemu
适配运行,此外新加CVE
环境编译建立功能。但是这个主要还是依赖我复现的CVE
,暂时只有
CVE-2021-22555
并且可能不同的编译环境编译出来的相关gadget
地址,或者cred
结构体地址不太一样,所以在里面的exp
的相关gadget
地址什么的还是需要设置一下的。
git clone https://github.com/PIG-007/kernelAll.git
#git clone https://gitee.com/Piggy007/kernelAll.git
cd kernelAll
chmod a+x setup.sh
sudo ./setup.sh
kernelAll_compileKernel -v 4.4.72
这里就代表编译内核为4.4.72
版本的。
完成之后在~/kernelAll/kernelSource
下可以找到对应版本的内核源码,这个用来编译模块,或者在调试的时候可以用gdb
的dir
功能来直接调试源码
之后会将bzImage
和vmlinux
以及项目根目录下的rootfs.cpio
放到kernelPwn
的对应版本文件夹中
之后启动内核就是依据当前文件夹下对应版本的内核文件了
由于更新成了py
文件,使用python3
,pip
安装一下对应包即可
当然还可以对内核添加配置
更加方便调试,编译内核时加入-debug
添加一些配置,比如CONFIG_SLAB_FREELIST_RANDOM=y
,CONFIG_SLAB_FREELIST_HARDENED=n
,另外加上*
可以进行所有项匹配。
比如:
-c CONFIG_SLAB_FREELIST_RANDOM=y CONFIG_SLAB_FREELIST_HARDENED=n CONFIG_NETFILTER_XT_*=y
把驱动模块的源代码放到path/kernelAll/modFile/
中,然后
kernelAll_compileModule kmod.c 4.4.72
这里就代表用刚才的编译好的4.4.72
版本的内核源码来编译kmod.c
,编译完成之后自动将kmod.ko
放到rootfs
文件系统中,并且重新打包。
kernelAll_pocCopy poc 4.4.72
这个即代表将poc
文件放入对应版本4.4.72
的rootfs
文件系统中,然后重新打包。
kernelAll_boot 4.4.72
这个即代表依据对应/path/kernelPwn/
对应版本的内核文件,使用qemu-system-x86_64
启动刚刚编译好的4.4.72
内核。
由于做pwn题时肯定需要附加调试,所以也提供了调试功能
bootPwnKernel 4.4.72 -g 1234
即以1234端口为调试端口,可供gdb附加调试。
现在相关的CMD设置成软链接模式放入到/usr/bin/
中,所以直接修改path/kernelAll/CMD/
对应的CMD命令文件即可
详见
~/kernelAll/kernelTool/pigKernelHeap.py
~/kernelAll/kernelTool/pigKernelHeap_debug.py
任选其一即可,如果使用本工具编译的带debug
信息时,那么使用pigKernelHeap_debug.py
即可,如果不带debug信息时,需要用vmlinux-to-elf来获取带符号的vmlinux
才行,然后还需要指定在kmem_cache
结构体中的random
值的偏移slab_random_offset
,因为不同编译设置情况下都不一样的,这个最好查一下,或者实际调一下,如果不指定,则默认为0xb8
。
在gdb中直接source
引用即可。
pigSlub help
即传递一下相关配置,由于在kernel
的Slub堆中,有harden
、random
等保护,但是不同版本中有swab计算,或者FD位置为chunk_addr+size/2
,所以需要传递一下相关配置进行计算。比如这里就开启了harden保护,且版本在v5.9
,那么就存在FD偏移和swab计算的情况。
pigSlub init freelist_harden freelist_harden_swab freelist_size2
pigSlub cpu0
pigSlub kmalloc-32
pigSlub all
具体自己实验一下吧
相对于的pigSlab
命令也是类似的。
ubuntu20.04
的时候,依照setup.sh
中安装qemu
已经不太行了,需要自己手动安装对应版本的包,这里就需要安装如下的包,之后运行bootPwnKernel
相关命令即可启动:
apt-get install qemu-system-x86
本人水平比较菜,如有错误或者bug,请师傅们多担待,欢迎提出相关意见。