1. 程式人生 > >新手玩轉Linux Kernel漏洞Null Pointer Dereference之環境搭建

新手玩轉Linux Kernel漏洞Null Pointer Dereference之環境搭建

新手玩轉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,這個檔案系統很關鍵

常見問題

  1. error: duplicate member ‘page’

    filename: drivers/net/igbvf/igbvf.h
    將第128行程式碼註釋掉

  2. 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
result01

忠告

    我曾經嘗試通過在Linux Kernel 2.6.32核心原始碼中打KGDB除錯的補丁, 但是Google了好久, 沒找到對應的檔案. 搜尋到的結果中, 關於KGDB補丁的連結均失效了。所以奉勸大家, 實在不行就找核心原始碼已打好KGDB補丁的原始碼, 這裡給大家一個版本Linux Kernel 3.10

參考連結

pwn4