新手玩轉Linux Kernel漏洞Null Pointer Dereference之環境搭建
阿新 • • 發佈:2019-01-22
新手玩轉Linux Kernel
漏洞Null Pointer Dereference
之環境搭建
條件
System: Ubuntu 12.04 i386(虛擬機器即可)
Disk Space: 50G(編譯核心很耗資源)
BusyBox: 1.19.4(將常見的Unix 命令整合在了一個可執行檔案)
Qemu(一個模擬器, 非常強悍)
Source Code: Linux Kernel 2.6.32
編譯工具
sudo apt-get install build-essential libncurses5-dev
sudo apt-get install qemu qemu-system
編譯核心
make menuconfig
make
make modules
make modules_install(可選)
編譯BusyBox
# BusyBox Settings --> Build Options --> Build BusyBox as a static ....
# 取消Linux System Utilities --> Support mounting NFS file system
# 取消Networking Utilities --> inetd
$ make menuconfig
$ make
$ make install #在busybox原始碼目錄中生一個一個_install的目錄
$ cd _install
$ mkdir proc sys dev etc etc/init.d
$ vim etc/init.d/rcS
#!/bin/sh
mount -t proc none /proc #掛在proc虛擬檔案系統
mount -t sysfs none /sys #掛在sysfs虛擬檔案系統
/sbin/mdev -s
$ chmod +x etc/init.d/rcS
$ find . | cpio -o -H newc > ../rootfs.img #生成一個rootfs,這個檔案系統很關鍵
常見問題
error: duplicate member ‘page’
filename: drivers/net/igbvf/igbvf.h
將第128
行程式碼註釋掉
elf_i386: No such file or directory
filename: arch/x86/vdso/Makefile
28 - VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1
28 + VDSO_LDFLAGS_vdso.lds = -m64 -Wl,-soname=linux-vdso.so.1
72 - VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
72 + VDSO_LDFLAGS_vdso32.lds = -m32 -Wl,-soname=linux-gate.so.1
結果
將下面儲存為./boot.sh
#!/bin/sh
qemu-system-i386 -m 128M -kernel linux-2.6.32/arch/x86/boot/bzImage -initrd busybox-1.19.4/rootfs.img -append "console=ttyS0 root=/dev/ram rdinit=/sbin/init" --nographic
啟動./boot.sh
忠告
我曾經嘗試通過在
Linux Kernel 2.6.32
核心原始碼中打KGDB
除錯的補丁, 但是KGDB
補丁的連結均失效了。所以奉勸大家, 實在不行就找核心原始碼已打好KGDB
補丁的原始碼, 這裡給大家一個版本Linux Kernel 3.10