技术分享:逆向破解华为路由器第二部分

引文

第一部分,我通过UART进行了调试,并在最后利用命令行页面利用shell 命令就可以获取root权限了。也就是在这一点上,我已经可以访问路由器了,之后就可以像测试人员一样去调试路由器了。开始的时候给人感觉这个路由器还是相对容易访问,不需要昂贵的工具,往往也会产生非常有趣的结果。如果想要在硬件方向进行逆向工作,但是没有什么时间。这往往会进行不到一个更高的层次,例如网络漏洞、ISP 协议等。

本文仅代表原文作者意图,同时文章中介绍的工具、技术带有一定的攻击性,请合理合法使用。

回顾

下图都是之前分析的结果

按下回车,就会看到“Welcome to ATP Cli ”信息以及一个登陆提示。经过尝试之后就可以利用默认密码 admin:admin成功登陆,然后我们得到了BusyBox。

-------------------------------
-----Welcome to ATP Cli------
-------------------------------
Login: admin
Password:    #Password is ‘admin‘
ATP>shell
BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash)
Enter ‘help‘ for a list of built-in commands.
# ls
var   usr   tmp   sbin  proc  mnt   lib   init  etc   dev   bin

在这里我们可以分析到固件(Ralink IC)的三个层面

U-boot: 设备引导程序。可以分析到设备的内存映射,可以启动固件程序以及执行一些相对低级别的任务。

ATP: 可控制裸机、并行处理等。基本上可以被看做是linux内核。

Busybox:一个集成了一些最常用linux命令和工具的工具箱,它同时为我们提供了一些shell命令。

如果在整个过程中获取低级别的访问权限,当然不会访问所有的数据。但在这里合理使用BusyBox是一个很好的机会。现在我把注意力集中在引导顺序,而再启动过程中显示的一些数据也是很重要的,下面就来看看哪些能被我用到。

引导顺序

在引导顺序中出现了多个随机项,当然还有一些其它的信息,比如压缩算法(flash segments)

Intel的闪存很有用,在这我可以分析它。

更多的信息

当我们访问闪存数据的时候,就需要处理压缩算法,这样可以更好地了解哪些是被使用的。

ATP 以及BusyBox

在路由器里面的Ralink IC,它主要是和固件( ATP)来控制存储单元以及并行处理数据,同时保证了硬件的工作状态。也就是它(ATP)可以被认为是一个Linux内核,之前所知道的ATP的CLI,但非常有局限性。

ATP>help
Welcome to ATP command line tool.
If any question, please input "?" at the end of command.
ATP>?
cls
debug
help
save
?
exit
ATP>

在这里的shell命令中没提及help命令,但它通常是出现在sh以及shell。 ATP CLI里面有少于10个命令,当然这里面就没有复杂的控制文件方式以及文件导航,这就是为什么BusyBox出现的原因。

BusyBox含有二进制文件以及常见的Unix命令,开发很方便,值得注意的是节约内存。从 ls、cd 命令到top,系统开始启动脚本程序,这些都可以允许我可以将Ralink IC当Linux box一样使用。

进入BusyBox可以看到 shell命令,以及运行这些命令

ATP>shell
BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash)
Enter ‘help‘ for a list of built-in commands.
# ls
var   usr   tmp   sbin  proc  mnt   lib   init  etc   dev   bin
#
# ls /bin
zebra        swapdev      printserver  ln           ebtables     cat
wpsd         startbsp     pppc         klog         dns          busybox
wlancmd      sntp         ping         kill         dms          brctl
web          smbpasswd    ntfs-3g      iwpriv       dhcps        atserver
usbserver    smbd         nmbd         iwconfig     dhcpc        atmcmd
usbmount     sleep        netstat      iptables     ddnsc        atcmd
upnp         siproxd      mount        ipp          date         at
upg          sh           mldproxy     ipcheck      cwmp         ash
umount       scanner      mknod        ip           cp           adslcmd
tr111        rm           mkdir        igmpproxy    console      acl
tr064        ripd         mii_mgr      hw_nat       cms          ac
telnetd      reg          mic          ethcmd       cli
tc           radvdump     ls           equipcmd     chown
switch       ps           log          echo         chmod
#

你会注意到BusyBox的不同,而分析文件系统,如busybox的链接文件/bin/,这不是一个很好的开始,敏感的数据不会存放在这里(BusyBox binary)的。

分析文件系统

现在我已经得出哪些命令是可用的了,然后再看看有什么有用处的数据在那,所以先对系统有个大致的了解之后,我不想显示每一处的详细数据。而这里也需要用到top命令,top命令用来显示执行中的程序进程,使用权限是所有用户。虽然目前路由器闲置,但是没有显示更多信息。

有一个进程显示正在运行usbmount,而在这里路由器的USB接口也起到了作用,插上一个U盘。

usb 1-1: new high speed USB device using rt3xxx-ehci and address 2
[...]
++++++sambacms.c 2374 renice=renice -n +10 -p 1423

插入之后,安装位置在 /mnt/usb1_1/,然后一个samba服务器启动了,这些相关文件都是在/etc/samba/

# ls -l /etc/samba/
-rw-r--r--    1 0        0             103 smbpasswd
-rw-r--r--    1 0        0               0 smbusers
-rw-r--r--    1 0        0             480 smb.conf
-rw-------    1 0        0            8192 secrets.tdb
# cat /etc/samba/smbpasswd
nobody:0:XXXXXXXXXXXXXXXXXXX:564E923F5AF30J373F7C8_______4D2A:[U ]:LCT-1ED36884:

更多的数据

netstat -a: 查看开启了哪些端口

iptables –list:我们可以设置远程登录以及继续连接网络,但我更愿意维持裸机状态。

wlancmd help:远程控制无线信号。

/etc/profile

/etc/inetd

/etc/services

/var/:系统运行时所用到的文件位置

/etc/:系统配置文件等

/var/ 以及 /etc/ 这些位置都包含了大量的文件,那么/etc/serverkey.pem是什么情况?

在嵌入式设备中发现TLS证书(私匙)是很正常的一件事情,在单一型号的设备可以获取到私匙,这也有助于你检测同一型号的设备。该私匙可以从服务商获得,另一方面获得公共证书用于远程的服务器通信也很常见。我在这里找到了两个,这两个都是来自“同一个人的签名”。

/etc/servercert.pem:最有可能是服务器密钥

/etc/root.pem:可以连接服务器吧(不确定)

更多的数据在/etc/ppp256/config 以及/etc/ppp258/config:

这些验证身份凭据的信息也会通过 HTTP接口,这也是我为什么提出这个概念的原因,以后会提及。有了这么多的信息可能需要消耗更多的时间去分析,这里需要用到之前的盘来复制数据进行分析。

收集信息

一旦将收集到的数据信息复制到计算机之后,可以搜索一些文件find . -name *.pem,但没有出现其它的TLS证书。想要在文件中搜索password肿么办?grep -i -r password 。

在这里我可以看到证书信息,主要是提供给TR-069、本地服务以及STUN协议,STUN是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。当然这些都可以通过HTTP接口来实现,但这些通常是隐藏的。如果想要想要相信了解可以看 这篇文章“Beyond Your Cable Modem”,这里有很多有关TR-069协议以及其它一些内容。我也可以获取到BASE64格式的证书信息,但是数据加密稍微差一点。

$ echo “QUJCNFVCTU4=” | base64 -D
ABB4UBMN

这是在路由器里面设置的WiFi密码,它向我们展示了两个有趣的文件,不仅仅指的是内容,而是路由器在工作时的重要组成部分

/var/curcfg.xml:当前配置文件,主要是包括当时设置的WiFi密码(base64格式)。

/etc/defaultcfg.xml:默认配置文件,被用于恢复出厂设置,但不包括路由器的默认密码信息。

ATP(CLI)

ATP(CLI)仅仅提供少量的命令,最有意思的是-shell-调试,但看起来并不是像真正意义的调试( debug display),而仅仅给我提供一些命令igmpproxy、 cwmp、 sysuptime以及atpversion,但这些没有太大用。我在考虑cwmp命令是否可以起到作用,是不是和路由器的远程配置有关?

值得注意的是,CWMP (TR-069)也是与路由器远程有关联的,甚至可能都没有编码时间。而在这一点上其余(ATP)命令是没有用的,清屏、帮助菜单、保存以及退出,这些貌似对于这一步作用都不大。

引导程序命令行界面

引导程序命令行界面可以访问某些内存区域,但不幸的是,它没有给我权限让我直接能够访问闪存芯片,下面就可以看到相关信息

Please choose operation:
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
You choosed 4
Stopped Uboot WatchDog Timer.
4: System Enter Boot Command Line Interface.
U-Boot 1.1.3 (Aug 29 2013 - 11:16:19)
RT3352 # help
?       - alias for ‘help‘
bootm   - boot application image from memory
cp      - memory copy
erase   - erase SPI FLASH memory
go      - start application at address ‘addr‘
help    - print online help
md      - memory display
mdio   - Ralink PHY register R/W command !!
mm      - memory modify (auto-incrementing)
mw      - memory write (fill)
nm      - memory modify (constant address)
printenv- print environment variables
reset   - Perform RESET of the CPU
rf      - read/write rf register
saveenv - save environment variables to persistent storage
setenv  - set environment variables
uip - uip command
version - print monitor version
RT3352 #

这里需要注意的是不要启用这些命令 erase、mm、 mw以及nm,除非你需要用到这些的时候,当然这些应该和这一步没有关系,在某些情况下会导致设备重启,然后设备变成了砖头。在此情况下,md(内存显示)以及printenv命令引起我的注意。

RT3352 # printenv
bootcmd=tftp
bootdelay=2
baudrate=57600
ethaddr="00:AA:BB:CC:DD:10"
ipaddr=192.168.1.1
serverip=192.168.1.2
ramargs=setenv bootargs root=/dev/ram rw
addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):$(netdev):off
addmisc=setenv bootargs $(bootargs) console=ttyS0,$(baudrate) ethaddr=$(ethaddr) panic=1
flash_self=run ramargs addip addmisc;bootm $(kernel_addr) $(ramdisk_addr)
kernel_addr=BFC40000
u-boot=u-boot.bin
load=tftp 8A100000 $(u-boot)
u_b=protect off 1:0-1;era 1:0-1;cp.b 8A100000 BC400000 $(filesize)
loadfs=tftp 8A100000 root.cramfs
u_fs=era bc540000 bc83ffff;cp.b 8A100000 BC540000 $(filesize)
test_tftp=tftp 8A100000 root.cramfs;run test_tftp
stdin=serial
stdout=serial
stderr=serial
ethact=Eth0 (10/100-M)

Environment size: 765/4092 bytes

我可以看到类似于UART 的波特率设定信息,以及一些有意思的存储单元地址。这些地址信息应该不是闪存的,虽然其存储器仅需要三个字节就可以搞定:[0x00000000, 0x00FFFFFF]。

让我们来看看这里都有哪些有用的信息,访问接口之类的,这个kernel_addr=BFC40000怎么样?

出现了有关badd的信息,也就意味着无效的地址。之前已经通过md命令来进行硬编码,来让你知道你正在试图访问无效的内存地址,这不是好的方案,但是也没有能够访问之前的启动信息。

值得注意的是,我在之前已经通过引导程序命令行界面停止linux内核加载到内存的进程,那么这个接口访问的信息就比较有限了。

我可以在内存中使用这种方法(SPI Flash 图像string编码)查找随机数据,但这个没有什么特别含义,仅仅用它来熟悉存储结构,例如在0x000d0000位置有明显变化。

在使用md命令之后,就可以看到0x000d0000位置的变化了。

以后的文章将会结合固件信息来分析详细数据,以及从系统方向下手来获取更多的数据。

*参考来源jcjc-dev

时间: 2024-10-19 15:34:45

技术分享:逆向破解华为路由器第二部分的相关文章

技术分享:逆向破解华为路由器第一部分

写在前面的话 下面将会介绍逆向一个路由器的过程,准确的说是一台华为 HG533路由器. 本文仅代表原文作者意图,同时文章中介绍的工具.技术带有一定的攻击性,请合理合法使用. 正文 前面的思路也比较简单就是寻找串口,而这个串口也是预留性质的一个串口,主要是为了后期调试以及升级设备时使用.而对于路由器你可以看做是一个小型的嵌入式设备,从打印机到智能相机都可以这么看待,而串口有时候是隐藏起来的,我们的目的就是找到这个串口然后调试设备.利用串口可以访问路由器的CFE.观察boot和调试信息.通过一个Sh

2017-2018-2 《网络对抗技术》 20155322 第二周 Exp1 PC平台逆向破解(5)M

2017-2018-2 <网络对抗技术> 20155322 第二周 Exp1 PC平台逆向破解(5)M 1-实践目标 1.1-实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Sh

2017-2018-2 《网络对抗技术》 20155319 第二周 Exp1 PC平台逆向破解(5)M

2017-2018-2 <网络对抗技术> 20155319 第二周 Exp1 PC平台逆向破解(5)M 一.实践目标 1.1实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何She

20145331魏澍琛 《网络对抗技术》 PC平台逆向破解

20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode 的地址. 2.Return-to-libc 攻击实验:即使栈有不可执行的能力,无法将shellcode放入堆栈中运行,但我们却可以直接让漏洞程序调转到现存的代码来实现我们的攻击. 注入Shellcode并执行 1.设置环境 2.以 anyt

网络对抗技术 2017-2018-2 20152515 Exp1 PC平台逆向破解(5)M

PC平台逆向破解 实践内容1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转的偏移计算,补码,反汇编指令objdump,十六进制编辑工具 学习目标:理解可执行文件与机器指令 进阶:掌握ELF文件格式,掌握动态技术 实践目标 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 实践步骤 首先让我们对pwn文件进行一个反汇编,可以看到文件中的是跳转到foo函数 让我们把文件转换成十六进制看一下 找到 d7 的位置 把 d7 修改为 c3 将

20155338《网络对抗技术》 Exp1 PC平台逆向破解

20155338<网络对抗技术> Exp1 PC平台逆向破解 实践目标 1.实践的对象是一个名为pwn1的linux可执行文件. 2.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 3.该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 4.本次实践主要是学习两种方法: (1).利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发get

2017-2018-2 20155333 《网络对抗技术》 Exp1 PC平台逆向破解

2017-2018-2 20155333 <网络对抗技术> Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何S

20155231 邵煜楠《网络对抗技术》实验一 PC平台逆向破解

20155231 邵煜楠<网络对抗技术>实验一 PC平台逆向破解 实验内容 直接修改程序机器指令,改变程序执行流程: 通过构造输入参数,造成BOF攻击,改变程序执行流: 注入Shellcode并执行. 实验步骤 一: 下载目标文件pwn1,反汇编 利用 objdump -d pwn1 对pwn1进行反汇编: 用vi pwn1打开pwn1: 利用%!xxd将文件转换成16进制显示,利用/e8 d7ff ffff进行搜索将d7改为c3(计算"0804847d(getshell)-0804

【华为云技术分享】漫谈LIteOS-物联网操作系统介绍

[摘要] 本文主要对于目前物联网操作系统的定义以及主要特点进行了分析,最后介绍了几个常见的物联网操作系统. 1简介 提到操作系统,可能首先想到的就是苹果操作系统,windows,Linux,Unix,Android,IOS等,显然目前比较为人熟知的操作系统基本都是一些手机或者电脑端的操作系统.而随着互联网技术的不断发展,硬件的体积越来越小,物联网技术也迎来了爆棚式的发展.物理网不同于 互联网的不同在于后者更关注的是人与人的互联,而前者是更加强调人与物,物与物的连接,从而实现万物互联(IOT).显