zoukankan      html  css  js  c++  java
  • Linux内核漏洞利用-环境配置(转)

    实验环境:
    Ubuntu-14.04.1 x86
    linux-2.6.32.1
    busybox-1.27.2
    qemu
    

    0x00 安装qemu

    sudo apt-get install qemu qemu-system
    

    0x01 Linux内核编译

    $ wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz
    $ tar zxvf linux-2.6.32.tar.gz
    $ cd linux-2.6.32
    $ sudo apt-get install libncurses5-dev
    $ make menuconfig
    $ make
    $ make all
    $ make modules
    

    编译时遇到的问题:

    错误1:

    /usr/src/linux-2.6.32/arch/x86/include/asm/ptrace.h:146:13: note: previous declaration of 'syscall_trace_leave' was here
    make[2]: *** [arch/x86/kernel/ptrace.o] Error 1
    make[1]: *** [arch/x86/kernel] Error 2
    make: *** [arch/x86] Error 2
    

    解决方法:

    patch 
    
    --- linux-2.6.32.59/arch/x86/include/asm/ptrace.h
    +++ fix_ptrace.o_compile_error/arch/x86/include/asm/ptrace.h
    @@ -130,6 +130,7 @@ 
     #ifdef __KERNEL__
     
     #include <linux/init.h>
    +#include <linux/linkage.h>
     
     struct cpuinfo_x86;
     struct task_struct;
    @@ -142,8 +143,8 @@ 
     			 int error_code, int si_code);
     void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
     
    -extern long syscall_trace_enter(struct pt_regs *);
    -extern void syscall_trace_leave(struct pt_regs *);
    +extern asmregparm long syscall_trace_enter(struct pt_regs *);
    +extern asmregparm void syscall_trace_leave(struct pt_regs *);
     
     static inline unsigned long regs_return_value(struct pt_regs *regs)
     {
    

    错误2:  

    gcc: error: elf_i386: No such file or directory  
      OBJCOPY arch/x86/vdso/vdso32-int80.so  
    objcopy: 'arch/x86/vdso/vdso32-int80.so.dbg': No such file  
    make[2]: *** [arch/x86/vdso/vdso32-int80.so] Error 1  
    make[1]: *** [arch/x86/vdso] Error 2  
    make: *** [arch/x86] Error 2  
    

    解决方法:

    原因是 gcc 4.6 不再支持 linker-style 架构。讲 arch/x86/vdso/Makefile 中,
    将以 VDSO_LDFLAGS_vdso.lds 开头所在行的 "-m elf_x86_64" 替换为 "-m64"。
    将以 VDSO_LDFLAGS_vdso32.lds 开头所在行的 "-m elf_x86" 替换为 "-m32"。
    

    错误3:

        drivers/net/igbvf/igbvf.h:128:15: 错误: 重复的成员‘page’
    
             make[4]: *** [drivers/net/igbvf/ethtool.o] 错误 1
    
             make[3]: *** [drivers/net/igbvf] 错误 2
    
             make[2]: *** [drivers/net] 错误 2
    
             make[1]: *** [drivers] 错误 2
    

    解决方法:

    1. 根据linux社区的建议,此错误是由于gcc版本与内核版本的冲突导致的。他们的建议是更换新版本的内核,但是某些特殊条件下,我们不能更换内核版本,于是我们修改内核代码适应当前的编译器。
    
    2. 按照错误的指示,错误的代码是在drivers/net/igbvf/igbvf.h文件的第128行。
    
    3. 打开文件,看128行,代码为:struct page *page;再往上看,第123行,也有struct page *page这行代码,这个结构定义在内部的一个结构体中。就是他的名字与128行的重复了,
    而4.6.3的编译器对不支持这种方式的定义,我们修改128行的代码为struct page *pagep;保存退出;
    

    0x02 编译busybox

    $ wget https://busybox.net/downloads/busybox-1.27.2.tar.bz2
    $ tar -jxvf busybox-1.27.2.tar.bz2
    $ cd busybox-1.27.2
    $ make menuconfig # Busybox Settings -> Build Options -> Build Busybox as a static binary
    $ make install
    

    0x03 全部编译成功后做如下配置

    #进入busybox的_install目录
    $ cd _install
    $ mkdir proc sys dev etc etc/init.d
    $ vim etc/init.d/rcS
    #!/bin/sh
    mount -t proc none /proc
    mount -t sysfs none /sys
    /sbin/mdev -s
    $ chmod +x etc/init.d/rcS
    $ find . | cpio -o --format=newc > ../rootfs.img
    
    #进入linux内核目录
    $ cd linux-2.6.32
    $ qemu-system-i386 -kernel arch/i386/boot/bzImage -initrd ../busybox-1.19.4/rootfs.img -append "root=/dev/ram rdinit=/sbin/init"
    

    0x04 成功

                                                                                                              。

  • 相关阅读:
    什么才是java的基础知识?
    Java的背景、影响及前景
    设计模式分类
    关于日期及日期格式转换的记录
    添加同名工具后台验证后不跳转且保留用户输入的数值
    案件讨论回复中出现把多个附件当成一个评论显示,导致分页出错
    指令发布详情弹窗实现“取消”按钮
    最大间隔分离超平面的唯一性完整证明
    CART算法与剪枝原理
    Spark MLlib学习
  • 原文地址:https://www.cnblogs.com/elvirangel/p/7465799.html
Copyright © 2011-2022 走看看