BUUCTF--firmware
测试文件:https://www.lanzous.com/iaup43c
文件提取
binwalk
首先需要使用binwalk对文件进行提取。安装教程:https://blog.csdn.net/QQ1084283172/article/details/65441110
binwalk -e fire.bin
firmware-mod-kit分析
安装
sudo yum install git build-essential zlib1g-dev liblzma-dev python-magic
git clone https://github.com/mirror/firmware-mod-kit.git
cd firmware-mod-kit/src
./configure
make
说明
extract-firmware.sh 解包固件
build-firmware.sh 重新封包
check_for_upgrade.sh 检查更新
unsquashfs_all.sh 解包提取出来的squashfs文件
将_fire.bin.extracted文件夹中的120200.squashfs文件,转存到firmware-mod-kit文件夹
mv /root/_fire.bin.extracted/120200.squashfs /root/firmware-mod-kit
cd firmware-mod-kit
./unsquashfs_all.sh 120200.squashfs
cd squashfs-root/tmp/
dir
第三条指令,可以使用绝对路径,不过我报错了,所以用的相对路径。
提取出的backdoor就是我们需要的文件。
文件分析
upx脱壳
代码分析
因为题目中是让我们找网址+端口的md5加密结果,因此我们只需要在String window找网址和端口就行。
找到源处
bool initConnection() { char *v0; // r0 char s; // [sp+4h] [bp-208h] int v3; // [sp+204h] [bp-8h] memset(&s, 0, 0x200u); if ( mainCommSock ) { close(mainCommSock); mainCommSock = 0; } if ( currentServer ) ++currentServer; else currentServer = 0; strcpy(&s, (&commServer)[currentServer]); v3 = 36667; if ( strchr(&s, 58) ) { v0 = strchr(&s, 58); v3 = atoi(v0 + 1); *strchr(&s, 58) = 0; } mainCommSock = socket(2, 1, 0); return connectTimeout(mainCommSock, &s, v3, 30) == 0; }
即:echo.byethost51.com:36667
get flag!
flag{33a422c45d551ac6e4756f59812a954b}