去年写10月份的一篇文章 在这里挂一下 接下来会继续写几篇
真正入坑IOT的第一次 写在前面 暑假里参加了xman和华为的HWS夏令营 只能说当时太划水 导致实操一点都没跟上 现在开始真正入坑IOT了 希望以后能在IOT技术上有所成就
D-LINK DWR 932固件提取 下载固件 直接谷歌就可以搜得到资源
解压固件 会发现 zip 文件有加密 拿个爆破工具直接爆破就好 ( 我直接搜到了密码 怪我咯
Binwalk提取固件 1 2 3 4 5 6 7 8 9 10 11 12 13 da39a3ee5e6b4b0d3255bfef95601890afd80709 02.02 EU dcee0a4028a5a9acaf012532b4c8ad454ae0dcd8 2 K-mdm-image-boot-mdm9625.img 362 a9ba52ec960850118f959c35acef7a9a43613 2 K-mdm-image-mdm9625.yaffs2 7 b2ebcae636f12d94f1ddea1cf108b02df0c0c32 2 K-mdm-recovery-image-boot-mdm9625.img 19 e59adb303206cd5b234a36848f37e7774680c8 2 K-mdm-recovery-image-mdm9625.yaffs2 c58b219f2f30509ff616876b3974e8e4250c54d1 2 K-mdm9625-usr-image.usrfs .yaffs2 9 b0f2fce3c932bc3ba1f1f929a198f3d10a457be appsboot.mbn a1fabcd1d98090dbcb778288b45fcf75dbe9e474 mba.mbn d8a5eb2ee3ea47214f6a30838c45485921ec686d qdsp6sw.mbn 75 ee33b48c2f3b80e3f476c80099ae2694ce54e3 rpm.mbn 94317 de508e9f0007b2c8d0e108c23bde286f839 sbl1.mbn a5fd3f79d497dbf38a87d6db7ae9bc63bc3635dc tz.mbn 264 c0ef78a11700e1c030f312322a51ff190a066 wdt.mbn
好家伙 文件都在这了
我们可以看到有一些 yaffs2 文件 我们可以 binwalk 一把梭 或者用针对 yaffs2 格式的工具直接开搞
这里我直接binwalk 2333
1 binwalk -Me 2K-mdm-image-mdm9625.yaffs2
然后得到了一个tar包
1 2 3 ┌──(godrun㉿kali)-[~/IOT/dlink-dwr932b/DWR-932_B1_FW v.02.02EU/_2K-mdm-image-mdm9625.yaffs2.extracted] └─$ ls 0.yaffs 8B8C0B.tar
看一下是不是我们想要的 tar包
显示这个tar格式损坏 emmmm 查了下
Yaffs(Yet Another FlashFile System)文件系统是专门针对NAND闪存设计的嵌入式文件系统,目前有YAFFS和YAFFS2两个版本,两个版本的主要区别之一在于YAFFS2能够更好的支持大容量的NAND FLASH芯片
还是用 unyaffs 吧 害
搜了半天怎么下 结果试了下 直接 apt (吐了)
然后搞 yaffs 文件 ( 要在root权限下运行)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ┌──(root💀kali)-[/home/…/IOT/dlink-dwr932b/DWR-932_B1_FW v.02.02EU/yaffs2-root] └─ 总用量 96 drwxr-xr-x 21 root root 4096 7月 19 2014 . drwxr-xr-x 3 godrun godrun 4096 10月 5 15:04 .. drwxr-xr-x 2 root root 12288 7月 19 2014 bin drwxr-xr-x 2 root root 4096 7月 19 2014 boot -rw-r--r-- 1 root root 38 7月 19 2014 build.prop drwxr-xr-x 2 root root 4096 7月 19 2014 cache drwxr-xr-x 2 root root 4096 7月 19 2014 config drwxr-xr-x 2 root root 4096 7月 19 2014 config2 drwxr-xr-x 2 root root 4096 7月 19 2014 dev drwxr-xr-x 2 root root 4096 7月 19 2014 disk drwxr-xr-x 31 root root 4096 7月 19 2014 etc drwxr-sr-x 3 root root 4096 7月 19 2014 home drwxr-xr-x 4 root root 4096 7月 19 2014 lib lrwxrwxrwx 1 root root 12 7月 19 2014 linuxrc -> /bin/busybox drwxr-xr-x 10 root root 4096 7月 19 2014 media drwxr-xr-x 2 root root 4096 7月 19 2014 mnt drwxr-xr-x 2 root root 4096 7月 19 2014 proc drwxr-xr-x 2 root root 4096 7月 19 2014 sbin lrwxrwxrwx 1 root root 11 7月 19 2014 sdcard -> /media/card drwxr-xr-x 2 root root 4096 7月 19 2014 sys drwxrwxrwt 2 root root 4096 7月 19 2014 tmp drwxr-xr-x 2 root root 4096 7月 19 2014 usr drwxr-xr-x 7 root root 4096 7月 19 2014 var drwxr-xr-x 3 root root 4096 7月 19 2014 WEBSERVER lrwxrwxrwx 1 root root 8 7月 19 2014 www -> /usr/www
所以刚才binwalk没跑动 也是因为不是root?还是不行 555
分析文件系统 从这里开始,我们开始遍历文件系统中不同的目录,并从安全视角查找其中可能存在的漏洞的文件
查找所有配置文件 我们需要做的第一件事是查找所有配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ┌──(root💀kali)-[/home/…/IOT/dlink-dwr932b/DWR-932_B1_FW v.02.02EU/yaffs2-root] └─ ./etc/AR6004_AP1_hostapd.conf ./etc/AR6003_AP1_hostapd.conf ./etc/mdev.conf ./etc/igd/miniupnpd.conf ./etc/AR6003_hostapd.conf ./etc/host.conf ./etc/AR6004_hostapd.confl ./etc/dbus-1/system.conf ./etc/dbus-1/system.d/avahi-dbus.conf ./etc/dbus-1/session.conf ./etc/nsswitch.conf ./etc/inadyn-mt.conf ./etc/wpa_supplicant.conf ./etc/pimd.conf ./etc/avahi/avahi-daemon.conf ./etc/hostapd.conf ./etc/radvd.conf
查看配置文件的内容 因为配置文件中常常包含一些重要的信息 甚至是后门 ( 见 TCTF Final eeenginx)
当我们看到 ./etc/inadyn-mt.conf
文件时
1 2 3 4 5 6 --log_file /usr/inadyn_srv.log --forced_update_period 6000 --username alex_hung --password 641021 --dyndns_system default@no-ip.com --alias test.no-ip.com
我TM直接好家伙 username password 整整齐齐
当然 我们可能会在 .conf 文件之外找到更多的敏感信息
自动化信息搜索-firmwalker 1 2 ┌──(godrun㉿kali)-[~/CTFtools/firmwalker] └─$ ./firmwalker.sh /home/godrun/IOT/dlink-dwr932b/DWR-932_B1_FWv.02.02EU/yaffs2-root
直接搞到很多敏感的信息 可以说是十分的爽了
漏洞挖掘 密码泄露 我们从 /etc/shadow
下可以得到root 的密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ┌──(root💀kali)-[/home/…/dlink-dwr932b/DWR-932_B1_FWv.02.02EU/yaffs2-root/etc] └─ root:aRDiHrJ0OkehM:16270:0:99999:7::: daemon:*:16270:0:99999:7::: bin:*:16270:0:99999:7::: sys:*:16270:0:99999:7::: sync :*:16270:0:99999:7:::games:*:16270:0:99999:7::: man:*:16270:0:99999:7::: lp:*:16270:0:99999:7::: mail:*:16270:0:99999:7::: news:*:16270:0:99999:7::: uucp:*:16270:0:99999:7::: proxy:*:16270:0:99999:7::: www-data:*:16270:0:99999:7::: backup:*:16270:0:99999:7::: list:*:16270:0:99999:7::: irc:*:16270:0:99999:7::: gnats:*:16270:0:99999:7::: diag:*:16270:0:99999:7::: nobody:*:16270:0:99999:7::: messagebus:!:16270:0:99999:7::: avahi:!:16270:0:99999:7:::
然后 复制到 passwd.txt
中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ┌──(root💀kali)-[/home/…/dlink-dwr932b/DWR-932_B1_FWv.02.02EU/yaffs2-root/etc] └─ Created directory: /root/.john Using default input encoding: UTF-8 Loaded 1 password hash (descrypt, traditional crypt(3) [DES 64/64 MMX]) Will run 4 OpenMP threads Proceeding with single, rules:Single Press 'q' or Ctrl-C to abort, almost any other key for stat Almost done : Processing the remaining buffered candidate pa Warning: Only 86 candidates buffered for the current salt, Proceeding with wordlist:/usr/share/john/password.lst, rule 1234 (root) 1g 0:00:00:00 N/A 50.00g/s 507800p/s 507800c/s 507800C/s 12 Use the "--show" option to display all of the cracked passw Session completed
一波直接带走
自启动脚本文件
/etc/init.d 是 /etc/rc.d/init.d 的软链接(soft link)。可以通过 ll 命令查看。
都是用来放服务脚本的,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。
在制作服务脚本的过程中,使用了Linux的两个版本,CentOS和Ubuntu,需要在两个版本中都可以开机启动服务。但Ubuntu没有 /etc/rc.d/init.d这个目录,所以,为了保持同一种服务在CentOS和Ubuntu使用的统一性,将服务脚本(注:服务脚本在两个不同版本中是不同的)都放在 /etc/init.d 目录下,最终达到的效果是相同的。
需要说明的是:在CentOS和Ubuntu两个版本中,除了服务脚本放置的目录是相同的,服务脚本的编写及服务配置都是不同的。比如CentOS使用Chkconfig进行配置,而Ubuntu使用sysv-rc-conf进行配置。
https://blog.csdn.net/liudongdong19/article/details/79774171 (写linux启动过程的)
我们进去看一下 发现有许多脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ┌──(godrun㉿kali)-[~/…/DWR-932_B1_FWv.02.02EU/yaffs2-root/etc/init.d] └─$ ls -la 总用量 260 drwxr-xr-x 2 root root 4096 7月 19 2014 . drwxr-xr-x 31 root root 4096 10月 5 16:47 .. -rwxr-xr-x 1 root root 2482 7月 19 2014 adbd -rwxr-xr-x 1 root root 250 7月 19 2014 alignment.sh -rwxr-xr-x 1 root root 4735 7月 19 2014 avahi-daemon -rwxr-xr-x 1 root root 4490 7月 19 2014 avahi-dnsconfd -rwxr-xr-x 1 root root 492 7月 19 2014 banner.sh -rwxr-xr-x 1 root root 1529 7月 19 2014 bootlogd -rwxr-xr-x 1 root root 1680 7月 19 2014 bootmisc.sh -rwxr-xr-x 1 root root 681 7月 19 2014 busybox-cron -rwxr-xr-x 1 root root 3229 7月 19 2014 checkroot.sh -rwxr-xr-x 1 root root 151 7月 19 2014 chgrp-diag -rwxr-xr-x 1 root root 1591 7月 19 2014 data-init -rwxr-xr-x 1 root root 2781 7月 19 2014 dbus-1 -rwxr-xr-x 1 root root 526 7月 19 2014 devpts.sh -rwxr-xr-x 1 root root 408 7月 19 2014 diagrebootapp -rwxr-xr-x 1 root root 2674 7月 19 2014 dropbear -rw-r--r-- 1 root root 1123 7月 19 2014 functions -rwxr-xr-x 1 root root 510 7月 19 2014 halt -rwxr-xr-x 1 root root 270 7月 19 2014 hostname.sh -rwxr-xr-x 1 root root 2402 7月 19 2014 hwclock.sh -rwxr-xr-x 1 root root 348 7月 19 2014 keymap.sh -rwxr-xr-x 1 root root 169 7月 19 2014 mdev -rwxr-xr-x 1 root root 168 7月 19 2014 modem-shutdown -rwxr-xr-x 1 root root 878 7月 19 2014 modutils.sh -rwxr-xr-x 1 root root 859 7月 19 2014 mountall.sh -rwxr-xr-x 1 root root 1399 7月 19 2014 mountnfs.sh -rwxr-xr-x 1 root root 783 7月 19 2014 netmgrd -rwxr-xr-x 1 root root 1463 7月 19 2014 networking -rwxr-xr-x 1 root root 5114 7月 19 2014 populate-volatile.sh -rwxr-xr-x 1 root root 10835 7月 19 2014 power_config -rwxr-xr-x 1 root root 1136 7月 19 2014 qmi_shutdown_modemd -rwxr-xr-x 1 root root 610 7月 19 2014 qmuxd -rwxr-xr-x 1 root root 368 7月 19 2014 qrngd -rwxr-xr-x 1 root root 4346 7月 19 2014 rc -rwxr-xr-x 1 root root 525 7月 19 2014 rcS -rwxr-xr-x 1 root root 2015 7月 19 2014 reboot -rwxr-xr-x 1 root root 159 7月 19 2014 reset_reboot_cookie -rwxr-xr-x 1 root root 585 7月 19 2014 rmnologin.sh -rwxr-xr-x 1 root root 609 7月 19 2014 run-postinsts -rwxr-xr-x 1 root root 321 7月 19 2014 save-rtc.sh -rwxr-xr-x 1 root root 438 7月 19 2014 sendsigs -rwxr-xr-x 1 root root 978 7月 19 2014 set-hwver.sh -rwxr-xr-x 1 root root 1836 7月 19 2014 shutdown -rwxr-xr-x 1 root root 578 7月 19 2014 single -rwxr-xr-x 1 root root 2178 7月 19 2014 start_appmgr -rwxr-xr-x 1 root root 2138 7月 19 2014 start_ipacm_le -rwxr-xr-x 1 root root 764 7月 19 2014 start_QCMAP_ConnectionManager_le -rwxr-xr-x 1 root root 1001 7月 19 2014 start_qti_le lrwxrwxrwx 1 root root 8 7月 19 2014 stop-bootlogd -> bootlogd -rwxr-xr-x 1 root root 540 7月 19 2014 sysfs.sh lrwxrwxrwx 1 root root 14 7月 19 2014 syslog -> syslog.busybox -rwxr-xr-x 1 root root 1559 7月 19 2014 syslog.busybox -rwxr-xr-x 1 root root 659 7月 19 2014 thermal-engine -rwxr-xr-x 1 root root 516 7月 19 2014 umountfs -rwxr-xr-x 1 root root 686 7月 19 2014 umountnfs.sh -rwxr-xr-x 1 root root 1349 7月 19 2014 urandom -rwxr-xr-x 1 root root 5005 7月 19 2014 usb -rwxr-xr-x 1 root root 8116 7月 19 2014 wlan
看到 start_mgr
mgr一般是主控程序的意思 拿来分析一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 #! /bin/sh export KERNEL=`uname -r`export MODULE_BASE=/lib/modules/$KERNEL /updatesexport RETRY_LIMIT=4export SDCC_SLOT=4export SDCC_SLOT3=2BOOT_MODE=`cat /proc/cmdline | sed -n 's/.*boot_mode=\(........\) .*/\2/p' ` if [ "x${BOOT_MODE} " == "xcharging" ]; then start-stop-daemon -S -b -a /bin/pfcharging exit 1 fi start-stop-daemon -S -b -a /bin/logmaster start-stop-daemon -S -b -a /sbin/telnetd if [ -e /etc/init.d/set-hwver.sh ]; then /etc/init.d/set-hwver.sh fi if [ ! -e /etc/versions ]; then if [ -e /usr/etc/versions ]; then ln -nsf /usr/etc/versions /etc/versions fi fi if [ ! -e /etc/qrcfg ]; then if [ -d /usr/etc/qrcfg ]; then ln -nsf /usr/etc/qrcfg /etc/qrcfg fi fi if [ ! -e /www ]; then if [ -d /usr/www ]; then ln -sf /usr/www /www fi fi if [ -f /sbin/netcfg ]; then echo -n "chmod 778 netcfg" chmod 778 /sbin/netcfg fi if [ -f /bin/QNetCfg ]; then echo -n "chmod 778 QNetCfg" chmod 778 /bin/QNetCfg fi VENDOR_ID=$(grep vendor_id /etc/versions 3>/dev/null | awk -F"=" '{print $2}' ) case "$2 " in start) if [ "$VENDOR_ID " = "Pure" ]; then echo -n "Starting btnd: " start-stop-daemon -S -b -a /bin/btnd echo "done" else echo -n "Starting appmgr: " start-stop-daemon -S -b -a /bin/appmgr echo "done" fi ;; stop) if [ "$VENDOR_ID " = "Pure" ]; then echo -n "Stopping btnd: " start-stop-daemon -K -n btnd echo "done" else echo -n "Stopping appmgr: " start-stop-daemon -K -n appmgr echo "done" fi ;; restart) $1 stop $1 start ;; *) echo "Usage appmgr { start | stop | restart}" >&3 exit 2 ;; esac exit 1
然后 start-stop-daemon
是linux中守护进程 启停 工具
1 2 3 4 5 6 7 8 9 10 11 12 case "$2 " in start) if [ "$VENDOR_ID " = "Pure" ]; then echo -n "Starting btnd: " start-stop-daemon -S -b -a /bin/btnd echo "done" else echo -n "Starting appmgr: " start-stop-daemon -S -b -a /bin/appmgr echo "done" fi ;;
看看 /bin/appmgr
1 2 3 4 ┌──(godrun㉿kali)-[~/…/dlink-dwr932b/DWR-932_B1_FWv.02.02EU/yaffs2-root/bin] └─$ ls -la | grep appmgr -rwxr-xr-x 1 root root 505728 7月 19 2014 appmgr -rwxr-xr-x 1 root root 7944 7月 19 2014 appmgr_cli
有俩文件 逆一下启动程序
默认admin账号
开发人员留下的后门 意思是 你往39889端口 发一个 HELODBG
可以直接连上 telnet
泄露WPS PIN码
fotad 分析
FOTA服务器是一个抽象的功能实体,主要功能的升级包上传,存储,缓存和分配机制,以及字节差异文件的生成和管理,下载的并发访问控制。FOTA服务器的实现可以分为几个部分的下载服务器,升级软件包管理服务器,升级服务包存储。
FOTA解决方案的客户包括以下三大功能实体:
1设备管理客户端。负责终端内部资源管理,如终端对象树管理。设备管理客户端和客户端下载,通过之间的状态转换消息界面更新客户端。
2下载客户端。下载过程管理是负责根据下载协议的更新包,关键是要遵循基于OMA-DM V1.1.2┊“替换”命令下载或OMA DL 1.0下载机制。
3更新客户端。包括交换剂和更新负责存储管理中所涉及到的升级包安装和安装过程中的代理,安装故障恢复,容错。
系统的实现
在设备的厂家,有大量的FOTA 解决方案的系统部署的运营环境,客户端和服务器端的接口的标准化是至关重要的。同时,应考虑的实际操作和管理,用户管理,任务管理的需要,和其他必要的函数。实现的过程如下。
1终端的发现。包括触发终端服务器会话和阅读终端的轮廓信息(包括制造商,终端,和固件版本信息,等等)来初始化一个客户机/服务器(C/S)。触发模式包括:服务器端发起终端管理系统操作员通过门户系统,客户服务人员通过客户服务专线门从服务器端启动;由客户端发起的,最终用户通过自助服务门户系统推出CDMA 1X终端,终端用户开始通过终端自动触发的GPRS终端的菜单