路由器逆向分析------MIPS系统网络的配置(QEMU)

本文介绍如何配置MIPS系统网络,实现本地Ubuntu与QEMU模拟的MIPS系统之间的网络通讯。主要内容包括安装依赖包、修改Ubuntu网络配置、创建QEMU网络接口启动脚本、启动QEMU虚拟机、配置MIPS系统网络及通过SSH连接MIPS虚拟机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


MIPS系统网络的配置 

使用QEMU 模拟正在运行的MIPS系统并配置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主机的网络配置文件 /etc/network/interfaces 为如下内容:

auto lo
iface lo inet loopback

auto eth0 
iface eth0 inet dhcp 

#auto br0 
iface br0 inet dhcp 
  bridge_ports eth0 
  bridge_maxwait 0 


ubuntu主机的网络配置文件 /etc/network/interfaces 修改后的结果如图:



注意:上面的操作是在主机ubuntu 14.04版本上的修改示例,在最新版的ubuntu 16.04中,原来的 eth0 被重命名为了 ens33,因此上面的 /etc/network/interfaces文件修改中,需要用 ens33 来替换 eth0 进行修改。当然了还有一种方法解决这个问题--将ubuntu 16.04的 ens33 修改为原来的 eth0,修改的方法可以参考文档:《Change default network name (ens33) to old “eth0” on Ubuntu 16.04》。

# 查看ubuntu系统的eth
$ dmesg | grep -i eth



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

$ sudo gedit /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文件后面添加的我们的操作内容;当然了注释掉原来的命令内容应该也没有什么问题,然后 保存关闭文件。



保存 文件/etc/qemu-ifup 以后,赋予文件/etc/qemu-ifup 可执行权限,然后重启网络使所有的配置生效。

$ sudo chmod a+x /etc/qemu-ifup

# 重启网络使配置生效
$ sudo /etc/init.d/networking restart
重启网络成功,结果如图:



04.QEMU的启动配置

在本地ubuntu命令行终端,启动桥连网络。

$ sudo ifdown eth0
$ sudo ifup br0
执行的结果如图:



在前面的博客《路由器逆向分析------QEMU的基本使用方法(MIPS)》中,已经写了关于QEMU的系统模式的使用,下面我们就使用前面下载的MIPS 32bit的内核2.6.x版本的虚拟机镜像文件,执行下面的命令启动MIPS虚拟机。

# 启动qemu-mips 32的虚拟机
$ sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic,macaddr=00:16:3e:00:00:01 -net tap -nographic  
QEMU虚拟机启动的结果截图:



05.配置MIPS系统的网络

使用 "ifconfig -a" 命令,查看网络接口是否已经分配了IP地址,如果没有分配,则可以通过如下的方法使用 DHCP 获取IP地址。

获取网络接口,命令如下:

# 先查看mips虚拟机系统的网络接口。
root@debian-mips:~# ifconfig -a
执行的结果如下图所示:



通过 ifconfig 命令得到网络接口名称为 "eth1" 。因此需要 编辑 mips虚拟机 的 /etc/network/interfaces文件,修改网络接口的名称。

root@debian-mips:~# nano /etc/network/interfaces
原 /etc/network/interfaces文件中的内容如下:



将 /etc/network/interfaces原文件中的 "eth0" 修改为通过 ifconfig 命令得到的网络接口名 "eth1"。修改后的 /etc/network/interfaces文件的内容如下:



单击 "Enter" 键,然后保存修改后的/etc/network/interfaces文件的内容。使用 ifup 命令启用 eth1 网络接口,执行命令如下图:

root@debian-mips:~# ifup eth1
执行结果如下图:



使用 ifconfig  命令,查看MIPS主机是否分配IP地址成功。

root@debian-mips:~# ifconfig 
执行的结果如下图:



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

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



06.通过SSH连接MIPS虚拟机

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

fly2016@ubuntu:~$ ssh root@192.168.159.133
执行结果如下图:



通过 scp 向MIPS虚拟机拷贝本地ubuntu上的文件,执行下面的命令:

# 从本地ubuntu系统向远端的MIPS虚拟机上传文件
$ scp ./busybox root@192.168.159.133:/root/
执行结果如图:



有关Linux系统的 scp 命令的使用,直接参考网址:http://www.runoob.com/linux/linux-comm-scp.html

Linux scp命令用于Linux之间复制文件和目录。

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

语法

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2

简易写法:

scp [可选参数] file_source file_target 

参数说明:

  • -1: 强制scp命令使用协议ssh1
  • -2: 强制scp命令使用协议ssh2
  • -4: 强制scp命令只使用IPv4寻址
  • -6: 强制scp命令只使用IPv6寻址
  • -B: 使用批处理模式(传输过程中不询问传输口令或短语)
  • -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
  • -p:保留原文件的修改时间,访问时间和访问权限。
  • -q: 不显示传输进度条。
  • -r: 递归复制整个目录。
  • -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
  • -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
  • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
  • -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
  • -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
  • -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
  • -P port:注意是大写的P, port是指定数据传输用到的端口号
  • -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

实例

1、从本地复制到远程

命令格式:

scp local_file remote_username@remote_ip:remote_folder 
或者 
scp local_file remote_username@remote_ip:remote_file 
或者 
scp local_file remote_ip:remote_folder 
或者 
scp local_file remote_ip:remote_file 

  • 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
  • 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;

应用实例:

scp /home/space/music/1.mp3 root@www.w3cschool.cc:/home/root/others/music 
scp /home/space/music/1.mp3 root@www.w3cschool.cc:/home/root/others/music/001.mp3 
scp /home/space/music/1.mp3 www.w3cschool.cc:/home/root/others/music 
scp /home/space/music/1.mp3 www.w3cschool.cc:/home/root/others/music/001.mp3 

复制目录命令格式:

scp -r local_folder remote_username@remote_ip:remote_folder 
或者 
scp -r local_folder remote_ip:remote_folder 
  • 第1个指定了用户名,命令执行后需要再输入密码;
  • 第2个没有指定用户名,命令执行后需要输入用户名和密码;

应用实例:

scp -r /home/space/music/ root@www.w3cschool.cc:/home/root/others/ 
scp -r /home/space/music/ www.w3cschool.cc:/home/root/others/ 

上面命令将本地 music 目录复制到远程 others 目录下。

2、从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例

应用实例:

scp root@www.w3cschool.cc:/home/root/others/music /home/space/music/1.mp3 
scp -r www.w3cschool.cc:/home/root/others/ /home/space/music/

说明

1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -p 参数来设置命令的端口号,命令格式如下:

#scp命令使用端口号 4588
scp -p 4588 remote@www.w3cschool.cc:/usr/local/sin.sh /home/administrator

2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。


说明:有关MIPS系统网络配置相关的操作,网上查了很久也没有找到比较好的阐述资料,本文主要参考的是《揭秘家用路由器0day漏洞挖掘技术》这本书。

相关的官方的参考资料地址:

https://www.aurel32.net/info/debian_mips_qemu.php

https://en.wikibooks.org/wiki/QEMU/Networking#TAP.2FTUN_device

http://www.fedoraforum.org/forum/showpost.php?p=530775&postcount=1


<think>好的,我需要回答用户关于使用angr工具检测路由器中的命令注入漏洞的问题。首先,我得了解angr的基本功能和它在漏洞检测中的应用。angr是一个基于符号执行的二进制分析框架,常用于自动化漏洞挖掘和逆向工程。符号执行可以探索程序的不同路径,这对于发现命令注入这类需要触发特定输入条件的漏洞应该有帮助。 接下来,用户提到的路由器固件通常是嵌入式系统,可能存在命令注入漏洞,比如通过SNMP协议或其他接口传入恶意参数。RPFuzzer在Cisco路由器上发现了漏洞,但用户想知道angr是否适用。需要比较angr和RPFuzzer的不同,可能angr更通用,而RPFuzzer是专门针对路由器的工具。 然后,我需要考虑使用angr的具体步骤。首先获取路由器的固件,提取目标二进制文件,比如处理用户输入的函数或网络服务模块。然后使用angr进行符号执行,设置入口点,符号化输入参数,探索路径,并检测危险函数(如system、exec)的参数是否受污染。如果发现符号变量能控制这些函数的参数,就可能存在命令注入漏洞。 还要分析可行性。优势方面,angr的路径探索能力能覆盖多执行路径,发现深层漏洞,且不需要源代码。但挑战也不少,比如路由器的架构可能特殊(如MIPS、ARM),需要正确配置angr的环境;路径爆炸问题可能导致分析时间过长;还有模拟硬件和外设交互的困难,可能影响分析的准确性。 最后,需要给出建议步骤,比如结合静态分析缩小范围,使用模糊测试补充angr的不足,或者定制符号执行策略处理硬件依赖。同时,引用提到的RPFuzzer案例,说明动态分析和符号执行在路由器漏洞检测中的有效性,但angr可能需要更多定制化工作。 总结时,要确认angr的可行性,但也指出实际应用中需要考虑的挑战和可能的解决方案,帮助用户全面了解情况。</think>### angr检测路由器命令注入漏洞的方法及可行性分析 #### 一、angr的基本原理 angr是基于符号执行的二进制分析框架,能够在不执行程序的情况下,通过数学建模探索程序所有可能的执行路径[^1]。其核心能力包括: 1. **符号化输入**:将用户输入转化为符号变量(如$x$) 2. **路径探索**:自动遍历不同分支路径 3. **约束求解**:使用Z3等求解器验证路径可达性 #### 二、检测命令注入的步骤 1. **目标定位** - 提取路由器固件中处理用户输入的关键模块(如SNMP服务、Web接口) - 识别危险函数调用点:`system()`、`execve()`、`popen()` 2. **符号执行配置** ```python import angr proj = angr.Project('firmware.bin', arch='ARM') state = proj.factory.entry_state() ``` 3. **输入建模** -网络数据包/配置文件等输入源进行符号化: ```python input_data = state.solver.BVS('input', 8*1024) # 创建1024字节符号变量 ``` 4. **漏洞检测规则** ```python def check_command_injection(state): if state.satisfiable(extra_constraints=[state.regs.pc == system_call_addr]): return has_untainted_argument(state, 'system') return False ``` #### 三、可行性评估 **优势:** 1. **路径覆盖**:能发现传统测试遗漏的分支路径 2. **零误报验证**:可通过约束求解确认漏洞可达性 3. **无源码支持**:直接分析二进制文件 **挑战:** 1. **架构适配**:需准确配置MIPS/ARM等嵌入式架构环境 2. **环境建模**:需人工定义硬件寄存器/外设交互 $$ \exists x \in Input,\ \texttt{strstr}(x, "&&") \neq \texttt{NULL} $$ 3. **性能限制**:复杂固件可能产生路径爆炸问题 #### 四、实践建议 1. **混合分析策略**: - 先使用Ghidra进行静态分析定位可疑点 - 再使用angr进行定向符号执行 2. **硬件模拟增强**: ```python from angr.simos import SimUserland proj = angr.Project('firmware.bin', main_opts={'backend':'blob'}, arch='ARMEL', os=SimUserland) ``` 3. **结果验证**: - 结合QEMU模拟执行验证漏洞有效性 - 对比RPFuzzer等专用工具的检测结果
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值