关于向DOCSIS调制解调器添加静态路由

2022-02-21 09:25:21

你可能认为这是一项简单的任务,但让我们来看看。有人会期望在web界面中有这样的功能…

……但不,它不在那里。那么接下来呢?让我们干掉它!

首先,我检查了webUI是如何工作的,它是如何发送配置更改请求的,试图滥用ping来执行远程执行,但运气不佳。后来,我发现发现了一些漏洞,但它们似乎都已在我的FW修订版中修复。

但关于这个调制解调器还有更好的信息来源:安全评估报告。它仍然指过时的固件,但描述了一些硬件攻击向量。

硬件黑客可能很危险,所以我从eBay上买了另一个相同类型的调制解调器,并对其进行了跟踪。这就是设备内部的外观(想象一下,没有那些被黑客攻击的电线):

有两个引脚头提供115200波特的串行访问,但它们只显示几行输出(见图),不接受任何输入,在最新的电路板版本中,它们甚至不存在。

对于存储设备,该设备使用带有eMMC控制器(PS8211-0)的NAND闪存–您可以在移动计算机维修时看到类似电路板的完整描述以及引导日志。co.uk(现在是MCR)。由于我的主板显示的引导日志有限,无法影响引导过程,所以我尝试(正如一些论坛所建议的)缩短NAND引脚以中断引导。但我唯一取得的成就就是让我的测试对象变得更容易,所以我不推荐这种方法。

MCR页面显示了eMMC的一个引脚,所以我拿了一个示波器,开始测量引脚上的信号。这实际上产生了相互矛盾的结果,所以我选择了不同的方法。这是一种已知的技术,你可以在这里阅读。我从主CPU和eMMC之间的所有痕迹上刮下焊接掩模,以获取信号:

开始用示波器测量信号。这立即揭示了CMD和CLK引脚和一些DATx引脚。为了阅读,我订购了超越TS-RDF5 SD卡读卡器,该读卡器应能处理1位SD模式。我得到的版本上有GL3233控制器,可以正常工作。

我只是猜测DAT0引脚是CMD之后的第一个引脚,这是一个幸运的猜测:)。最后,皮诺看起来像这样:

然后我沿着这些线追踪控制器,得到的控制器引脚如下所示:

31–CMD 22–CLK 25–DAT0 26–DAT1 33–VCC

更新4.4。2021年:我在这里找到了Puma 6调制解调器的完整示意图。从中我可以提取出PS7000的原理图,它似乎与PS8211相同:

[352807.254686]usb 2-2:使用XHCD[352807.406062]usb 2-2:找到新usb设备,idVendor=8564,idProduct=4000[352807.406065]usb 2-2:新usb设备字符串:Mfr=3,Product=4,SerialNumber=5[352807.406067]usb 2-2:产品:超越[352807.406069]usb 2-2:制造商:TS-RDF5[352807.406071]usb 2-2:序列号:0000000000 37[352807.407058]usb存储2-2:1.0:检测到usb大容量存储设备[352807.410863]scsi主机3:usb存储2-2:1.0[352808.441748]3:0:0:直接访问TS-RDF5 SD超越TS3A PQ:0 ANSI:6[352808.442438]sd 3:0:0:0:附加scsi通用sg2类型0[352808.724617]sd 3:0:0:0:[sdc]230144 512字节逻辑块:(118MB/112 MiB)[352808.725399]sd 3:0:0:[sdc]写保护关闭[352808.725402]sd 3:0:0:[sdc]模式检测:23000[352808.726262]sd 3:0:0:0:0 sdc]写缓存已禁用,读缓存:已启用,不';t支持DPO或FUA[352808.746880]sdc:sdc1 sdc2 sdc3 sdc4<;sdc5 sdc6 sdc7 sdc8 sdc9 sdc10 sdc11 sdc12 sdc13 sdc14 sdc15>;[352808.750675]sd 3:0:0:0:[sdc]连接的SCSI可移动磁盘

我建议使用热胶连接销头,以防止细导线受到机械应力。

由于eMMC是该设备中唯一的非易失性存储器,我能够以最小的篡改痕迹转储我的“生产”调制解调器(在彩色电线的图片上),并将整个eMMC转储复制到我的测试对象,令人惊讶的是,它起到了作用。后来,我添加了一条方便的eMMC分接电缆,并开始使用克隆电缆连接互联网。如果出现任何问题,我总是可以毫无问题地将工作版本刷新回来。

eMMC存储容量为128MB,包含分区。它们实际上非常有用,因为它们分离了多个内核和文件系统,所以我们不需要用binwalk来研究整个flash。

我创造了摘录。它将这些分区提取到单独的文件中,这样我就可以轻松地分析它们,并通过循环挂载它们。首先,我用filecommand检查了它们。

upc-sub3。bin1:Linux内核x86启动可执行文件bzImage,版本3.12.17(jason@alphago)#1 SMP抢占2018年3月20日星期二18:56:18 CST,RO rootFS,交换设备0x3,正常VGA

upc-sub3。bin2:Linux内核x86引导可执行文件bzImage,版本2.6.39(root@ftd-sw)#2 SMP抢占2017年4月5日星期三11:58:12 CST,RO rootFS,root_dev 0x801,swap_dev 0x3,正常VGA

upc-sub3。bin3:Squashfs文件系统,little endian,版本4.0,13826280字节,2277个索引节点,块大小:65536字节,创建时间:2018年3月20日星期二11:14:38

upc-sub3。bin4:DOS/MBR引导扇区;分区1:ID=0x83,开始CHS(0x36c,0,1),结束CHS(0x3ff,3,16),开始扇区256,34816个扇区;分区2:ID=0x5,开始CHS(0x3ff,3,16),结束CHS(0x3ff,3,16),开始扇区35312,4112个扇区,扩展分区表

upc-sub3。bin5:Squashfs文件系统,little endian,版本4.0,14369432字节,1377个索引节点,块大小:65536字节,创建时间:Wed Apr 5 04:39:44 2017

upc-sub3。bin8:u-boot遗留uImage,引导脚本文件,Linux/PowerPC,脚本文件(未压缩),8912字节,2018年3月20日星期二11:26:12,加载地址:0x00000000,入口点:0x00000000,头CRC:0xFF8DF93B,数据CRC:0xC4A18791

upc-sub3。bin9:u-boot遗留uImage,引导脚本文件,Linux/PowerPC,脚本文件(未压缩),8912字节,2017年4月5日星期三05:33:39,加载地址:0x00000000,入口点:0x00000000,头CRC:0xADC57663,数据CRC:0xC4A18791

upc-sub3。bin12:Squashfs文件系统,little endian,版本4.0,7994036字节,731个索引节点,块大小:131072字节,创建时间:2018年3月20日星期二11:26:09

upc-sub3。bin13:Squashfs文件系统,little endian,版本4.0,8068210字节,706个索引节点,块大小:131072字节,创建时间:Wed Apr 5 05:33:36 2017

upc-sub3。bin14:Squashfs文件系统,little endian,版本4.0,6108687字节,666个索引节点,块大小:131072字节,创建时间:2018年3月20日星期二11:26:11

upc-sub3。bin15:Squashfs文件系统,little endian,版本4.0,5493347字节,602个索引节点,块大小:131072字节,创建时间:Wed Apr 5 05:33:39 2017

提到的安全报告说,主SoC由两个独立的CPU核心/系统组成:x86和ARMv6。分区的内容也表明了这一点。我正在安装和探索所有可安装的分区,以获得有关系统的更多信息。

#ls-la/nvram/1/security/lrwxrwxrwx 1 29 cm_cert.cer->;下载/cbn_cm_euro_cert.cer lrwxrwxrwx 1 32 cm_key_prv。bin->;下载/cbn_cm_euro_privkey。箱子lrwxrwxrwx 1 41制造钥匙酒吧。bin->/etc/docsis/security/euro_-mfg_-key_-pub。bin drwxr-xr-x 2 1024下载lrwxrwxrwx 1 38制造证书.cert->/etc/docsis/security/euro_mfg_cert.cer drwxr-xr-x 5 1024。。lrwxrwxrwx 1 42 root_pub_键。bin->/etc/docsis/security/euro_root_pub_key。bin drwxr-xr-x 3 1024。

$openssl x509-在cbn_cm_euro_cert.cer中-通知der-noout-文本证书:数据:版本:3(0x2)序列号:343337499263393(0x138437dae81a1)签名算法:SHA1与RSA加密颁发者:C=TW,O=Compal宽带网络,OU=euro DOCSIS,CN=Compal Broadband Networks电缆调制解调器根证书颁发机构有效期不在2018年3月26日19:31:05 GMT之前不在2018年3月26日19:31:05 2038 GMT之后主题:C=TW,O=Compal Broadband Networks,OU=Euro DOCSIS,CN=38:43:7D:AE:81:A1主题公钥信息:公钥算法:RSA加密RSA公钥:(1024位)模数:00:b8:1b:65:03:78:0c:eb:b8:67:cc:14:a5:36:1d:43:5a:ab:c3:48:8d:2c:79:05:74:5d:8c:b6:44:8c:1e:6c:b7:fa:b0:7D:cb:ce:7f:aa:b1:64:49:31:c7:61:f3:56:56:f6:56:56:56:56:56:56:56:56:56:56:advvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC5:d2:eb:0b:b2:31:15:e9:cc:3d:77:60:63:11::adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadad3:adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadad8:ad8:8:adadadad8:8:adadadadadadadadadadadadadadadad8:adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadad9:91:b1:21:f0:c2:19:fb:e8:8d:10:f5:62:4a:50:44:07:61:2e:c3:10:21:7e:58:f8:a9:ac:3e:34::advvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv7:7:7:7)b)b)b)b)B:adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadad7:7:7:7:7:7:vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv66:e6:4a:28:90:ff:c5:ed:9c:07:b5:7a:1b:60:5f:5f:8f:ae:41:c2:87:d6:bd:60:94:80:6d:06:95:62:95:e6:44:d7:d5:76:bf:86:86:69:0b:15:12:ae:0b:3e:c6

正如您在下面看到的,密钥文件的格式是未知的,因为它是加密的,所以您不能在任何其他设备中使用它。

$openssl rsa-以cbn_cm_euro_privkey格式。bin-通知der--noout-文本无法加载私钥140486965376832:错误:0D07207B:asn1编码例程:asn1_get_对象:头太长:/加密/asn1/asn1_-lib。c:101:

我的一个朋友非常友好地提供了一个解密程序,所以在运行它之后,您将获得一个解密密钥:

将这些证书移植到另一个调制解调器(使用克隆的MAC)后,您可以使用另一个设备访问internet。

作为第一个目标,我选择了x86系统,因为我认为它更重要。

我预计带有2018年时间戳的FS是实际生产的FW,并且在通过安装部件安装之后。sh upc-sub3。binX和探索它们,我发现p3包含一个只读的根squashfs,p6是可写的ext3分区,并且包含一些配置数据。我还发现p6作为/nvram安装在系统中。接下来,我试图找到一些init脚本,它执行/nvram中的另一个脚本/二进制文件。

只需在我的PC上安装和操作/nvram,就可以轻松修改其内容。过程如下:

我尝试了几个可能的/nvram/什么的候选人,但运气不好。所以我需要修改根挤压本身。

$sudo UNSHFS upc-sub3。bin3创建了并行非同步HFS:使用4个处理器2147个索引节点(2598个块)来写入[======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

---squashfs root/etc/init。d/nvram 2018-03-20 11:56:47.000000000+0100+++squashfs root/etc/init。d/nvram 2019-03-09 16:49:13.030975974+0100@-179,6+179,9@@@echo";请确保分区$EMMC#u partition存在于EMMC boot中,或者分区$SPI#u partition存在于SPI boot"中;fi+/nvram/启动。sh&;+}

cd/nvram//usr/sbin/brctl show&>;brctl。loglsmod>;lsmod。loguname-a>;uname。罗吉普a>;伊帕。罗吉普r>;知识产权。logifconfig>;ifconfig。logmount>;攀登lognetstat-an>;netstat。logps>;ps.logiptables-L-n&>;iptablesln。log/usr/sbin/telnetdsync

我让它运行了几分钟,然后关机,重新连接到我的电脑,并在/dev/sdc6中检查结果。所有日志文件都创建了一个相互测试的内容,完美!这意味着我的脚本已成功执行,telnetd正在运行和侦听,没有iptables限制。

这还显示了IP地址192.168.254.254/24,但我无法连接到正在运行的telnetd,不管怎样,IP甚至无法ping,我的最终目标是通过telnet获得shell访问。但在netstat中,它显示了192.168.254.253中已建立的连接,我希望这是另一个ARM系统。所以我就这样离开了,开始攻击另一个系统。

后来我发现,要在init脚本中启动标准telnetd,只需创建文件/nvram/sdk/docsis_-relax

这基本上是一个非常相似的故事。首先,我在p12找到了squashfs root,在p10找到了/nvram ext3,并试图修改nvram以执行我的脚本。这次我没花太多时间尝试,我很快就换了壁球。

猫<&书信电报;EOF>>;squashfs root/etc/scripts/docsis\u处于活动状态。pcd RULE=STARTUP\u SHSTART\u COND=RULE\u COMPLETED,DOCSIS\u INITONCE,DOCSIS\u PP COMMAND=/bin/bash/nvram/STARTUP。shSCHED=NICE,0DAEMON=NOEND_COND=NONEEND_COND_TIMEOUT=-1FAILURE_ACTION=NONEACTIVE=YES EOF

这个文件似乎是由某种专用流程管理器(pcd)读取的,它确保所有必需的服务都在运行。我跑了回来:

$telnet 192.168.0.1尝试192.168.0.1。。。已连接到192.168.0.1。转义字符是';^]'./bin/bashbusyboxv1。22.1(2018-03-20 18:44:48 CST)内置外壳(灰)进入';帮助';查看内置命令列表。#uname-aLinux 3.12.14#1 PREEMPT周二3月20日18:43:41 CST 2018 armv6b GNU/Linux#cat/proc/cpuinfo处理器:0型号名称:ARMv6兼容处理器版本4(v6b)功能:swp半拇指快速多edsp java tls CPU实现者:0x41CPU架构:7CPU变体:0x0CPU部分:0xb76CPU版本:4Hardware:puma6Revision:05e1Serial:0000000000000000#连接已被外部主机关闭。

我在一个循环中运行utelnetd,因为每次我通过telnet连接时,会话都处于活动状态大约10秒,然后utelnetd就死了。我还不知道为什么,所以我把它放进了一个循环,但它真的让我恼火。可用的命令集也非常有限:

#/bin/busybox busybox v1。22.1(2018-03-20 18:44:48 CST)多呼叫二进制。BusyBox在1998年至2012年间受到许多作者的版权保护。根据GPLv2授权。有关详细的版权声明,请参阅源代码分发。用法:busybox[函数[参数]…]或者:busybox--list或者:函数[参数]。。。BusyBox是一种多调用二进制文件,它将许多常见的Unix实用程序组合到一个可执行文件中。大多数人会为他们希望使用的每个函数创建一个到busybox的链接,busybox的行为就像它被调用时一样。当前定义的函数:[[[、添加shell、ash、awk、base64、basename、bash、blockdev、bootchartd、cat、chmod、chroot、conspy、cp、crond、crontab、cut、date、dd、dhcprelay、dmesg、dnsdomainname、du、dumpleages、echo、fgconsole、find、flashcp、flock、free、fstrim、ftpget、ftpput、getopt、grep、groups、halt、head、hextump、hostname、ifconfig、init、insmod、iostat、ip、ipaddr、iplink、iproute、iprule、iptunnel、kill、killall、killall5、ln、logger、ls、lsmod、lsof、lspci、mkdir、mke2fs、mkfs。ext2、mknod、modinfo、mount、mpstat、mv、nanddump、nandwite、nbd client、netstat、ntpd、passwd、ping、ping6、pmap、poweroff、powertop、ps、pstree、pwd、pwd、pwdx、reboot、renice、rev、rm、rmmod、route、sed、setserial、sh、sha3sum、sleep、smecap、sync、sysctl、tail、tar、test、tftp、time、top、tr、traceroute、traceroute、traceroute6、tune2fs、ubitach、ubitach、,ubimkvol,ubirmvol,ubirsvol,ubiupdatevol,udhcpc,udhcpd,umount,uname,unxz,用户,vconfig,vi,wall,watchdog,wc,wget,whois,xz,xzcat

当时没有telnet、nc……所以我开始研究如何构建自己的(busybox)二进制文件。

我最好的选择是使用buildroot,因为它非常容易使用。我不知道如何配置它,所以我检查了一些CPU信息:

$cat/proc/cpuinfo处理器:0型号名称:ARMv6兼容处理器版本4(v6b)功能:swp半拇指fastmult edsp java tls CPU实现器:0x41 CPU架构:7 CPU变量:0x0 CPU部件:0xb76 CPU版本:4硬件:puma6版本:05e1串行:0000000000000000

$file output/build/busybox-1.29.3/busybox output/build/busybox-1.29.3/busybox:ELF 32位MSB可执行文件,ARM,EABI5版本1(SYSV),动态链接,解释器/lib/ld-,带有调试信息,未剥离

$file-bin/busybox-bin/busybox:ELF 32位MSB可执行文件,ARM,EABI5版本1(SYSV),动态链接,解释器/lib/ld-,剥离

但是链接库可能不同,所以最好使用静态链接的二进制文件。这可以通过以下方式完成:

$cd-$rm output/build/busybox-1.29.3/busybox$make busybox rebuild$file output/build/busybox-1.29.3/busybox:ELF 32位MSB可执行文件,ARM,EABI5版本1(SYSV),静态链接,带有调试信息,未剥离$ls-lah output/build/busybox-1.29.3/busybox-rwxr-xr-x 1 root root 1.2M Jul 9 22:27 output/build/busybox-1.29.3/busybox

酷,这就是我们需要的,在路由器上下载到/var并运行后,我们得到了:

#cd/var/wgethttp://192.168.0.14/busybox连接到192.168.0.14(192.168.0.14:80)总线箱100%|*| 1132k 0:00:00 ETA#chmod+x总线箱#/busybox busybox v1。29.3(2019-07-02 17:07:42 CEST)多呼叫二进制。BusyBox在1998年至2015年间受到许多作者的版权保护。根据GPLv2授权。有关详细的版权声明,请参阅源代码分发。用法:busybox[function[arguments]…]或:busybox--list[-full]或:busybox--install[-s][DIR]或:function[arguments]…busybox是一个多调用二进制文件,它将许多常见的Unix实用程序组合到一个可执行文件中。大多数人会为他们希望使用的每个函数创建一个到busybox的链接,busybox的行为就像它被调用时一样。当前定义的函数:[[[,addgroup,adduser,ar,arch,arp,arping,ash,awk,base64,basename,blkid,bunzip2,bzcat,cat,chattr,chgrp,chmod,chown,chroot,chrt,chvt,cksum,clear,cmp,cp,cpio,crond,crontab,cut,date,dc,dd,dealocvt,delgroup,deluser,devmem,df,df,diff,dirname,dmesg,dnsd,sdomainname,dosUnix,du,du,dump,dump,dump,dump,dumpther wake,expr,factor,fallocate,false,fbset,fdflush,fdformat,fdisk,fgrep,find,flock,fold,free,freeramdisk,fsck,fsfreeze,fstrim,fuser,getopt,getty,grep,gunzip,gzip,halt,hdparm,head,hextump,hextedit,hostid,hostname,hwclock,i2cdetect,i2cdump,i2cget,i2cset,id,ifconfig,ifdown,ifup,ifup,inetd,init,insmod,install,ip,ipaddr、ipcrm、ipcs、iplink、ipneigh、iproute、iprule、iptunnel、kill、killall、klogd、last、less、link、linux32、linux64、linuxrc、ln、loadfont、loadkmap、logger、login、logname、losetup、ls、lsattr、lsmod、lsof、lspci、lsscsi、lsusb、lzcat、lzma、lzopcat、makedevs、md5sum、mdev、mesg、microcom、mkdir、mkdosfs、mke2fs、mkefo、mknod、,mkpasswd、mkswap、mktemp、modprobe、more、mount、mountpoint、mt、mv、nameif、netstat、nice、nl、nohup、nproc、nslookup、nuke、od、openvt、partprobe、passwd、paste、paste、patch、pidof、ping、pipe_progress、pivot_root、poweroff、printenv、printf、ps、pwd、rdate、readlink、readprofile、realpath、reboot、renice、reset、resume、resume、rm、rmdir、rmmod、,路由,运行初始化,运行部件,运行级别,sed,seq,setarch,setconsole,setfattr,setkeycodes,setlogcons,setpriv,setserial,setid,sh,sha1sum,sha256sum,sha3sum,sha512sum,shred,sleep,sort,start-stop守护进程,strings,sty,su,su,sulogin,svc,svok,swapoff,swapon,switch_root,sync,sysctl,syslogd,tail,tar,tc,tee,telnet,test,tftp,time,top,touch,tr,traceroute,true,truncate,tty,ubirename,udhcpc,uevent,umount,uname,uniq,unix2dos,unlink,unlzma,unlzop,unxz,unzip,uptime,usleep,uudecode,uuencode,vconfig,vi,vlock,w,watch,watchdog,wc,wget,whoami,xargs,xxd,xz,xzcat,yes,zcat,zcat

很好。接下来,我将二进制文件打包到root squashfs中,并在startup中替换了utelnetd。sh与:

登录。sh执行一些基本的身份验证,然后将您放入shell。此后,telnet连接再也没有断开。我还编译了其他一些实用程序,比如tcpdump、strace、nmap和

......