0%

kernel pwn入门之qemu环境的配置

记录一下自己是如何完成qemu环境配置的,以及在配置环境时遇到的问题及解决方案

环境版本说明

​ ubuntu20.04

​ VMware虚拟机

qemu安装

参考文章:Ubuntu 22.04 安装 QEMU 流程 - arcsin2 的个人博客

拉取并解压

我用 wget 拉取时比较慢,直接复制链接下载完再复制到虚拟机里

1
2
3
wget https://download.qemu.org/qemu-7.2.0.tar.xz
tar -zxvf qemu-7.2.0.tar.xz
cd qemu-7.2.0/

安装依赖

1
2
3
4
sudo apt-get install ninja-build
sudo apt-get install zlib1g zlib1g-dev
sudo apt-get install libglib2.0-dev
sudo apt-get install libpixman-1-dev

安装libslirp-dev,这个我还不了解是什么,后续深入了解后再补充,没安装的话有些题目启动会报错,一定要在./configure前安装好,不然就得像我一样编译两次(哭了)

1
sudo apt-get install libslirp-dev

没安装的话报错如下

说缺少了user网络后端的支持

1
qemu-system-x86_64: -netdev user,id=t0,: network backend 'user' is not compiled into this binary

预处理

本来是没有后面那个 –enable-slirp 的,加上这个是因为安装了 libslirp-dev

1
./configure --enable-slirp

编译

此过程大概需要编译30分钟

1
make

安装

1
sudo make install

验证

输入 qemu- 后按两次 Tab

1
qemu-[Tab][Tab]

输出如下选择即安装成功

运行sh启动脚本时遇到的错误

报错1

缺少了libaio.so.1文件

1
./qemu-system-x86_64: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决方案

1
sudo apt-get install libaio1

报错2

缺少了libcurl3,我本机的是libcurl4,很多程序都依赖于libcurl4,而且你只能从libcurl3或libcurl4中选择一个进行安装(有种强制爱的感觉),如果换成了libcurl3,虚拟机大概率是会崩的,不过还是有解决办法的

1
./qemu-system-x86_64: /lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by ./qemu-system-x86_64)

解决方案

你可以在这里找到如何同时安装libcurl3和libcurl4的方法:

software installation - How to have both libcurl3 and libcurl4 installed at same time? - Ask Ubuntu

我这里简述一下

先查看一下版本

1
apt-cache policy libcurl4

输出如下

因为我已经安装好了libcurl3和libcurl4的包,所以我Installed那里显示的就不是什么7.81.0之类的

在输出中可以看到有一个名为 7.68.0-1ubuntu2.5ppa1 的包,我们只需安装这个包,就可以同时拥有libcurl3和libcurl4的环境

直接执行下面的命令,不需要去删除libcurl4

1
sudo apt install libcurl4=7.68.0-1ubuntu2.5ppa1

报错3

说无法访问kernel模块,该文件不存在

1
2
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory

解决方案

在虚拟机设置中打开 “虚拟化 Inter VT-x/EPT 或 AMD-V/RVI(V)” 即可

启动设备测试

我这里用的是 [HITB GSEC2017]BABYQEMU 这道题

bash中运行启动脚本

1
./launch.sh

得到如下结果,说明设备已经启动成功,可以开始pwn啦

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道