Loading... --- > windows10下qemu虚拟机的安装、启动脚本、网络配置情况。 ## 固件分析利器binwalk 不管以后方向是不是IOT,固件是越来越和re扯上关系了,越学越底层了。心累,装个binwalk备用吧,misc也用得到。因为Kali下自带的binwalk功能不完整,所以从github上获得binwalk以后,按照INSTALL.md里的说明安装。 首先安装依赖项: ```sh # 由于我是win下py2的环境 这个依赖暂时装不了 sudo apt-get install python-lzma pip install nose coverage # 这个我因为是用的anaconda,默认安装 sudo apt-get install python-crypto # 下面的一堆也是andconda带的 sudo apt-get install libqt4-opengl python-opengl python-qt4 python-qt4 -gl python-numpy python-scipy python-pip pip install pyqtgraph # capstone,安装起来很烦的反汇编框架,无论是angr、pwntools还是pwndbg都要装,win下 肯定是安装失败了。 pip install capstone # 还有好多其他依赖项。。 ``` 因为我是windows系统,很多东西没法直接装了,有空的话在ubuntu下全装了。最后直接`python setup.py install`就行了,一般都没什么问题。ps:我发现binwalk是有ida插件的,但是根据更新日期,应该是用的`ida6.*`的API写的,但是我用的是7.1。由于ida升7之后API重写了,应该没法用,我就没安装。最好是安装所有的binwalk依赖项,这样binwalk在解包固件的时候,才能辨别固件的文件格式(from 唐师傅),万能的e参数解包,哈哈。 ## 安装qemu 具体安装步骤就不说了,毕竟windows,有关linux的安装技巧就百度吧。(手动滑稽) ## 安装交叉编译环境 这里指的就是安装arm(64)、mips(64)、mipsel(64)、powerpc等等,这些环境的编译环境。(我没用到就没装,以后有空来补这一部分) ## qemu系统模式启动 这种模式下,就和VMware安装一个操作系统感觉一样,会运行一个独立的操作系统。例如我们下载mipsel虚拟机,是debain的开发人员上传的虚拟机环境,直接用就好了,虽然有点老了,网址:`https://people.debian.org/~aurel32/qemu/mipsel/`。 根据网页的文档提示,要下载3个东西,镜像和硬盘(32、64位),用户名是user,密码user。root用户名是root,密码是root。都下载完成之后据要启动了,这是最烦的一步-\_-,自己也配置了半天才勉强成功。 ```sh # 启动32位mipsel: ..\..\qemu-system-mipsel.exe -M malta -kernel .\vmlinux-3.2.0-4-4kc-malta -hda .\debian_whee zy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=ttyS0" -nographic ``` 这种方式就是普通的虚拟机启动了,具体的参数我这就不说了,可以直接用help命令查看,qemu的参数太多了。 虚拟机是能启动成功的,也没什么其他问题,但是无法和host交互。但是是可以上网的,相当于vmware虚拟机的Net网络模式。 ## qemu虚拟机网络配置 因为无法和vmware一样设置共享文件夹,所以要和host进行交互的话,我们需要将网络配置进行修改,使用桥接模式来访问外网。 根据网上资料,很多都是linux下的网络配置,在windows下,我使用tap虚拟网卡来进行配置,下载的方式是通过安装openvpn自带的tap驱动(注意:只需要安装tap虚拟网卡驱动就行了,不需要安装该软件)。安装完成后,我们打开网络适配器页面,可以看到多了一个虚拟网卡。 ![tap网卡](./assets/Snipaste_2018-04-15_11-43-36.png) 这里我已经将tap网卡的名称改为my-tap了,这是方便之后的使用。这时候tap网卡是默认关闭的,进入tap网卡的属性页面,然后将高级选项栏中`Media Status`的值改为`Always Connection`总是连接,这样tap网卡就是默认启动了,但是是没有网络的,因为只是个虚拟的网卡。因为之后要对虚拟机分配ip,此时tap网卡ip是动态分配的,这会导致一些问题,所以改成静态的就行了,网关不用配。 ![tap网卡ip设置](./assets/Snipaste_2018-04-15_11-52-37.png) 这时候就行了,我们可以启动虚拟机。 ```sh # mipsel 32位带网络启动: ..\..\qemu-system-mipsel.exe -M malta -kernel .\vmlinux-3.2.0-4-4kc-malta -hda .\debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=ttyS0" -net nic,macaddr=00:16:3e:00:00:01 -net tap,ifname=my-tap -nographic # mipsel 64位带网络启动: ..\..\qemu-system-mips64el.exe -M malta -kernel .\vmlinux-3.2.0-4-5kc-malta -hda .\debian_wheezy_mipsel_s tandard.qcow2 -append "root=/dev/sda1 console=ttyS0" -net nic,macaddr=00:16:3e:00:00:01 -net tap,ifname=my-tap -nographic ``` 这里的参数也是n多,不详细讲了,和默认启动方式不一样的点在于:`-net`参数,配置虚拟机的网卡,nic代表创建新的网卡,macaddr指定了虚拟机的mac地址,`-net tap`代表使用tap网络。意思就是使用host的`my-tap`虚拟网卡。如果启动虚拟机的时候,看到tap网卡有数据包发送,说明虚拟机正在链接、配置该网卡。 启动完成后,我们还需要手动配置虚拟机的网络。 ```sh # 进行ip设置 ifconfig eth0 192.168.5.2 # 设置默认网关(先不设置,若ping主机无反应则设置) route add default gw 192.168.5.1 eth0 ``` ![虚拟机ip设置](./assets/Snipaste_2018-04-15_12-09-37.png) 这时候,host是可以ping通tap网卡ip和虚拟机ip的,虚拟机可以ping通tap网卡ip,但是ping不通host的ip。此时应该相当于vmware的host only模式,host-only中的主机ip是在适配器里面设置的,而不是连接网络被分配的真实ip地址,如果用虚拟机ping真实ip地址,就相当于ping外网,是ping不通。也就是说在虚拟机来看,tap网卡ip就是host的ip地址,既然可以连接的话,我们就可以用ssh、scp远程来连接到该虚拟机进行文件传送的。 当然这里还有点问题,虚拟机的网络老是会自己掉,即ip又没了。。。这里我搞了很长的时间,一开始以为是防火墙的问题,但是我关了防火墙还是不行,就不知道是为什么了。惊了。 ![ssh、scp连接传文件](./assets/Snipaste_2018-04-15_12-37-46.png) 这样基本的网络功能就实现了,但是如上文所说,不能访问外网。。。一些常用的都能用,但是如果要下载软件什么的就很就烦了。所以最后实现host-only模式下虚拟机访问外网。 参考网上的资料,首先我选择的是将tap和已经网卡桥接,通过设置网桥的方式来访问外网,这种方式是可以成功的,但是也遇到很多问题,有可能是防火墙,也有可能是其他问题,总之试了很多次只成功了一次,而且主机的网络会很不稳定,这里不推荐这种方式。 第二种方式就是将已经连上网的网卡设置为共享模式,将my-tap连接到上面,就可以使虚拟机上网。这时候os会提示被共享的ip将设置为`192.168.137.1`,我们只要将这个值改回来就行了。然后重新启动虚拟机。命令和上面是一样的。一般这时候就可以上网了。 若还是不行,就不要改tap网卡的ip了,直接用`192.168.137.1`,这时候根据DHCP自动分配ip,这样就终于能上网了。还要注意防火墙的动态,说不定就给拦下来了,用traceroute跟踪下看看。泪崩。。。 最后网络好了之后,用ssh上去看下网络配置吧。 ![最终ip情况](./assets/Snipaste_2018-04-15_13-57-48.png) ![网关和网络情况](./assets/Snipaste_2018-04-15_13-59-28.png) ![dns解析情况](./assets/Snipaste_2018-04-15_14-07-27.png) 花了一天搭环境,终于给弄好了,好不容易啊,心好累。其实我想上网是有原因的,主要还是为了装gcc和gdb,最后apt-get装完之后,发现gdb调不了mipsel的程序。那我要你有何用。。。卒。 > 后来发现是要启动gdbserver才行。插一句,在调试非x86架构pwn的时候最好安装好gdb-multyarch并开启gdbserver 。 ``` ``` Last modification:January 16th, 2021 at 01:03 pm © 允许规范转载 Support 确定不打赏一下支持博主吗 ×Close Appreciate the author Sweeping payments Pay by AliPay