/etc/shadow、/etc/passwd文件

Linux系统中,所有用户(包括系统管理员)的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到,其中passwd保存的是账号,shadow保存的是账号的密码等信息
/etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的一下基本属性。/etc/passwd只有系统管理员才可以修改的,该文件对所有用户可读。
在这里插入图片描述

/etc/shadow文件只有系统管理员才能够进行修改和查看。
在这里插入图片描述

查看/etc/passwd文件内容:
在这里插入图片描述

/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
第一列为账户名称
第二列为密码占位符(x表示该账户需要密码才能登录,为空时,账户无须密码即可登录)
第三列为账户UID
第四列为GID
第五列为账户附加基本信息,一般存储账户名全称,联系方式等信息
第六列为账户家目录位置(root账号在/root下)
第七列为账户登录Shell,/bin/bash为可登录系统Shell,/sbin/nologin表示账户无法登录系统。

/etc/shadow文件介绍
/etc/shadow文件格式与/etc/passwd文件格式类似,同样由若干个字段组成,字段之间用“:”隔开。
在这里插入图片描述
在这里插入图片描述

snowflakes:$6$k6sgCBLM2Qzkreq6$l1OrqaIUNDxrv5g14BljA.FkX.BQt5sulAlaR0QMyFR/wQMLA4Cebk1dw8xIiZU3tmMW9mKlOV2xeoXwrDnbk1:18760:0:99999:7:::

注意:是以:来分隔的,因此,密码的hash值中可能有 / . 这种字符

1.snowflakes 是用户名

2.$6$k6sgCBLM2Qzkreq6$l1OrqaIUNDxrv5g14BljA.FkX.BQt5sulAlaR0QMyFR/wQMLA4Cebk1dw8xIiZU3tmMW9mKlOV2xeoXwrDnbk1
内部使用$来连接如下各个部分
$6$ 是表示一种类型标记为6的密码散列算法,这里指SHA-512哈希算法.

ldLdLB0Bafsuuwp2 指的是加盐(Salt)值
1 | MD5
2a | Blowfish (not in mainline glibc; added in some Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
在这里插入图片描述
k6sgCBLM2Qzkreq6$l1OrqaIUNDxrv5g14BljA.FkX.BQt5sulAlaR0QMyFR/wQMLA4Cebk1dw8xIiZU3tmMW9mKlOV2xeoXwrDnbk1即密码的hash, 但不是直接的hash(“passwd”),而是hash(“passwd+salt”)后,再经过编码。

有了哈希函数,就可以将密码的哈希值存储进数据库。用户登录时,检验用户输入密码的哈希值是否与数据库中的哈希值相同来判断是否是合法用户.
常用的破解方法就是:字典破解,暴力破解,逆向查表,彩虹表.
然后就有了盐(Salt).
一个随机生成的字符串。将盐与原始密码连接在一起(放在前面或后面都可以),然后将concat后的字符串加密。采用这种方式加密密码,彩虹表就不灵了(因为盐是随机生成的).

所有伪用户这一部分都是 “!!” 或 “",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么这部分也是 “!!”,代表这个用户没有密码,不能登录。
可以在它前加上 “!”、"
” 或 “x” 使密码暂时失效。

3.18760 最近改动密码的日期,但为什么是一整个数字呢?其实这是把Linux元年1970年1月1日作为1,然后依次类推到你最近一次修改该用户密码的日期
4.0 密码不可被更改的天数,这里记录的是该用户的密码需要经过几天才可以被更改;如果这里为0,表示密码可以随时被改动。
5.99999 密码需要重新设定的天数(我理解为密码的保质期,就是你需要在这段时间内修改密码,保证密码的定期更新),如果超出这个时间段没有修改密码,那么该帐号会暂时失效。(默认位99999天,可以理解为永不过期)
6.7 这一条是根据上一条来界定的,是密码需要重新设定的期限之前的警告期限,设想一下,如果在你设定了要修改密码的事件后不设定一个提醒自己去修改密码的期限,那过了时间后,你的账号不就暂时失效了吗,所以这一条我们来规定一个提醒日期,来提醒我们”密码还有n天就过期啦!快修改密码啊!!“

最后还有 ::: ,即还有三个空白的域
7.第一个是密码过期后的宽限时间,意思就是在第五列规定的时间内你如果没有修改自己的密码,系统并不会立即使你的旧密码失效,而是会有个宽限日期,这一条,就是这个日期的具体值,在你定义的期限里,你依然可以使用你的旧密码登录(默认是空白)
8.第二个是帐号失效日期,这一条跟第三条的定义方法是一样的,从1970年1月1日开始算起,直到你定义的失效日期为止,这个账号就不能再使用啦!
9.第三个是保留的,为以后新的功能的加入留了位置

下面举个例子
攻击这个密码

root:$1$NAkZFH1u$byy9Vl8PSU3dJl5MicArx1:18446:0:99999:7:::

在这里插入图片描述

使用如下命令进行字典攻击

hashcat64.exe -m 500 -a 0 1 1 1NAkZFH1u$byy9Vl8PSU3dJl5MicArx1 wordlist.txt

当然可以切换成使用掩码来攻击
攻击成功
在这里插入图片描述

Logo

更多推荐