linux kernel pwn 初探(1) 环境配置

首先配置下环境,强烈推荐在ubuntu下弄,在kali下面弄各种奇葩的错误………

首先配置的话我是按照dalao的教程来做的

dalao的教程

但是其实编译内核的那个环节可以省略,因为可以直接下载

利用

1
sudo apt search linux-image-

可以搜索到各种版本的内核

然后再利用

1
apt download xxxx

来把那个内核给下载下来

busybox那里就按照dalao的教程来做就行,编译应该是没有问题的

然后如果我们要编译特定版本的内核的驱动的话,需要下载源码

这里可以直接搜索,例如4.15.0-22版本的

1
apt search linux-headers-4.15.0-22-

然后再安装

1
sudo apt install linux-headers-4.15.0-22 linux-headers-4.15.0-22-generic

安装完之后,在/usr/src目录下面就会出现该版本的源码

这里给一个简单的hello world例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("<1> Hello world!\n");
return 0;
}
static void hello_exit(void)
{
printk("<1> Bye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);

Makefile 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
obj-m := hello.o

KERNELDR := /usr/src/linux-headers-4.15.0-22-generic

PWD := $(shell pwd)

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

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

clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

编译之后会有hello.ko文件

放到busybox/_install目录下面

修改init文件

增加

1
insmod /hello.ko

再重新打包,启动系统

这里给一下我启动系统的脚本和打包的脚本,可能你们要修改下目录之类的

1
2
3
4
5
6
7
8
9
10
11
#! /bin/sh

qemu-system-x86_64 \
-m 128M \
-kernel ./vmlinuz-4.15.0-22-generic \
-initrd ./rootfs.img \
-append "root=/dev/ram rw oops=panic panic=1 kalsr" \
-netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \
-monitor /dev/null \
-smp cores=2,threads=1 \
-cpu kvm64,+smep \
1
2
3
4
#!/bin/sh
echo "Generate rootfs.img"
cd /home/test/busybox-1.28.4/_install # fs folder
find . | cpio -o --format=newc > /home/test/rootfs.img