[学习笔记]iotsec_learn
0x00 思路
攻击面
设备对输入进行处理的流程
输入意味着有接口
处理意味着有逻辑
安全风险
- 物理感知层(固件提取、硬件攻击)
- 通信层(流量监听、中间人攻击)
- 管理控制层/应用层(web、rtsp、ssh)
IOT设备信息收集
- 端口扫描(外部嗅探:nmap/内部调试:netstat -anltu)
- 流量抓取、分析(外部嗅探:开热点直接抓包/内部调试:看电路板分析)
- 功能点评估
web逻辑漏洞
未授权访问
- 敏感路径,例如直接访问view.html、system.html可以直接绕过
- cookie伪造
- …
- D-link 850l认证绕过
- D-Link DCS-2530L摄像头可访问未认证的敏感路径
- tenda未授权绕过
- RTSP(视频实时流传输协议)服务未授权访问:该协议是用来控制声音和影像的多媒体串流协议,常开放在554端口
- 通过爆破url的order_id和id可以获得所有用户的密码
命令注入
- burpsuite fuzz
- cookie常见溢出,注入,命令执行
拒绝服务
固件代码逻辑验证不足造成指针异常,让程序非正常崩溃
后门漏洞
- 服务访问后门(web服务/rtsp服务)
- 调试后门(软/硬件)
任意文件读取
- 存在路径穿越,没有对
../../进行过滤
- 符号链接漏洞
常见挖掘方法
- 固件逆向分析-分析输入点
- 寻找二进制中统一的cgi输入接口函数
- 例如getenv(“HTTP_HOST”)、get_cgi(“device”)、websGetvar(wp,”device_id”,””)
- 寻找二进制中统一的cgi输入接口函数
- 固件逆向分析-敏感函数/代码段回溯
- 寻找类似于system等函数的参数是否可控
- 可以借助ida脚本(有些可能不是system函数,而是把system函数进行了封装,所以需要去回溯其他的函数)
1 | #列出所有引用system的函数地址 |
- fuzz(通信协议/固件)
- 端口fuzz
- cat /dev/urandom | nc 192.168.0.1 9898
- cat /dev/random | nc 192.168.0.1 9898
- burpsuite
- 协议fuzz(boofuzz/peach)
- 端口fuzz
0x01 常用漏洞组件中的漏洞频发点
常见web管理服务:
lighttpd
历史漏洞:
- CVE-2018-18878
- CVE-2015-1548
漏洞频发点:
- CGI in C/C++ /bash/…
- Php
- Asp
thttpd/mini_httpd
漏洞频发点:
- thttpd对header内容没有检查
- CGI in C/C++ /bash/…
- Php
GoAhead
历史漏洞:
- CVE-2019-5096
- CVE-2017-17562
二次开发过程中漏洞频发点
- goform Handler
- asp Handler
- security handler
- CGI in C/C++ /bash/…
uhttpd(openwrt社区默认的服务器)
历史漏洞:
- CVE-2019-19945
- CVE-2018-19630
主流组件漏洞:
- LuCI
- CVE-2019-17367
- CVE-2019-12272
- UCI
- CVE-2020-28951
漏洞频发点:
- CGI in C/C++ /bash/…
- Lua
- PHP
Boa
各厂商自研
MoxaHttp
ZTE Mini Web
0x02 常用组件的漏洞频发点
UPNP服务
- Miniupnp/MiniDLNA
- CVE-2020-28926
- CVE-2019-12106
- CallStranger
- Libupnp(Broadcom upnp)
- CVE-2020-13848
- CVE-2016-8863
- 各厂自研
RTSP服务
- Live555
- HiChipSDK(闭源)
- 各厂自研(D-Link大部分使用的都是自己的产品)
其他服务
- TDDP
- CDP
- mywifi
0x03 小技巧
- 可以通过搜索FFFF来查找固件有多少个文件
- squashfs的文件头部是hsqs,如果是sqsh可能是文件被倒过来了
1 | def reverseBS(src): |
0x04 挖掘思路
- 首先分析攻击面:
- 设备固件:启动脚本/etc/init.d/,常见的服务二进制(boa,lighthttpd)
- 在线设备(无shell):端口扫描
- 在线设备(有shell):进程(ps),网络(netstat -pantu)
- 定位程序
- 寻找开源组件1day
- 字符串搜索:grep -Rn “xxx” 2>/dev/null
0x05 流量调试
MQTT
- MQTT(消息队列遥测传输协议)是基于发布/订阅(Publish/Subscribe)模式的轻量级物联网通信协议,它可以用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
- 默认端口是1883,websocket端口8083,默认消息不加密,8883端口是通过TLS加密的MQTT协议。
- 基于TCP/IP网络连接,提供有序,无损,双向连接。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kazamaycのblog!