Linux内核漏洞利用-环境配置(转)
2024-09-06 02:46:31
实验环境:
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 成功
。
最新文章
- Atitit 自然语言处理原理与实现&#160;attilax总结
- distinct 与 group by 去重
- Httpoxy远程代理感染漏洞 [转]
- Fiddler内置命令
- C# 读取文本文档(转)
- Linux中ping命令
- 使用Google Code和客户端TortoiseSVN 工具搭建一个在线源代码版本控制系统
- C#中的委托用法
- Java导出Excel表(poi)名中文乱码问题处理
- JavaScript高级程序设计之自学笔记(一)————Array类型
- 项目Beta冲刺预热
- MT【223】二次函数最大最小
- mysql外键(FOREIGNKEY)使用介绍
- python并发编程之进程池,线程池concurrent.futures
- bower 和 npm 的区别详细介绍
- linux - JDK 环境
- 得到Revit子窗体
- Python实现KNN算法及手写程序识别
- 拍案惊奇!9款神奇的jQuery/CSS3经典插件
- HDU 5200 Trees 二分
热门文章
- 新浪微博分享出现libc++abi.dylib: terminating with uncaught exception of type NSException微博微信SDK运行编译报错
- TP5之验证码
- std::map的删除
- bzoj 3559: [Ctsc2014]图的分割【最小生成树+并查集】
- [Xcode 实际操作]七、文件与数据-(20)CoreML机器学习框架:检测和识别图片中的物体
- E - Multiplication Puzzle
- web.xml中一个filter配置多个url-pattern
- Jquery | 外部插入节点
- DRF教程5-API接口文档和接口测试
- UVa12298(生成函数的简单应用+FFT)