llinux 写/etc/passwd文件添加用户(openssl passd加密)

前言
在做vulnhub靶机——AI-web-1 .0的时候,getshell用户具有/etc/passwd写权限,/etc/shadow无读写权限。傻子将/etc/passwd密码直接以明文写进去,不能登录。
前提操作用户对文件/etc/passwd有写权限。
一、简单介绍/etc/passwd文件格式:
详细可参考大佬文章Linux /etc/passwd内容解释(超详细)
/etc/passwd保存了本地用户的基本信息

在这里插入图片描述

以:作为分隔符:
第一个参数(root):用户名称。
第二个参数(x):密码。x代表有密码,密码存储在/etc/shadow文件中。若此参数为空,则代表不用密码就可以登录此用户。
第三个参数(0):用户ID(UID)。0:超级用户 UID。1~499:系统用户UID。500 ~ 65535:普通用户 UID。
第四个参数(0):用户组ID(GID)。
第五个参数 (root):用户的简单说明。可为空。
第六个参数(/root):用户家目录。用户登录后具有操作权限的访问目录。
第七个参数(/bin/bash):用户登录shell。/bin/bash为可登录系统的shell,/sbin/nologin为禁止登录的shell(很多系统用户为禁止登录shell)。

二、openssl passwd加密简单用法
详细参考大佬文章(6) openssl passwd(生成加密的密码)

openssl passwd参数列表
在这里插入图片描述以下123456均为被加密的密码,123为盐值,-1(是数字1不是字母l)。

openssl passwd 123456
openssl passwd -1 123456
openssl passwd -salt '123' -1 123456

-crypt:UNIX标准加密算法,此为默认算法。如果加盐(-salt)算密码,只取盐的前2位,2位后面的所有字符都忽略。
-1(数字):基于MD5的算法代号。
-apr1(数字):apache中使用的备选md5算法代号,不能和"-1"选项一起使用,因为apr1本身就默认了md5。htpasswd工具生成的身份验证密码就是此方法。
-salt:加密时加点盐,可以增加算法的复杂度。但加了盐会有副作用:盐相同,密码也相同,则加密的结果将一样。
-in file:从文件中读取要计算的密码列表。
-stdin:从标准输入中获取要输入的密码。
-quiet:生成密码过程中不输出任何信息。
(摘自(6) openssl passwd(生成加密的密码)
测试结果:
在这里插入图片描述
由上可知:不加盐值,同一加密算法,同一密码加密结果不同。加盐值,则加密结果一致(三种算法是如此,其中默认算法盐值至少要两位)。如参考文章所述,默认算法加盐值,值取盐值前两位,即盐值 123与124结果相同。
MD5/apr1算法加盐,结果:$id$盐值$加密后字符串;id为1,md5算法;为arp1;arp1算法。
linux密码加密盐值为固定长度可见的随机字符串,若能读取/etc/shadow文件可爆破密码。详细见文章
linux 用户密码加密分析
三、写入/etc/passwd文件

echo 'hack:zSZ7Whrr8hgwY:0:0::/root/:/etc/bash' >>/etc/passwd

在这里插入图片描述
添加了root权限用户hack。(若忘记root密码,用写权限的用户把x去掉重启,就能重置root密码)
由于是直接修改/etc/passwd文件,/etc/shadow文件不会同步加入hack用户,从而不能使用hack用户登录ssh(原因不明),若有/etc/shadow写权限,可做相应修改。
前:
在这里插入图片描述
后:
在这里插入图片描述(注:本人菜鸡,个人见解,如有错误,欢迎评论指出)
参考文章:
Linux /etc/passwd内容解释(超详细)
(6) openssl passwd(生成加密的密码)
linux 用户密码加密分析

Logo

更多推荐