freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

工控CTF之某固件分析解题
2019-12-14 08:00:46

一、解题

在2019年工业信息安全技能大赛第一场线上赛中有一道固件分析的题目,当时虽然Get到了答案,却终归是知其然不知其所以然,于是决定搭个环境来完整分析一下,顺便学习一下路由器漏洞分析。话不多说,先上题目:

拿到题目后,首先想到的是:这应该是一个被公开过的路由器漏洞吧,会是什么路由器的洞呢?题目说明中提到了tddp协议,于是先搜索一把,相关结果如下:

还真有发现:TP-Link SR20路由器…数据的第二个字节为0x31…远程代码执行,难道就这么巧么?尝试根据题目提示猜测组合答案:CMD_FTEST_CONFIG+0x02+0x31,进行提交,嗯,答案正确,解题完毕……

二、漏洞复现

基础环境搭建

解题成功纯属巧合,要搞清楚来龙去脉还得靠漏洞复现+分析,于是决定搭个环境跑跑看(一堆坑啊,各种问题是必然的,一路坎坷一路向远方)。先下载了Ubuntu18.04 ISO把虚拟机装起,然后下载Qemu,Qemu是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备。可以使用命令:

apt install qemu

直接安装,或者下载源码:https://download.qemu.org/编译安装,解压后进入到qemu目录,然后:

./configure  #配置

make #编译

make install

此过程将遇到各种问题,可参考https://blog.csdn.net/snail_coder/article/details/82935081进行解决。

安装完成后如下所示:

将待分析固件拷贝进虚拟机,首选binwalk走一波:

binwalk 6-bin.bin

binwalk -Me 6-bin.bin

squashfs-root目录就是路由器的固件文件系统:

ARM QEMU环境搭建

路由器固件已有,接着需要搭建ARM虚拟化环境,进而将固件跑起来。从Debian官网: https://people.debian.org/~aurel32/qemu/armhf/下载Debian ARM系统的相关文件: vmlinuz-3.2.0-4-vexpress、initrd.img-3.2.0-4-vexpress、debian_wheezy_armhf_standard.qcow2;为虚拟机添加一个网卡tap0用以与ARM虚拟机通信:

sudo tunctl -t tap0

sudo ifconfig tap0 10.10.10.1/24

执行命令开启ARM虚拟机:

qemu-system-arm-M vexpress-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrdinitrd.img-3.2.0-4-vexpress -driveif=sd,file=debian_wheezy_armhf_standard.qcow2 -append

"root=/dev/mmcblk0p2console=ttyAMA0" -net nic -net tap,ifname=tap0,script=no,downscript=no-nographic

给ARM虚拟机配置IP,并将固件拷贝至ARM虚拟机中:

使用chroot 切换根目录固件文件系统:  

mount -o bind /dev ./squashfs-root/dev/

mount -t proc /proc/ ./squashfs-root/proc/

chroot squashfs-root sh

成功切换至固件文件系统,将固件跑起来了:

执行PoC代码,测试一下是否能远程执行命令:

连接路由器成功并获取固件系统详细信息,至此漏洞复现完成。

三、漏洞分析

通过搜索关键字符串,尝试定位相关漏洞函数:

来到函数sub_15E74查看伪码:该函数为处理接收到来自UDP Port 1040基于tddp协议的数据,可以看到函数中的switch case,对应着不同情况的处理方式。漏洞发生在分支0x31处理“CMD_FTEST_CONFIG”类型消息,因此漏洞函数为sub_A580,继续跟进:此处调用了sscanf函数,将用户参数根据格式化字符串解析到后面的参数中,然后进入到sub_91DC函数中执行。由于sscanf函数中只判断了;字符,未对&和|符号进行过滤,因此可进行命令注入,拼接恶意代码然后进入sub_91DC函数中得以执行,继续跟进sub_91DC函数:这里直接调用execve函数进行命令执行,至此,漏洞分析完成。

*本文作者:ww5466064,转载请注明来自FreeBuf.COM

# CTF # 工控 # 固件
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录