- 场景需求:
一些IT服务的产品,如上网行为管理、入侵检测、堡垒机、监控系统等,在提供高端的嵌入式硬件的产品之外,都会有对应的定制性系统镜像,我们拿到后,装载到自己的设备或虚机上即可直接测试或使用了,从而降低成本;当然对此也仅限于使用功能服务,因为我们并没有权限进入到人家的系统里面,而仅仅是通过网页或客户端使用里面的服务,并且真要使用时还要购买人家的license,这个就不要多想了,毕竟别人制作产品还是很辛苦的,但如果能破解了root密码,远程到系统内部,做些小小的更改还是没有问题的!
一、什么是wfilter及破解思路
二、破解wfilter镜像root密码再封装步骤:
①、先挂载镜像,没的说!
[root@Moni ~]# mkdir /mnt/wfilter
[root@Moni ~]# file /home/WFilter_NGF_build_1.1.2017.02.20_zh.iso
/home/WFilter_NGF_build_1.1.2017.02.20_zh.iso: ISO 9660 CD-ROM filesystem data 'CDROM' (bootable)
[root@Moni ~]# mount -o loop /home/WFilter_NGF_build_1.1.2017.02.20_zh.iso /mnt/wfilter
②、拷贝整个镜像到新目录(镜像的挂载点是可读系统嘛)
[root@Moni ~]# cd /mnt/wfilter
[root@Moni wfilter]# ls
boot.cat boot.catalog initrd.img isolinux.bin isolinux.cfg linux
[root@Moni wfilter]# mkdir /home/wfilter
[root@Moni wfilter]# cp ./* /home/wfilter/
[root@Moni wfilter]# cd /home/wfilter
[root@Moni wfilter]# ll
[root@Moni wfilter]# ll -h
总用量 38M
-r--r--r-- 1 root root 2.0K 2月 20 2017 boot.cat
-r--r--r-- 1 root root 2.0K 8月 10 17:31 boot.catalog
-r--r--r-- 1 root root 34M 8月 10 16:59 initrd.img
-r--r--r-- 1 root root 24K 2月 20 2017 isolinux.bin
-r--r--r-- 1 root root 81 2月 20 2017 isolinux.cfg
-r--r--r-- 1 root root 4.1M 2月 20 2017 linux
<--这里通过一些其它的操作,判断密码文件应该放在initrd.img镜像里面-->
③、解压initrd.img镜像压缩文件
[root@Moni wfilter]# file initrd.img (没错这是个gzip压缩文件)
initrd.img: gzip compressed data, from Unix, last modified: Mon Feb 20 16:08:04 2017
[root@Moni wfilter]# mv initrd.img initrd.img.gz
[root@Moni wfilter]# gunzip initrd.img.gz (解压它)
[root@Moni wfilter]# file initrd.img (这是一个cpio压缩的归档文件)
initrd.img: ASCII cpio archive (SVR4 with no CRC)
[root@Moni wfilter]# mkdir initrd (新建一个目录拷贝进入解压,避免文件混乱)
[root@Moni wfilter]# mv initrd.img initrd
[root@Moni wfilter]# cd initrd/
[root@Moni initrd]# cpio -ivdm < initrd.img
[root@Moni initrd]# ls (看到etc目录,不要惊喜,套路!里面并没有密码文件)
bin dev etc init initrd.img proc root sbin src sys tmp usr
④、挂载wfilter系统的定制系统分区的镜像文件(姑且这么叫吧)
[root@Moni initrd]# cd root/
[root@Moni root]# ll -h
总用量 34M (很明显是个gz压缩文件,避免套路确认一下)
-rw-r--r-- 1 1001 1001 34M 2月 20 2017 openwrt-x86-generic-combined-ext4.img.gz
[root@Moni root]# file openwrt-x86-generic-combined-ext4.img.gz
openwrt-x86-generic-combined-ext4.img.gz: gzip compressed data, from Unix, max compression
[root@Moni root]# gunzip openwrt-x86-generic-combined-ext4.img.gz
[root@Moni root]# ll -h
总用量 307M
-rw-r--r-- 1 1001 1001 307M 2月 20 2017 openwrt-x86-generic-combined-ext4.img
[root@Moni root]# file openwrt-x86-generic-combined-ext4.img
openwrt-x86-generic-combined-ext4.img: x86 boot sector;
partition 1: ID=0x83, active, starthead 8, startsector 512, 102400 sectors;
partition 2: ID=0x83, starthead 9, startsector 103424, 524288 sectors, code offset 0x63
<--没错,这是个虚拟分区文件,包含两个分区,别管是什么,想办法挂载它-->
[root@Moni root]# kpartx -av openwrt-x86-generic-combined-ext4.img
add map loop4p1 (253:2): 0 102400 linear /dev/loop4 512
add map loop4p2 (253:3): 0 524288 linear /dev/loop4 103424
<--kpartx命令让系统识别并创建了两个设备文件,挂载它吧!-->
[root@Moni root]# mkdir work1
[root@Moni root]# mkdir work2
[root@Moni root]# mount /dev/mapper/loop4p1 work1
[root@Moni root]# mount /dev/mapper/loop4p2 work2
⑤、找到密码文件,并修改它
[root@Moni root]# cd work1
[root@Moni work1]# ls
boot lost+found (显然没有)
[root@Moni work1]# cd ../work2
[root@Moni work2]# ls (有点苗头etc)
bin dev etc lib lost+found mnt overlay proc rom root sbin sys tmp usr var www
[root@Moni work2]# cat etc/shadow | grep root
#root::0:0:99999:7:::
root:zh:0:0:99999:7:::
<--这里很明显,“zh”什么鬼,反正是不生效的密码,也不是“*”锁定用户-->
[root@Moni work2]# useradd test
[root@Moni work2]# echo "123456" | passwd --stdin test
更改用户 test 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@Moni work2]# tail -n1 /etc/shadow | awk -F ":" '{print $2}'
$1$wNfKM.S4$bT2zWOTIeHZevzsWASlcM0
<--把上面这段密文复制拷贝到etc/shadow文件中的root那一行的第二段,是当前目录的etc-->
[root@Moni work2]# vi etc/shadow
root:$1$wNfKM.S4$bT2zWOTIeHZevzsWASlcM0:0:0:99999:7:::
<--密码修改成功,密码是“123456”,当然你可以自定义自己的密码咯-->
[root@Moni work2]# userdel -r test ##最后删除测试用户
⑥、还原压缩再封装
(重点是按照之前的步骤一步步还原)
[root@Moni work2]# cd ../
[root@Moni root]# umount work1 work2
[root@Moni root]# kpartx -d openwrt-x86-generic-combined-ext4.img
loop deleted : /dev/loop4 (取消虚拟分区设备文件)
[root@Moni root]# gzip openwrt-x86-generic-combined-ext4.img
[root@Moni root]# rm -rf work1 work2
[root@Moni root]# cd ../
[root@Moni initrd]# rm -rf initrd.img
[root@Moni initrd]# ls
bin dev etc init proc root sbin src sys tmp usr
[root@Moni initrd]# find -print | cpio -covB > ../initrd.img
[root@Moni initrd]# cd ../
[root@Moni wfilter]# rm -rf initrd
[root@Moni wfilter]# gzip initrd.img
[root@Moni wfilter]# mv initrd.img.gz initrd.img
[root@Moni wfilter]# ls
boot.cat initrd.img isolinux.bin isolinux.cfg linux
(到此已经还原之前的结构,下面就是重新封装成可安装的镜像)
[root@Moni wfilter]# mkisofs -R -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -o ../wfilter-new.iso ./
I: -input-charset not specified, using utf-8 (detected in locale settings)
Using BOOT000.CAT;1 for /boot.cat (boot.catalog)
Size of boot image is 4 sectors -> No emulation
25.47% done, estimate finish Wed Aug 23 14:25:05 2017
50.99% done, estimate finish Wed Aug 23 14:25:05 2017
76.42% done, estimate finish Wed Aug 23 14:25:05 2017
Total translation table size: 2048
Total rockridge attributes bytes: 660
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
19628 extents written (38 MB)
[root@Moni wfilter]# file ../wfilter-new.iso
../wfilter-new.iso: ISO 9660 CD-ROM filesystem data 'CDROM' (bootable)
(好的就分享到这里,如果您有高见或好的分享,记得留言哦!)