总结了路由器搭建之中存在的问题 | 申博官网
登录
  • 欢迎进入Sunbet!
  • 如果您觉得Sunbet对你有帮助,那么赶紧使用Ctrl+D 收藏Sunbet并分享出去吧
  • 您好,这里是Sunbet!

总结了路由器搭建之中存在的问题

Sunbet_人物事迹 申博 347次浏览 已收录 0个评论

媒介

近来在进修 IOT 平安这方面的学问,置信入门学这块都是从路由器的破绽发掘最先起步的。为了测试路由器破绽必定要搭建情况,一样平常都是运用模仿的仿真情况而不是运用真机。固件仿真能够用于许多欠亨的目的,好比供应一个更好的要领来剖析固件,测试应用,完成长途调试等。

一样平常模仿情况会运用 qemu 或许 AttifyOS VM搭建,二者算是各有上风吧。这里我挑选了 qemu。笔者在搭建情况的时刻碰到了许多题目,踩了很多坑,对比这《揭秘家用路由器 0day 破绽发掘手艺》和网上的材料。然则网上的解决方案大多都是不太全或许讲的含糊不清。这里较细致地总结纪录一下本身在搭建全部情况中碰到的一些题目,愿望能给有须要的读者一些资助和启示。

qemu 的引见

QEMU 是一个面向完全 PC 体系的开源仿真器。除仿真处理器外,QEMU 还许可仿真一切须要的子体系,如连网硬件和视频硬件。它还许可完成高等概念上的仿真(如对称多处理体系(多达 255 个 CPU)和其他处理器架构(如 ARM 和 PowerPC)。

这里的 qemu 虚拟机的搭建就是在 Vm Ubuntu 虚拟机下再运用 qemu 来搭建一个 mips 体系的虚拟机,将路由器体系固件放在内里运转。

binwalk、sasquatch 的装置

这两个对象的装置对照简单,也没啥题目,就装置书上的步调来了。

binwalk 装置

sudo apt-get install binwalk
或许
sudo git clone https://github.com/devttys0/binwalk.git

sasquatch SquashFS 装置

sudo apt-get install zlib1g-dev liblzma-dev liblzo2-dev
sudo git clone https://github.com/devttys0/sasquatch
cd sasquatch && sudo make && sudo make install

qemu 的装置

这个网上的装置教程许多,装置历程当中也不会涌现甚么太多的题目

sudo apt-get install qemu

交织编译情况 buildroot 的装置

一般的装置步调是依照《揭秘家用路由器 0day 破绽发掘手艺》的书上的操纵来的,然则在装置的历程当中会涌现许多题目:

sudo apt-get install libncurses5-dev patch
wget http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshots.tar.bz2
tar -jxvf buildroot-snapshots.tar.bz2
cd buildroot/
make clean
make menuconfig
sudo make

ncurses 库缺失毛病

在 make menuconfig 时,可能会涌现以下的毛病,由于缺少了 Configuration 界面的图形字符支撑

*** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.

在接着装置这两个库

sudo apt-get install libncurses-dev curses-devel

然而又报了稀里糊涂的错

正在读取软件包列表... 完成
正在剖析软件包的依靠干系树       
正在读取状况信息... 完成       
注重,选中 'libncurses5-dev' 而非 'libncurses-dev'
libncurses5-dev 已经是最新版 (6.0+20160213-1ubuntu1)。
晋级了 0 个软件包,新装置了 0 个软件包,要卸载 0 个软件包,有 478 个软件包未被晋级。

这里最直接的要领就是装置一切的 libncurses 支撑库,即

sudo apt-get install libncurs*

装置完成后从新输入 make menuconfig,就一般了。

总结了路由器搭建之中存在的问题

接着依照教程的步调设置装备摆设好编译选项就好了,这里的 Target Architecture Varient 选为 Mips 32,至于编译大端或许小端顺序的题目,背面会涌现。

编译好后输入 mipsel ,tab 键补全,能够看到都是 mipsel 开首的顺序(途径在 buildroot/output/host/bin,发起直接设置装备摆设好情况变量),也就是说用 mipsel-linux-gcc 编译出来的顺序默许是小端顺序。有些人编译出的是 mips-linux-gcc 也就是说编译出来的默许是大端的顺序。(为何会有这类差别照样不太清晰…多是在上面的设置装备摆设选项的分歧)

总结了路由器搭建之中存在的问题

然则这其实不影响巨细端的相互编译,接着看背面的题目。

mipsel-linux-gcc 编译大端顺序

在编写同享库的时刻,常常须要依据路由器是大端顺序或许是小端顺序来挑选编译,不然会报下面的错,不是一个 ELF 文件。缘由就是目的体系支撑的是大端的顺序,而编译出来的是小端的顺序,作为同享库加载时就会发生这类不婚配的题目

nick@nick-machine:~/iot/firmware/dir-605l/_dir605L_FW_113.bin.extracted/squashfs-root-0$ ./qemu-mips -L ./ -E LD_PRELOAD="./lib.so" ./bin/boa

./bin/boa: './lib.so' is not an ELF executable for MIPS
./bin/boa: can't load library './lib.so'

比方我这边默许编译出来的是小端顺序:

demo.c

#include <stdlib.h>
#include <malloc.h>


int main(){

        int *a;
        a = malloc(0x10);

        puts("demo");
        return 0;
}
~

gcc 编译,看到是个 LSB(小端顺序)

nick@nick-machine:~/iot/program$ mipsel-linux-gcc demo1.c -static -o demo
nick@nick-machine:~/iot/program$ file demo
demo1: ELF 32-bit LSB  executable, MIPS, MIPS32 version 1 (SYSV), statically linked, not stripped

运用 man gcc 可知如果要编译成大端顺序的话,须要加上 -EB 参数

总结了路由器搭建之中存在的问题

然则加上 -EB 以后,照样报错了,缘由是在 ld 链接时默许是没有加上这个参数的,以是这里须要手动加上,也就是将编译和链接分两步

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

总结了路由器搭建之中存在的问题

准确的用法:
即编译和链接离开

mipsel-linux-gcc demo.c -EB -c -static -o demo1    编译
mipsel-linux-ld demo1 -EB -o demo                  链接
  • 如果编译成同享库的话,两步都要加上 -shared 参数

末了胜利编译成大端的顺序:

nick@nick-machine:~/iot/program$ file demo
demo: ELF 32-bit MSB  executable, MIPS, MIPS32 version 1 (SYSV), statically linked, not stripped

chroot 敕令题目

在模仿路由器 web 界面时,须要运用 chroot 来界说路由器固件的根目次,以便顺序运转能加载到响应的 lib 库,然则在运用 qemu-mips 的时刻会报错:

nick@nick-machine:~/iot/firmware/dir-605l/_dir605L_FW_113.bin.extracted/squashfs-root-0$ sudo chroot . ./qemu-mips -E LD_PRELOAD="./test" ./bin/boa
chroot: failed to run command './qemu-mips': No such file or directory

解决要领

须要装置运用 qemu-mips-static 才能够

apt-get install qemu binfmt-support qemu-user-static

sudo chroot . ./qemu-mips-static -E LD_PRELOAD="./test" ./bin/boa
  • 这里若运用 qemu-mips 的 -L 参数指定路由器的根目次能够在 user-mode 下运用,然则在 system-mode 下就没法运用。(加载不到路由器的 lib 目次)

qemu-system-mode 黑屏题目

依照装置教程下载好内核驱动以后,运用下面的敕令翻开,发明全部就黑屏了

sudo qemu-system-mips64 -M malta -kernel vmlinux-2.6.32-5-5kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic,macaddr=00:0c:29:ee:39:39 -net tap -nographic

总结了路由器搭建之中存在的问题

解决要领

装置 qemu-kvm

sudo apt-get install qemu-kvm libvirt virt-install virt-manager

而且最幸亏官网上下载运用 32 位的 mips 体系的内核镜像,即运用 qemu-system-mips 替代 qemu-system-mips64

反编译插件的装置

jeb-mips

jeb 版本的 mips 反汇编对象,支撑伪代码的反编译

在反编译窗口右键 -> 剖析,就可以看到响应的伪代码

总结了路由器搭建之中存在的问题

Retdec

这个是 IDA 中的插件,用着很轻易。然则这个装置对照贫苦,须要编译一大堆器械,笔者太菜了搞了好次没出来

qemu-system-mode 的收集设置装备摆设

编译当地网卡设置装备摆设

sudo vi /etc/network/interfaces

写入下面的内容

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
up ifconfig eth0 0.0.0.0 up
auto br0
iface br0 inet dhcp
  bridge_ports eth0
  bridge_stp off
  bridge_maxwait 1

设置装备摆设 qemu 虚拟机的网卡信息:

sudo vi /etc/qemu-ifup

将本来的内容解释,换成下面的内容:

echo "Executing /etc/qemu-ifup"
echo "bridge networking"
echo "Bringing up $1 for bridge mode"
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0"
sudo /sbin/brctl addif br0 $1
sleep 3

以后开启 br0 网卡,并重启网卡见效

sudo ifup br0

sudo /etc/init.d/networking restart

输入下面的的敕令,进入以后体系是如许的

sudo qemu-system-mips -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

总结了路由器搭建之中存在的问题

进去虚拟机以后,如果发明只要网卡的其他信息、没有 IP 地点,能够手动设置装备摆设一下 eth0 网卡的 IP

ifconfig eth0 192.168.123.150/24

这边的网段须要和 ubuntu 上的 br0 网卡位于统一网段上。

总结了路由器搭建之中存在的问题

  • 这里依照笔者的明白, br0 网卡就相当于本机到虚拟机的一个网卡映照

Sunbet|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明总结了路由器搭建之中存在的问题
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址