前言
文章关于iot安全入门实操,选取例子是Sapido RB-1732路由器命令执行漏洞,漏洞原理很简单,重点是熟悉工具使用以及漏洞复现流程
固件下载地址:
https://pan.baidu.com/s/1Gj9RDlAQdCDiaLdLzQ2Aag?pwd=8381
工具:
IOT-research虚拟机(也可以attifyos,但是用到一半发现太难用了)
参考资料:
《物联网设备固件分析指南-SecureNexusLab》《物联网安全漏洞挖掘实战_》
以及如下文章
操作:
一、提取文件系统
Binwalk看看信息,squashfs文件系统,小端
用Me参数提取
进入到文件系统目录
二、漏洞分析
find命令找syscmd.asp。(为什么要找这个?因为这是复现漏洞,按常规找洞的方法应该是去二进制文件找system函数地址)
用前端打开一下可以看出大概是干嘛,能猜出是很明显的命令执行洞
打开源码,定位提交表单处,发现处理后端在/goform/formSysCmd
用grep命令找一下/goform/formSysCmd,后端一般是二进制程序,所以就在bin/webs文件中
用file查看信息,是mipsel-32架构
把webs拖进ida分析
Shift+f12来到string框,然后ctrl+f搜索关键词formSysCmd,双击其中一个定位到它的位置
这里保存着函数名称,再双击定位到函数具体位置
定位到函数位置后,F5反编译出c代码(这里我ida不能反编译mips架构,暂时先用ghidra反编译了,ghidra在虚拟机内/tools/reverse目录下有提供)
这里分享能反编译mips的ida:
https://bbs.kanxue.com/thread-264323-1.htm
代码还是很简单的,很明显的命令执行了,传参sysCmd为任意命令就行了。可以搜一搜这个websGetVar是啥函数
-
三、漏洞复现
-
要仿真固件比较有效的有三个方法,自动化工具firmAE,firmware-analysis-plus,还有手动操作qemu-system,这里我三个都试了一下,仅FAP(firmware-analysis-plus)成功了。
-
firmAE仿真(仿真失败)
-
Iot-research自带firmAE,不确定它有没有初始化,所以初始化了一下
-
卡在这个界面不动了
-
-
qemu-system手动仿真(半仿真成功)
-
sudo qemu-system-mipsel \ -M malta \ -kernel vmlinux-3.2.0-4-4kc-malta \ -hda debian_wheezy_mipsel_standard.qcow2 \ -append "root=/dev/sda1 console=tty0" \ -net nic -net tap,ifname=tap0,script=no,downscript=no \ -nographic
把上面这段命令放在下图的目录(iot-research该目录下自带相关内核镜像)里编写成run-mipsel.sh文件(这命令啥意思?可以参考资料,每个架构仿真都有固定的启动命令),然后运行
账号密码是root,可以看到仿真机登录成功了
-
在主机配置网卡10.10.10.1 -
在仿真机里配置网卡10.10.10.2,能ping通就是成功了 -
打包文件系统,通过scp命令传进仿真机 -
可以看到传进来了,解压出文件系统
-
挂载特定目录(为啥要挂载?查了一下,意思就是仿真反正必须要挂载)
后面的没记录了,该固件部分配置存在问题,没法启动httpd服务,先放这了
-
firmware-analysis-plus仿真(仿真成功)
-
IOT-Research里面没有这玩意,需要去官网下载一下
-
https://github.com/liyansong2018/firmware-analysis-plus
然后运行如下命令就仿真成功了
-
-
来到web页面,admin口令登录
-
来到syscmd.asp目录下,可以抓包看看详细信息,就是直接命令执行了 -