[案例分享] 解包威联通NAS系统镜像,恢复降级后丢失的系统组件
威联通(QNAP)在2021年9月发布了全新的QTS 5.0系统,笔者最近收到了官方更新通知,于是将自己的TS-551升级到最新版,却发现无论是系统流畅度还是稳定性都与他们宣传的差距甚远,不得不降级到QTS 4.5.4。然而由于QTS 5.0将FTP作为可选软件包(QuFTP),降级后系统里既没有QuFTP,也没有QTS 4应该有的
proftpd
,本文将为读者分享威联通NAS解包系统镜像,恢复系统组件的过程。
0x01 问题概述
如上文所示,笔者在从QTS 5降级到QTS 4后,发现FTP服务打开后,21端口依旧无法联通,进入SSH查看进程列表,却发现根本没有proftpd
进程:文章图片
0x02 分析问题 笔者首先想到的是手动启动FTP服务,于是执行了如下命令:
sudo /etc/init.d/ftp.sh start
执行完毕后,却发现FTP进程并没有出现。
【[案例分享] 解包威联通NAS系统镜像,恢复降级后丢失的系统组件】于是笔者打开上述启动脚本,希望能手动启动服务,查看是否有报错或其他信息:
/sbin/daemon_mgr proftpd start "LD_PRELOAD=/usr/local/lib/libtrash.so TZ=/etc/localtime /usr/local/sbin/proftpd -n > /dev/null 2>&1 &"
直接报错
segmentation fault
:文章图片
直接执行
/usr/local/sbin/proftpd
:文章图片
看来这就是问题所在,proftpd根本不存在,也许是降级时固件忘记将QTS 5.0删除的proftpd恢复回来,导致此问题。
在经过一番搜索后,笔者发现威联通修改过proftpd的源码,加入了管理功能和一些其他的定制功能,因此无法直接从网上找现成的二进制文件或源码包安装,必须使用和系统版本匹配的原版二进制文件恢复回去。那么哪里来二进制文件呢?笔者想到了官方的系统固件。
笔者从威联通的下载中心下载和系统版本一致的镜像,获得名为
TS-XA51_20210923-4.5.4.1800.zip
的系统镜像,解压之,获得了后缀名为.img
的同名镜像。在尝试使用多款解压缩软件和磁盘镜像软件后,笔者意识到,似乎该镜像文件并不是常规的格式,而是威联通定制的格式。既然是定制的格式,那么一定有地方可以解压,而系统镜像是安装到NAS里的,解压工具也应该在NAS里有内置才对。
0x03 解包镜像 找到了一个可行的方向,于是笔者开始在系统里寻找与固件更新相关的脚本。在笔者的一番寻找下,发现一个位于
/etc/init.d/update.sh
的脚本非常『可疑』,由于脚本较长,下文摘录其中一行,也是最关键的一行:/sbin/PC1 d QNAPNASVERSION4 "$path_name" "${_tgz}" "${CS_SIGNATURE}";
按照脚本所示,PC1应该是解压系统固件包的工具,该工具将系统固件解压到一个
.tar.gz
文件。于是笔者按照这个命令的规则,对上文我们获得的img包进行解压:PC1 d QNAPNASVERSION4 ./TS-XA51_20210923-4.5.4.1800.img ./TS-XA51_20210923-4.5.4.1800.tar.gz
结果令人振奋,果然拿到了一个名为
TS-XA51_20210923-4.5.4.1800.tar.gz
的压缩包:文章图片
接下来笔者尝试解压该压缩包,获得了下图所示的文件:
文章图片
根据文件名规则,可以猜测出部分文件来自boot分区,而里面的
rootfs2.bz
和rootfs_ext.tgz
则是需要关注的重点。于是笔者继续解压这两个文件:$ bzip2 -k -d ./rootfs2.bz
bzip2: ./rootfs2.bz is not a bzip2 file.
# 既然其格式不是标准格式,那么使用file命令来看看到底是什么格式
$ file ./rootfs2.bz
rootfs2.bz: LZMA compressed data, streamed
# 原来是LZMA格式,和initrc.img一样解压即可
$ xz -dc ./rootfs2.bz | cpio -id
此时再查看当前目录,会发现出现了一些目录:
文章图片
上文提到,我们需要的文件在
/usr/local/sbin/prosftpd
,那么来看看./rootfs2.bz
文件里是否包含我们所需要的文件呢:文章图片
答案是肯定的~
0x04 解决问题 既然获得了这个文件,接下来要做的事情就非常简单了:将其复制到对应目录,然后在NAS的控制面板里重新打开FTP服务:
$ sudo cp ./usr/local/sbin/proftpd /usr/local/sbin/proftpd
文章图片
再查看进程列表:
文章图片
使用telnet连接21端口,可以连通,问题成功解决!
文章图片
推荐阅读
- 第326天
- 姚老师互动问答会|姚老师互动问答会 # 问题001(如何更有智慧的和身边人分享金刚智慧())
- 焦点学习田源分享第267天《来访》
- 《偶得》
- 2018.03.18
- 坚持分享第104天
- 句子分享
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 康恩赫助力线头公益#义卖星推官#,分享你最喜爱的义卖明星
- 课后分享记录