kernel 环境搭建
这个make bzImage用了我2G硬盘…
搞得我已经不敢随便make了
其实在做MIT vx6的那实验的时候就搭过类似的环境了…
这里基本是按照传说的v爷爷的blog做的
https://veritas501.space/2018/06/03/kernel%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/
就最后的脚本路径稍微改了一下
#!/bin/sh
qemu-system-x86_64 \
-m 64M \
-kernel arch/x86_64/boot/bzImage \
-initrd ../busybox-1.28.4/rootfs.img \
-append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 kalsr" \
-netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \
-nographic \
-monitor /dev/null \
-smp cores=2,threads=1 \
-enable-kvm \
-cpu kvm64,+smep \
# -gdb tcp::1234 \
# -S
我为什么编译了那么大的东西….QAQ
最后看到一句…可以直接下载kernel
apt download linux-image-4.15.0-22-generic
所以….编译内核的意义在哪…
是可以对源码定制, 然后重新生成内核吗
我遇到了新的问题…怎么关机
好吧, 关不了机…只能直接Ctrl+c
2 Demo
由于大家在做这demo的时候是用的2.x
内核…而我照着大佬搭了一个4.15
…(因为没有磁盘空间了,,,就不继续make了)
而这其中发生了…一个变迁就是create_proc_entry
函数不能用了…就好像你用PHP7跑了SQLi-LAB…发现旧的数据库连接函数都废弃了的时候, 哈哈哈, 这里倒是没那么严重…换了新的函数, 稍作了修改
// vim null_dereference.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
void (*my_funptr)(void);
static ssize_t bug1_write(struct file *file,const char __user *buf,size_t len, loff_t *f_pos)
{
my_funptr();
return len;
}
struct file_operations proc_fops=
{
.write=bug1_write
};
static int __init null_dereference_init(void)
{
printk(KERN_ALERT "null_dereference driver init!\n");
proc_create("bug1",0666,0, &proc_fops);
return 0;
}
static void __exit null_dereference_exit(void)
{
printk(KERN_ALERT "null_dereference driver exit\n");
}
module_init(null_dereference_init);
module_exit(null_dereference_exit);
另一个栈溢出的demo也是照着改, 而且栈溢出的demo需要关闭ALSR, 然后重新编译内核我就没做了
推荐的资料
Linux device driver (LDD)
linux kernel development (LKD)
Keegan McAllister的Writing kernel exploits
…一份ppt, 就大家在传的两个demo