Linux /etc/shadow文件中的密码字段 加密密码生成 hash

有关/etc/passwd 的信息和提权:https://www.hackingarticles.in/editing-etc-passwd-file-for-privilege-escalation/

linux的shadow文件中的第二个字段保存了加密后的密码,加密数据的格式为 $type$salt$encrypted,其中type是提示符,salt是随机生成的字符串,encrypted是明文密码和salt通过crypt函数加密后的结果。在加密数据中的提示符type用来标识采用了哪种加密方式,这样的标识符有以下几种:

1 代表采用了MD5加密方式
2 Blowfish,是最早的版本,有一些缺陷,不推荐使用
2a Blowfish,是修复了一些缺陷后的版本,但仍然有一些问题,不推荐使用
2b Blowfish,是修复了2a中的问题后的版本,是安全、常用的版本
2y Blowfish,Eksblowfish版本
y 是Yescrypt加密方式的前缀,是Blowfish加密方式的一个变种,提供了更高的安全性和性能
5 代表采用了SHA256加密方式
6 代表采用了SHA512加密方式

来源:
https://tecadmin.net/etc-shadow-file-in-linux/
https://linuxize.com/post/etc-shadow-file/
https://www.baeldung.com/linux/shadow-passwords

加密密码生成:

$ mkpasswd -m sha-512 PASSWORD -S SALTSALT
$6$SALTSALT$MQZd2k7LgsATI3R86uv5QQaPEdjvUSmKXR7hQYUbvQMlCGaztAP3BoGPtZ3dWcdEaq/XdJrCpcoyWo0IjXjy70

$ perl -e 'print crypt "PASSWORD", "\$6\$SALT\$"'
$6$SALT$io0TPmhM8ythCm7Idt0AfYvTuFCLyA1CMVmeT3EUqarf2NQcTuLKEgP9.4Q8fgClzP7OCnyOY1wo1xDw0jtyH1                                                                                                                                                                                                     

$ ruby -e 'puts "PASSWORD".crypt("$6$SALT")'
$6$SALT$io0TPmhM8ythCm7Idt0AfYvTuFCLyA1CMVmeT3EUqarf2NQcTuLKEgP9.4Q8fgClzP7OCnyOY1wo1xDw0jtyH1
                                                                                                                                                                                                     
$ python3 -c 'import crypt; print(crypt.crypt("PASSWORD", "$6$SALT"))'
*******
$6$SALT$io0TPmhM8ythCm7Idt0AfYvTuFCLyA1CMVmeT3EUqarf2NQcTuLKEgP9.4Q8fgClzP7OCnyOY1wo1xDw0jtyH1
                                                                                                                                                                                                     
$ python2 -c 'import crypt; print(crypt.crypt("PASSWORD", "$6$SALT$"))'
$6$SALT$io0TPmhM8ythCm7Idt0AfYvTuFCLyA1CMVmeT3EUqarf2NQcTuLKEgP9.4Q8fgClzP7OCnyOY1wo1xDw0jtyH1
                                                                                                                                                                                                     
$ openssl passwd -salt SALT -6 PASSWORD
$6$SALT$io0TPmhM8ythCm7Idt0AfYvTuFCLyA1CMVmeT3EUqarf2NQcTuLKEgP9.4Q8fgClzP7OCnyOY1wo1xDw0jtyH1

其他内容:
/etc/shadow文件每行的格式:

用户名(username):加密后的密码($type$salt$encrypted):最后一次修改密码的日期(比如19429):最小修改密
码间隔(0):最大修改密码间隔(99999):密码过期前的警告天数(7):密码过期后的宽限天数():账户失效日
期():保留字段()

例如:

alice:$6$Za9Xy8$WQ2gY0w7x0yKQf6zL8FJ3RZ0a7Z9cXq3G8dYn0b5j4o.:18923:0:90:10:5:::
每一行代表一个用户账户,用冒号(:)分隔成九个字段。
第一个字段是用户名,与/etc/passwd文件中的用户名相对应。
第二个字段是加密后的密码,使用$type$salt$hashed的格式,其中type是加密算法的标识符,salt是随机生成的
字符串,hashed是明文密码和salt通过crypt函数加密后的结果。
第三个字段是最后一次修改密码的日期,用1970年1月1日以来的天数表示。
第四个字段是最小修改密码间隔,即两次修改密码之间必须经过的天数。如果为空或为0,则没有限制。
第五个字段是最大修改密码间隔,即密码有效期。超过这个天数后,用户必须修改密码。默认值为99999。
第六个字段是密码过期前的警告天数,即在密码到期之前多少天开始提醒用户修改密码。
第七个字段是密码过期后的宽限天数,即在密码过期后多少天内用户还可以登录系统。如果为空或为0,则没有
宽限期。如果为-1,则密码永不过期。
第八个字段是账户失效日期,用1970年1月1日以来的天数表示。超过这个日期后,用户不能登录系统。
第九个字段是保留字段,目前没有使用。
例子中的行,表示:
用户叫alice,密码是123456,最后一次修改密码是在2021年10月1日,密码有效期是90天,密码过期前的警告
天数是10天,密码过期后的宽限天数是5天,账户没有失效日期。

/etc/passwd文件每行的格式:

每一行代表一个用户账户,用冒号(:)分隔成七个字段。
第一个字段是用户名,是用户登录时输入的字符串。每个用户名在系统中必须是唯一的,长度不能超过32个字符。
第二个字段是密码,如果是x字符,表示加密后的密码存储在/etc/shadow文件中。如果要修改密码,需要使用
passwd命令。
第三个字段是用户标识符(UID),是一个分配给每个用户的数字。系统用它来识别用户。UID为0的用户是root,
UID为1-99的用户是预定义的账户,UID为100-999的用户是系统和管理账户。
第四个字段是组标识符(GID),是用户所属的主要组的编号。用户创建文件时,文件的组会被设置为这个组。
用户的次要组在/etc/group文件中列出。
第五个字段是GECOS或用户的全名,这个字段可以包含一些额外的信息,如用户的姓名、电话号码等。
这个字段可以被finger命令使用。
第六个字段是家目录,是用户登录时所在的目录的绝对路径。如果这个目录不存在,那么用户的目录就是/
第七个字段是登录shell,是用户登录时启动的shell的绝对路径。通常这是一个shell,如/bin/bash。但也可以
不是一个shell,例如管理员可以使用nologin shell来禁止用户直接登录系统。

/etc/passwd 文件对于系统的每个用户(用户帐户)每行包含一个条目。所有字段均由冒号 : 符号分隔。总共七个字段如下。一般来说,/etc/passwd 文件条目如下所示:

测试:x:0:0:root:/root:/bin/bash

[以冒号 : 分隔]

用户名:用户登录时使用。长度应在 132 个字符之间。
密码:x 字符表示加密的密码存储在 /etc/shadow 文件中。请注意,您需要使用 passwd 命令来计算在 CLI 中输入的密码的哈希值,或者在 /etc/shadow 文件中存储/更新密码的哈希值,在这种情况下,密码哈希值存储为“x”。
用户 ID ( UID ):必须为每个用户分配一个用户 ID (UID)UID 0(零)为 root 保留,UID 1-99 为其他预定义帐户保留。另外 UID 100-999 由系统保留用于管理和系统帐户/组。
组 ID (GID):主要组 ID(存储在 /etc/group 文件中)
用户 ID 信息:评论字段。它允许您添加有关用户的额外信息,例如用户的全名、电话号码等。该字段通过手指命令使用。
主目录:用户登录时所在目录的绝对路径。如果该目录不存在,则用户目录将变为 /
Command/shell:命令或 shell 的绝对路径 (/bin/bash)。通常,这是一个外壳。请注意,它不一定是外壳。

chage 工具可以显示和配置密码期限设置,而无需手动计算日期和日期。
使用 –list 标志来检查根用户的所有设置:
(https://www.baeldung.com/linux/shadow-passwords)

$ chage --list root
Last password change                                    : Oct 01, 2022
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

chpasswd 工具是对 chage 的补充,因为它使我们能够显示和操作 /etc/shadow 的密码字段。
(https://www.baeldung.com/linux/shadow-passwords)

$ echo 'user1:PASSWORD' | chpasswd --crypt-method SHA512  #不要轻易执行此命令,这会将user1的密码改为PASSWORD

哈希自动识别工具 - python库
https://pypi.org/project/hashID/

Unix 风格的密码前缀的表格

PrefixAlgorithm
1 1 1md5crypt, used in Cisco stuff and older Linux/Unix systems
2 2 2, 2 a 2a 2a, 2 b 2b 2b, 2 x 2x 2x, 2 y 2y 2yBcrypt (Popular for web applications)
6 6 6sha512crypt (Default for most Linux/Unix systems)

查找更多哈希格式和密码前缀的好地方是 hashcat 示例页面,可在此处找到: https: //hashcat.net/wiki/doku.php?id =example_hashes 。

kali命令行工具:
hash-identifier
https://www.kali.org/tools/hash-identifier/
hashid
https://www.kali.org/tools/hashid/

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值