前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >原创 Paper | 探秘 Zyxel 设备:固件提取分析

原创 Paper | 探秘 Zyxel 设备:固件提取分析

作者头像
Seebug漏洞平台
发布于 2024-04-10 06:13:38
发布于 2024-04-10 06:13:38
51200
代码可运行
举报
文章被收录于专栏:Seebug漏洞平台Seebug漏洞平台
运行总次数:0
代码可运行

作者:fan@知道创宇404实验室

时间:2024年3月27日

1 前言

参考资料

部门近期应急了一个 Zyxel VPN 未授权 RCE,在尝试进行漏洞复现的过程中,发现在 .bin 中无法提取文件系统,了解得知 .bin文件是 ZIP 格式的固件映像受密码保护。通过如下文章学习到了Zyxel固件解密方法[1],以此篇文章记录并说明踩过的坑。

Zyxel VPN Firewall 是一种网络安全设备,由 Zyxel 通信公司提供。它结合了防火墙和 VPN(Virtual Private Network,虚拟专用网络)功能,旨在保护企业⽹络免受未经授权的访问和恶意活动的威胁,并提供安全的远程访问解决⽅案。

2 固件提取

参考资料

2.1 问题分析

代码语言:javascript
代码运行次数:0
运行
复制
固件版本 VPN100_V5.30(ABFV)

解压 VPN100_V5.30(ABFV.0)C0.zip

图2-1 解压VPN100_5.30压缩文件

尝试在 .bin文件中提取文件系统,并没有提取出文件系统。

代码语言:javascript
代码运行次数:0
运行
复制
$ binwalk -e 530ABFV0C0.bin
$ cd _530ABFV0C0.bin.extracted/
$ ls
0.zip         etc_writable  fwversion         wtp_image
compress.img  filechecksum  kernelchecksum    wtpinfo
db            filelist      kernelvpn100.bin

因为文件 530ABFV0C0.bin 是 ZIP 格式的固件映像受密码保护,也没有找到有关 Zyxel 使用密码的信息,但是固件一起的PDF文章中有一段对 530ABFV0C0.ri 的描述如下:

图2-2 530ABFV0C0.ri作用描述

大致翻译为.ri文件是一个二进制固件恢复映像文件,仅在系统固件损坏紧急情况下使用。如果正常的固件升级文件(.bin)不能使用,且系统无法启动,这个文件可以用于尝试恢复固件至可用状态。由于.ri文件通常用于恢复损坏的固件,它可能包含完整的系统映像,所以尝试分析 .ri 文件。

尝试使用binwalk提取 bin 同目录下 .ri 文件。

代码语言:javascript
代码运行次数:0
运行
复制
$ binwalk -e 530ABFV0C0.ri

图2-3 binwalk提权.ri文件

ri 文件中提取出 240 和 240.7z。

图2-4 ri文件中提取出240和240.zip

240.7z 为 240 文件的压缩包,所以继续提取 240 文件。

代码语言:javascript
代码运行次数:0
运行
复制
$ cd _530ABFV0C0.ri.extracted/
$ binwalk -e 240

图2-5 binwalk提权240文件

可以在提取到的 _240.extracted 文件夹下看到 zyinit 二进制文件,linux 常规的初始化启动进程就是init,所以将焦点放在了zyinit。

图2-6 240文件提取内容

参考文章中提到分析 zyinit 发现它启动了其他外部命令,特别是 zld_fsextract 命令。

zld_fsextract 二进制文件中搜索密码,有很多很好的分析点,这里就不多赘述感兴趣可以自行跟进。发现 unzip 二进制文件使用这些选项来解压缩具有特定密码的文件,该密码在参数-P中定义。根据在线找到的信息并进行快速分析,二进制文件似乎根据二进制文件名称或二进制文件内容以某种方式计算解压缩密码。所以不需要密码, zld_fsextract 使用 unzip 即可拿到镜像文件。

现在可以模拟 MIPS 环境执行二进制文件并尝试提取文件了。

2.2 QEMU 模拟

先来判断一下需要模拟什么环境,这里 N32 有一个比较大的坑。

代码语言:javascript
代码运行次数:0
运行
复制
$ file zld_fsextract 
zld_fsextract: ELF 32-bit MSB executable, MIPS, N32 MIPS64 rel2 version 1 (SYSV), statically linked, stripped

通过判断 zld_fsextract 文件类型, 一开始使用 qemu-system-mips 内核镜像选择 vmlinux-3.2.0-4-5kc-malta 结果环境启动不了。第二次换内核镜像为 vmlinux-2.6.32-5-4kc-malta 环境成功启动,但是运行 zld_fsextract 报错不兼容。

代码语言:javascript
代码运行次数:0
运行
复制
# ./zyinit
-bash: ./zyinit: cannot execute binary file

分析得知 N32 是用在32位和64位 MIPS 处理器上的一种中间形式[2],它允许使用64位寄存器和内存寻址,但保持了32位数据模型,这样可以减少由于64位数据类型较大而带来的性能和内存使用上的开销。所以需要选择支持N32 ABI的MIPS64架构的模拟器来运行。

准备文件系统和内核镜像:

代码语言:javascript
代码运行次数:0
运行
复制
vmlinux-2.6.32-5-5kc-malta  内核镜像
debian_squeeze_mips_standard.qcow2  文件系统

启动模拟环境:

代码语言:javascript
代码运行次数:0
运行
复制
$ qemu-system-mips64 -M malta -kernel vmlinux-2.6.32-5-5kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic

启动后用户名和密码都是root即可登录模拟系统。

接下来在宿主机创建一个网卡,是 qemu 内能和宿主机通信。

宿主机安装依赖:

代码语言:javascript
代码运行次数:0
运行
复制
$ sudo apt-get install bridge-utils uml-utilities

将如下代码保存为 net.sh 并运行即可:

代码语言:javascript
代码运行次数:0
运行
复制
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tap0 -j ACCEPT
sudo iptables -I FORWARD 1 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo ifconfig tap0 192.168.100.254 netmask 255.255.255.0

然后配置 qemu 虚拟系统的路由,在 qemu 虚拟系统运行如下 net.sh 并运行。

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/sh
ifconfig eth0 192.168.100.2 netmask 255.255.255.0
route add default gw 192.168.100.254

//虚拟系统可能没有 vimnano,使用 echo 一行一行写。

这样宿主机和模拟环境就可以网络互通了。

2.3 QEMU 固件提取

将刚才问题分析时在宿主机上整个文件夹上传到 qemu 系统.

代码语言:javascript
代码运行次数:0
运行
复制
$ scp -r VPN100/ root@192.168.100.2:VPN100

这样就可以在虚拟机使用 zld_fsextract 二进制文件获取固件映像信息了,记得将 530ABFV0C0.bin 移动到 zld_fsextract 同目录下。

代码语言:javascript
代码运行次数:0
运行
复制
# cp 530ABFV0C0.bin _530ABFV0C0.ri.extracted/_240.extracted/
# cd _530ABFV0C0.ri.extracted/_240.extracted/
# ./zld_fsextract 530ABFV0C0.bin -s list

使用 zld_fsextract 二进制文件提取固件且无需指定密码。

代码语言:javascript
代码运行次数:0
运行
复制
# ./zld_fsextract 530ABFV0C0.bin ./unzip -s extract -e code

这时会在 /rw/ 路径下生成 compress.img ,将这个文件传输到宿主机使用 binwalk 提取即可得到 squashfs-root 文件系统。

代码语言:javascript
代码运行次数:0
运行
复制
# ls -al /rw/
total 94480
drwxr-xr-x  3 root root     4096 Mar 19 07:58 .
drwxr-xr-x 23 root root     4096 Mar 19 07:59 ..
-r--r--r--  1 root root 96575488 Apr 19  2022 compress.img
drwxr-xr-x  6 root root     4096 Apr 19  2022 etc_writable
-rw-r--r--  1 root root      139 Apr 19  2022 filechecksum
-rw-r--r--  1 root root    35655 Apr 19  2022 filelist
-rw-r--r--  1 root root      327 Apr 19  2022 fwversion
-rw-r--r--  1 root root     8375 Apr 19  2022 wtpinfo

这里是宿主机提取 compress.img 得到 squashfs-root 截图。

图2-7 镜像中提取出文件系统

拿到固件就可以开开心心进行漏洞复现和分析啦。

2.4 总结

参考文章中不仅提到了固件提取,还进行了密码分析。读者如果感兴趣可以跟着继续深度学习,这里只是将实操过程中的步骤进行更详细的展示,也是一次学习过程的笔记记录。

3 参考链接

参考资学完了前面三个程序后,可以说已经入门了单片机开发,能进行以下几种基础操作:控制端口输出,编写中断函数,通过uart口输出调试信息。

[1]Zyxel固件提取和密码分析

https://security.humanativaspa.it/zyxel-firmware-extraction-and-password-analysis/

[2] MIPS ABI n32意味着什么

https://www.cnblogs.com/yorkwoo/p/4709772.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Seebug漏洞平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
TOTOLINK NR1800X 系列 CVE 分析
TOTOLINK NR1800X最近报了一些cve,现主要对其命令注入进行具体分析,以及对其登录绕过进行分析。
Seebug漏洞平台
2023/01/05
1.2K0
TOTOLINK NR1800X 系列 CVE 分析
物联网设备的几种固件仿真方式
QEMU是比较老的开源固件仿真工具,现如今的很多仿真工具大多都是在此框架的基础上进行修改或是优化。QEMU有多种模式,比如User mode、System mode、KVM Hosting、Xen Hosting。在实际的仿真过程中主要使用的其实就是User mode、System mode,也就是用户模式和系统模式。用户模式就是QEMU运行针对不同指令编译的单个Linux或Darwin/macOS程序。系统模式就是QEMU模拟一个完整的计算机系统,包括外围设备。
绿盟科技研究通讯
2021/09/27
5.3K0
从一道mips题目学习搭建mips环境及ROP
本文以一道简单的mips pwn题,讲解mips环境搭建及mips ROP的构造。这道题目是安洵杯的一道pwn题,题目链接https://github.com/Q1IQ/ctf/blob/master/mips/pwn2
黑伞安全
2020/11/09
3.2K0
从一道mips题目学习搭建mips环境及ROP
复现|路由器命令执行
上次有小伙伴反馈说,摄像头的仿真部分写的不详细,正好最近在先知上看到了ONESHELL师傅的文章「见参考链接1」,所以今天我们就以这台路由器为例子,使用QEMU仿真模拟并分析该漏洞的成因「固件下载后台回复: 华为路由器 」
物联网安全小编
2021/07/07
1.6K1
复现|路由器命令执行
IoT漏洞研究(一)固件基础
随着5G时代的到来,物联网扮演的角色也越来越重要,同时也伴随更多的安全风险。IOT安全涉及内容广泛,本系列文章将从技术层面谈一谈笔者对IOT漏洞研究的理解。笔者将从固件、web、硬件、IOT协议、移动应用五个维度分别探讨,由于水平能力有限,不当或遗漏之处欢迎大家指正补充。 IoT固件基础 之所以将固件作为第一个探讨的主题,因为比较基础,IOT漏洞研究一般无法绕过。以下将介绍固件解密(若加密)、解包打包、模拟和从固件整体上作安全评估四部分。 1.1 固件解密 有些IOT设备会对固件加密甚至签名来提高研究门槛和
FB客服
2023/04/26
2.9K0
IoT漏洞研究(一)固件基础
加密固件分析实战
设备固件的安全性分析是IoT安全审计中非常重要的部分。获取固件是分析中的众多挑战之一,你可以通过多种技术来做到这一点。拥有固件后,就可以对其进行更仔细的分析。获取设备固件的最简单方法是从供应商更新服务器(通常是FTP服务器)下载,服务器中存储了不同版本的固件,而获取下一个版本的技术已编码在固件中。为了防止这种情况,供应商已开始以加密形式在服务器上存储固件,因此,即使你获取了固件,在进行进一步分析之前仍需要对其进行解密。
FB客服
2020/05/29
1.5K0
加密固件分析实战
MIPS漏洞调试环境安装-栈溢出
主要是IDA,IDA的安装就不用多说了。这里说明的是辅助插件MIPSROP这些插件的安装,书里面给的插件的链接已经无法支持IDA 6.7以后的版本,主要是由于版本以后的API有更新,具体原因IDA的官方博客也给出了说明,查看了issue以后,发现有大佬已经写了能够支持IDA7.0的插件,安装的命令照着readme做即可顺利的装上。
随心助手
2019/10/15
1.8K0
路由器0day漏洞挖掘实战
本文已发表到安全客:https://www.anquanke.com/post/id/180714
用户1423082
2024/12/31
1280
路由器0day漏洞挖掘实战
路由器漏洞分析入门:D-Link Service.Cgi远程命令执行漏洞
在正在到来的物联网时代,路由器是一个家庭里面的核心,连接着各种智能设备,路由器会被更多的黑客盯上,用于发动DDos,传播木马、病毒、挖矿软件等。本文以D-Link路由器的一个远程命令执行漏洞为例带你入门路由器漏洞分析。
用户1423082
2024/12/31
960
路由器漏洞分析入门:D-Link Service.Cgi远程命令执行漏洞
DLink RCE漏洞CVE-2019-17621分析
上一篇文章分了一下ARM系统的路由器漏洞,本次打算尝试一下MIPS系统,于是选了最近DLink路由器的漏洞CVE-2019-17621作为目标。同样一路走来各种踩坑不断,“纸上得来终觉浅,绝知此事要躬行”,对整个过程做一下梳理。
FB客服
2020/03/24
2.1K0
DLink RCE漏洞CVE-2019-17621分析
工控CTF之某固件分析解题
在2019年工业信息安全技能大赛第一场线上赛中有一道固件分析的题目,当时虽然Get到了答案,却终归是知其然不知其所以然,于是决定搭个环境来完整分析一下,顺便学习一下路由器漏洞分析。话不多说,先上题目:
FB客服
2019/12/23
2K0
工控CTF之某固件分析解题
重现 TP-Link SR20 本地网络远程代码执行漏洞
3月26号 Google 安全开发人员 Matthew Garrett 在 Twitter 上公布了 TP-Link Smart Home Router (SR20) 的远程代码执行漏洞,公布的原因是他去年 12 月份将相关漏洞报告提交给 TP-Link后没有收到任何回复,于是就公开了,该漏洞截至目前官方修复,在最新固件中漏洞仍然存在,属于 0day 漏洞,当我看到漏洞证明代码(POC)后决定尝试重现此漏洞。
Seebug漏洞平台
2019/05/07
1.7K0
重现 TP-Link SR20 本地网络远程代码执行漏洞
物联网安全——D-Link DIR-822-US固件分析
🚀🚀我们首先要获得D-Link DIR-822-US的固件,根据后面的US我们就知道需要去国外的网站下载,国内是没有这款产品的。具体地址如下所示:D-Link Technical Support (dlink.com),考虑到有些同学的网可能不是“很好”,所以我会放在网盘里面供大家学习**(差点忘记了,放评论区了)**。
小点点
2024/03/30
3700
物联网安全——D-Link DIR-822-US固件分析
一次qemu动态调试路由程序的记录
下载固件ftp://54.187.190.227/PRODUCTS/DIR-605L/REVA/DIR-605L_FIRMWARE_1.13.ZIP,
用户1423082
2024/12/31
960
一次qemu动态调试路由程序的记录
【产品那些事】固件安全-关于OTA升级包分析
OTA(Over-the-Air)是一种通过无线通信网络(如Wi-Fi、蜂窝网络)远程下载和安装设备固件或软件更新的方式。这种方式广泛应用于智能手机、物联网设备、汽车电子等领域。
没事就要多学习
2024/07/24
4080
【产品那些事】固件安全-关于OTA升级包分析
路由器漏洞 EXP 开发实践
本文主要以 CVE-2013-0230 漏洞为例,讲解路由器上缓冲区漏洞的 exp 编写。
信安之路
2018/08/08
1.3K0
路由器漏洞 EXP 开发实践
Cisco Linksys无线路由固件安全分析与后门研究
最近我对嵌入式设备安全方面比较感兴趣,所以我决定找点东西练练手,于是我在淘宝上搜了一下,发现Linksys WRT54Gv5无线路由比较流行,决定就拿这个下手了。 首先要做的就是对固件开始逆向,看一下它的内部构件都是什么玩意儿。这个过程我也发现了这是一件多么令人蛋疼的事情,因为linksys本身已经不再承载固件了,另外,由于版权保护的问题,也没人跟我一样这么做。这些事简直蠢到家了,不过最终我还是偶然发现了一个固件副本,然后用它给我的路由器刷了固件以便分析时与硬件保持一致,然后就开始上手了。 分析 在看了不少
FB客服
2018/02/05
1.9K0
Cisco Linksys无线路由固件安全分析与后门研究
物联网设备固件分析之小试牛刀
近几年,物联网设备已渗透到生活的方方面面,为人们带来了极大的方便。但是,因其承载有人们日常生活产生的数据和隐私信息,其安全性也越来越受到人们的关注。在上一篇中,我们讨论了用脚本控制小米设备,这主要是从流量层面入手来进行的安全分析;在这一篇,主要从固件入手,分析固件的脆弱性。
FB客服
2018/12/11
1.6K0
物联网设备固件分析之小试牛刀
如何分析和解密已加密的路由器固件
我们直奔主题!现在,查看你的路由器品牌及型号信息,然后去对应厂商的官方网站下载你路由器对应的固件。下载完成之后,把固件文件丢到binwalk里,这样我们就可以在QEMU中模拟路由固件了。此时,你将会看到如下图所示的画面:
FB客服
2020/02/25
1.8K0
Vivotek 摄像头远程栈溢出漏洞分析及利用
近日,Vivotek 旗下多款摄像头被曝出远程未授权栈溢出漏洞,攻击者发送特定数据可导致摄像头进程崩溃。
Seebug漏洞平台
2018/03/15
1.5K0
Vivotek 摄像头远程栈溢出漏洞分析及利用
相关推荐
TOTOLINK NR1800X 系列 CVE 分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验