倒霉蛋的totolink学习手记
本文最后更新于:2023年12月28日 晚上
0x0:写在所有之前
kernel、v8、虚拟化、Iot,因为笔者并不想在pwn的学习上止步于CTF,且对Iot也有点兴趣,故选择了这条路(你以为是我不想当个内核带师吗,是实在是学不会啊)
在nameless爷爷的推荐下,笔者在咸鱼上买了一个totolink,以此来作为笔者Iot漏洞挖掘的入门教材。
0x1:拿不到shell,妈妈生的
现在官网下载固件@totolink
用binwalk解压,提取出文件系统squashfs-root
在里面随便找找,便看到了telnet.asp,那便可以通过telnet服务拿到路由器的shell
再搜索一下“shadow”这种敏感文件
user:root
pwd:其实网上一找就是“cs2012”,md5付费解密也行
OK现在就可以拿一下路由器的shell了
拿到设备先暴拆,然后插上网线,笔电连上totolink的无线
登录网关
可以看到笔者这个设备的固件版本已经很老了
先把网段改到192.168.55.1,避免和原本的撞上,再把防火墙一关,试着访问【IP】/telnet.asp
结果半天加载不出来
后来无意看到totolink这个牌子要用极为先进的360浏览器的兼容模式才能访问(真的吐血)
通过网页把telnet的服务打开后,试着用nmap扫一下
可以看到telnet服务的默认端口”23“已经打开,需要注意到的是这边还有个mqtt服务的默认端口1883也打开了
用telnet登录,user:root password:cs2012
登陆进去了,好耶!!
结果默认的busybox着实有点寒酸,好在有wget,那就起个http服务拉个mipsel架构的busybox进去好了
同时因为笔者的路由器固件版本实在是太老,所以笔者按照@I0tus师傅博客中的方法,把真机中的固件拉了出来
1 |
|
因为想试着打打真机,所以笔者接下来的分析都基于这份提取出来的固件
0x2:用mqtt狠狠地注入
用burp抓个包先
访问网关
登录
开启telnet服务
看起来负责网络服务的是这个/cgi-bin/cstecgi.cgi
登录的时候存在密码泄露问题
同时,在使用登录服务和telnet服务的时候,可以看到有一些特别的字符串。
那就搜一下
”topicurl”存在于这几个elf文件中,结合抓包中出现的cstecgi.cgi,就把这个文件用ida打开看看
结果刚进main函数一眼command injection,太抽象了
但是cstecgi.cgi中并没有和“topicurl”实质有关的东西。
那再找一下”telnet_enabled”
进system.so康康
找到了一个setTelnetCfg,发现和开关telnet服务的参数很像
回溯这个函数, 出现module_init
OK,cstecgi.cgi负责的是http服务,但最后的setTelnetCfg却是在module_init中执行。cstecgi.cgi找不到加载system.so的痕迹,两者并无瓜葛。
翻看@blingbling师傅的博客后,发现此处使用的是dlopen的方法(路径+.so文件名),于是搜索路径”/lib/cste_modules”
出现了唯一匹配的结果
找到dlopen函数,这样思路就理通了
cstecgi.cgi接受到http请求后,通过cste_sub做中转,然后到system.so执行。
那么问题来了,cste_sub是啥嘞
在路由器里用netstat -pantu查看端口后得知,cste_sub是1883端口(cs_broker)的客户端,而1883端口是mqtt的默认端口。
所以在此设备中,http请求会先被转化mqtt,然后在不同的.so文件中得到执行。
那就来用mqtt狠狠注入吧!!
先下载mqtt.fx,配置好ip后订阅全部,为了效果显著一点,我们可以找一个command injection来试试
在/lib/cste_modules/upgrade.so的function–setUpgradeFW中,存在一个command injection
构造数据,直接用mqtt发送(${IFS}是用来绕过空格的)
可以看到tmp文件夹下已经出现目标文件
0x3:来试试栈溢出吧
/lib/cste_modules/wps.so 中的function–setWiFiWpsConfig存在栈溢出漏洞
先拉个mipsel架构的gdbserver进去,在这边调试的时候是attach cste_sub的pid
为了方便调试,这次用python发数据包
但是也可以先用mqtt.fx先发个cyclic生成的字符串确定一下offset
然后用msf反弹shell一把梭
1 |
|
比较蛋疼的是好像只有python2发过去的数据是正常的,python3就是一堆乱码
反弹shell的目标一定要和路由器同一个网段,不然弹不出来
0x4:带学牲的第一次漏洞挖掘
水了两个CVE(CVE-2023-40041&CVE-2023-40042),都是低质量漏洞,当时只想着能不能拿个CVE也没怎么深挖
0x5: UART串口调试
第一次焊接,属实是丑了一点,但好在功能是一点问题都没有
Nameless爷爷推荐的三排针确实挺好用的,但是这送的锡丝就是一坨shit,质量差的一批。
用SecureCRT直接quick connect就能进,但不知道为什么我笔记本两个COM口一个连上去就是没反应,换了一个就行了。
但进去后奇怪的是在uboot加载好后kernel加载之前狂按回车进不到uboot。