在本文中,咱们将学习“修改/etc/passwd文件以建立或更改用户的root权限的各类方法”。有时,一旦目标被攻击,就必须知道如何在/etc/passwd文件中编辑本身的用户以进行权限升级,其中咱们将此技巧应用于权限提高。打开下面给出的连接:php
连接1:Hack the Box Challenge: Apocalyst Walkthroughpython
连接2:Hack the Hackday Albania VM (CTF Challenge)算法
首先,在进行提权以前,咱们应该深刻了解/etc/passwd文件。在etc目录中,咱们将获得三个最重要的文件,即passwd、group和shadow。shell
etc/passwd:它是一个可读的文本文件,存储用户账户的信息bash
etc/group:也是一个可读的文本文件,它存储组信息以及用户所属的组,能够经过该文件识别。学习
etc/shadow:它是一个包含加密密码的文件,任何用户的用户信息都将过时。ui
/passwd: 文件中的详细信息格式加密
详细说明spa
Username:第一个字段表示用于登陆用户的名称3d
Encrypted password:x表示加密密码,实际存储在/shadow文件中。若是用户没有密码,则密码字段将用*(星号)表示
User Id (UID):必须为每一个用户分配一个用户ID(UID)。Uid 0(零)为root用户保留,UID 1-99为进一步的预约义账户保留,UID 100-999为管理目的由系统保留。UID 1000几乎是第一个非系统用户,一般是管理员。若是咱们在Ubuntu系统上建立一个新用户,它将被赋予UID 1001
Group Id (GID):表示每一个用户的组;与UID同样,前100个GID一般保留以供系统使用。GID为0与root组相关,GID为1000一般表示用户。新组一般分配GID从1000开始
Gecos Field:一般,这是一组以逗号分隔的值,用于说明与用户相关的更多详细信息。GECOS字段的格式表示如下信息:
用户全名
地址和门牌号码或联系人
办公电话号码
家庭电话号码
任何其余联系信息
Home Directory:表示用户主目录的路径,其中存储用户的全部文件和程序。若是没有指定的目录,则/将成为用户的目录
Shell:它表示(由用户)执行命令并显示结果的默认shell的完整路径
注意:每一个字段用(冒号)分隔
让咱们首先经过cat命令打开/etc/passwd文件,以查看系统中当前可用的用户
从上面给出的截图中,您能够看到“raj”是最后一个使用uid 1000的用户。这里gid 1000表示它是非系统用户。
当咱们使用adduser命令添加任何用户时,让咱们看看/passwd文件中实际发生了什么。所以,在这里您能够清楚地看到下面给出的信息以及截图。
adduser user1
Username: user1
GID: 1002
UID: 1001
Enter password: 任意密码
Home Directory: /home/user1
Gecos Filed:full Name(全名), Room Number(门牌号), Work phone(工做电话), Home Phone(家庭电话), Other
当您打开/passwd文件时,您会注意到上述全部信息都存储在/etc/passwd文件中
通常来讲,普通用户对passwd文件具备只读权限,但有时用户也可能具备读/写权限,在这种状况下,咱们能够借助上述理论将本身的用户添加到/etc/passwd文件中。
user2:*:1002:1003:,,,:/home/user2:/bin/bash
*(星号)符号表示对于user2空口令。
由于咱们已经为user2分配了GID 1003 ,因此咱们也须要在/etc/group文件中对其进行处理
请遵循如下格式:
语法:username:x:gid
由于咱们没有密码,因此在x处使用*符号
user2:*:1003:
如今,使用passwd命令为user2设置密码并输入密码。
passwd user2
因为咱们在不使用adduser命令的状况下手动建立了一个新用户user2,所以在/etc/shadow文件中找不到任何有关信息。可是它在/etc/passwd文件中,此处*符号已被加密密码值替换。经过这种方式,咱们能够建立本身的用户以进行权限提高。
有时没法执行passwd命令来设置用户的密码; 在这种状况下,咱们可使用OpenSSL命令,它将使用salt生成加密密码。
OpenSSL passwd将使用salt字符串和基于MD5的BSD密码算法1计算指定密码的哈希值
语法:openssl passwd-1-salt[salt value]password
openssl passwd -1 -salt user3 pass123
咱们将得到加密的密码,而后在终端中输入vipw命令打开/passwd文件,并手动添加用户名。按照添加新用户user3的手动步骤,在*或X处粘贴加密值以获取密码。
在下图中,您能够看到,我已经分配了uid:0和gid:0以及主目录/root/root,所以咱们为用户user3赋予了root权限。
如今切换用户并经过user3访问终端并确认root访问权限。
YESSSSSS表示以root权限访问
注意:您还能够修改其余用户的密码,方法是将:x:替换为您本身加密的密码,而后使用您的密码登陆该用户账户
mkpasswd相似于openssl passwd,它将生成指定密码字符串的哈希值。
语法:mkpasswd -m [hash type] {password}
mkpasswd -m SHA-512 pass
它将为您的密码字符串生成哈希值,重复上述步骤或更改其余现有用户的密码。
若是您将比较user1的信息,那么您还能够注意到不一样。咱们已经替换了: X: 来自咱们的哈希值。
如今切换用户并经过user1访问终端并确认root访问权限
su user1
whoami
id
很好,成功以root权限访问
使用python,咱们能够导入crypt库,并将salt添加到咱们的密码中,这将建立包含salt值的加密密码。
python -c 'import crypt; print crypt.crypt("pass", "$6$salt")'
它将生成密码字符串的哈希值,重复上述步骤或更改其余现有用户的密码。若是您将比较user2的信息,那么您还能够注意到不一样。咱们已经重新的哈希值替换了旧的哈希值。
如今切换用户并经过user2访问终端并确认root访问权限。
su user2
whoami
id
pwd
sudo -l
它也能进行提权,之前它是/home/user2目录的成员,可是在成为/root目录的成员以后,您能够注意到它拥有root用户的全部特权
相似地,咱们可使用Perl和crypt来使用salt值为咱们的密码生成哈希值。
perl -le 'print crypt("pass123", "abc")'
您将得到加密的密码,而后在终端中键入vipw命令并手动添加用户名,再次打开/passwd文件。按照添加新用户user4的手动步骤,将加密值粘贴到*或X的位置以获取密码。
在下图中,您能够看到,我分配了uid:0和gid:0以及home directory/root/root,所以咱们为user4赋予了root权限
如今切换用户并经过user4访问终端并确认root访问权限。
su user4
whoami
id
很好,这种方法也能获取root权限。
一样,咱们可使用PHP和crypt来使用salt值为咱们的密码生成哈希值。
php - r "print(crypt('aarti','123') . \"\n\");"您将得到加密的密码,而后在终端中键入vipw命令打开/passwd文件,并手动添加用户名。按照添加新用户user5的手动步骤,并将加密值粘贴到密码字段中。
在下图中,您能够看到,我分配了uid:0和gid:0以及home directory/root/root,所以咱们为user5授予了root权限
如今切换用户并经过user5访问终端并确认root访问权限。
su user5
whoami
id
所以,有不少方法能够为您本身的用户添加root访问权限,这对于在任何主机中得到root权限很是有帮助。