zoukankan      html  css  js  c++  java
  • 路由器逆向分析------在QEMU MIPS虚拟机上运行MIPS程序(ssh方式)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69652258


    在QEMU MIPS虚拟机上运行MIPS程序--SSH方式

    有关在ubuntu系统上安装和使用QEMU虚拟机的内容,这里不会再描述了,在前面的博客中已经写的很清楚里。这里主要讨论的是怎么在QEMU-MIPS的虚拟机中运行MIPS程序。要在QEMU的系统模式下运行MIPS程序就必须让本地ubuntu主机和QEMU-MIPS虚拟机能够进行网络通讯才有机会。


    01.获取安装依赖文件,示例如下:

    $ sudo apt-get install bridge-utils uml-utilities

    02.修改 ubuntu主机网络配置。

    将ubuntu主机系统中的网络接口配置文件 /etc/network/interfaces 修改为如下的内容并保存。

    # 编辑ubuntu主机的网络接口文件/etc/network/interfaces
    $ sudo gedit /etc/network/interfaces
    修改 ubuntu 16.04 的主机系统的网络接口文件 /etc/network/interfaces 的内容如下,这里需要注意一下:如果是 ubuntu 14.04 的系统,在修改本地ubuntu主机的网络接口文件时,需要用 "eth0" 替换掉 "ens33"进行修改,后面启动桥接网络也需要对应的修改相关命令,具体原因在前面的博客《路由器逆向分析------MIPS系统网络的配置(QEMU)》中有提到。修改完网络接口文件 /etc/network/interfaces后,进行保存和关闭。

    auto lo
    iface lo inet loopback
    
    # ubuntu 16.04的系统用ens33代替eth0
    auto ens33
    iface ens33 inet manual
    up ifconfig ens33 0.0.0.0 up
    
    auto br0
    iface br0 inet dhcp
    bridge_ports ens33
    bridge_stp off
    bridge_maxwait 1
    执行的结果如下图:



    03.创建 QEMU 网络接口文件启动脚本文件,重启网络使网络配置生效。使用下面的命令 创建并编辑 /etc/qemu-ifup 文件。

    $ sudo geany /etc/qemu-ifup
    在启动脚本文件 /etc/qemu-ifup 中写入如下的内容,然后保存和关闭 /etc/qemu-ifup文件。这里需要注意一下,为了防止不干扰  /etc/qemu-ifup文件的原来的命令操作,没有修改和删除 /etc/qemu-ifup文件中的原文件内容而是在后面直接添加自己的命令操作的内容。
    #!/bin/sh
    echo "Executing /etc/qemu-ifup"
    echo "Bringing $1 for bridged mode..."
    sudo /sbin/ifconfig $1 0.0.0.0 promisc up
    echo "Adding $1 to br0..."
    sudo /sbin/brctl addif br0 $1
    sleep 3
    执行操作的结果截图如下:



    保存、关闭/etc/qemu-ifup文件以后,修改/etc/qemu-ifup文件的权限,然后重启网络使所有配置生效。

    # 赋予/etc/qemu-ifup脚本可执行权限
    $ sudo chmod a+x /etc/qemu-ifup
    
    # 重启网络使配置生效
    $ sudo /etc/init.d/networking restart
    执行结果如下图:



    04. QEMU启动配置

    启用桥接网络,示例如下:

    $ sudo ifdown ens33
    $ sudo ifup br0
    执行结果如下图,这里需要注意一下:如果是 ubuntu 14.04 的系统主机则执行的 "sudo ifdown eth0" 命令,与前面的网络接口文件中的修改进行对应。



    下载 MIPS虚拟机,访问网站:https://people.debian.org/~aurel32/qemu/,选择MIPS大端格式或者MIPS小端格式进行下载。这里选择下载MIPS32小端格式 的虚拟机镜像文件,下载的内核文件为 vmlinux-2.6.32-5-4kc-malta,磁盘镜像文件为 debian_squeeze_mipsel_standard.qcow2

    # Start QEMU with the following arguments for a 32-bit machine:  
    $ qemu-system-mipsel -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0"   
      
    # for MIPSEL 32bit ###############:  
    # 内核版本为2.6.x  
    $ wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-2.6.32-5-4kc-malta  
    $ wget https://people.debian.org/~aurel32/qemu/mipsel/debian_squeeze_mipsel_standard.qcow2  
    启动MIPS虚拟机,示例如下:

    $ sudo qemu-system-mipsel -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap -nographic

    执行结果如下图:



    05.配置MIPS系统网络
    在qemu-mipsel虚拟机上,使用 " ifconfig  -a " 命令,查看网络接口是否已经分配了IP地址。获取网络接口,示例如下:

    root@debian-mipsel:~# ifconfig -a
    执行结果如下图:



    注意:这里有个地方是需要思考的,在前面的博文《路由器逆向分析------MIPS系统网络的配置(QEMU)》中,在启动MIPS虚拟机成功以后,使用 "ifconfig  -a" 命令查看MIPS虚拟机的网络接口,发现MIPS虚拟机的网络接口并没有被分配IP地址;在修改了MIPS虚拟机的网络接口文件 /etc/network/interfaces中的 "eth0" 为 "eth1" 后,启用 eth1 网络接口才实现MIPS虚拟机的网络接口被分配IP地址成功,但是在本篇博文的操作中则 不需要修改 MIPS虚拟机的网络接口文件 /etc/network/interfaces 呢?


    思考一下:主要的原因是在前面的博文中,启动MIPS虚拟机时-虚拟了一个网络接口,因此在后面的MIPS虚拟机中需要修改网络接口文件 /etc/network/interfaces中的 "eth0" 为 "eth1" 才能实现MIPS虚拟机的网络接口被分配IP地址成功。


    在启动MIPS虚拟机时候,去掉如下图所标示的参数即可实现上面所讨论的需求,默认自动实现为MIPS虚拟机网络接口eth0分配IP地址。



    使用 " ping 命令,测试一下MIPS虚拟机是否与外部的网络连接通畅。

    root@debian-mipsel:~# ping www.baidu.com
    执行结果如下图:



    06.通过SSH连接MIPS虚拟机

    在ubuntu本地主机上,通过 ssh 远程登陆进入到 MIPS虚拟机 中,执行下面的命令:

    $ ssh root@192.168.254.132
    ssh登陆MIPS虚拟机成功,结果截图如下:



    07.通过 scp 向MIPS虚拟机拷贝MIPS程序

    通过 " scp" 命令向MIPS虚拟机拷贝本地ubuntu上的文件,执行下面的命令。这里主要是将解压后的路由器的整个文件系统拷贝到远端的MIPS虚拟机中。

    $ scp -r ./squashfs-root  root@192.168.254.132:/root/
    执行操作的结果截图:



    在远端的MIPS虚拟机上查看本地文件的上传的结果,截图如下:



    08.在QEMU-MIPS虚拟机上执行MIPS程序

    在远端的MIPS虚拟机上执行上传的MIPS程序,示例如下:

    root@debian-mipsel:~# cd squashfs-root/
    root@debian-mipsel:~/squashfs-root# ./bin/login 
    -bash: ./bin/login: No such file or directory
    root@debian-mipsel:~/squashfs-root# file ./bin/login 
    ./bin/login: ELF 32-bit LSB executable, MIPS, MIPS-II version 1 (SYSV), dynamically linked (uses shared libs), stripped
    root@debian-mipsel:~/squashfs-root# chroot . ./bin/login
    debian-mipsel login: hello
    Password: 
    Login timed out after 60 seconds.
    很显然,在远端的MIPS虚拟机上运行MIPS程序成功。


    09.最后的讨论

    本文的操作主要是参考《详细的路由器漏洞分析环境搭建教程》这篇文章。总体研究了一下这篇文章,首先感谢文章的作者然后呢,发现其实文章的作者有些知识点弄也不是很清楚。本篇博文与前面的博文《路由器逆向分析------MIPS系统网络的配置(QEMU)》总体区别不大,但是在配置网络接口这一部分稍有区别,其实仔细看官方的文档,也没什么不同。本篇博文还参考《揭秘家用路由器0day漏洞挖掘技术》以及其他的国外嵌入式大牛的博客,后面有时间再分享这些大牛的博客内容。

    撰写这篇博文的主要目的为了后面动态调试MIPS程序进行做准备~


  • 相关阅读:
    通俗易懂----欧几里得算法
    安卓贴图源码--->记录旋转后位置..类似in/百度魔图
    wait、notify、sleep、interrupt对比分析
    安卓内存泄漏及检测内存泄漏
    美团多渠道打包
    高版本api在低版本中的兼容
    常用工具
    双守护进程(不死service)-5.0系统以下
    安卓log4k问题解决
    10、面向对象以及winform的简单运用(isMdicontainer的设置、timer控件进行倒计时的制作)
  • 原文地址:https://www.cnblogs.com/csnd/p/11800622.html
Copyright © 2011-2022 走看看