Linux 低用户到高用户提权思路

Linux 提权的方法有哪些

起因是我在打靶场的时候渗透到内网不知道应该怎么做,所有我打算总结一下内网渗透应该怎么做,以及低权限用户提权到高权限用户的渗透方向

在Linux系统中, 提权(Privilege Escalation) 是指从低权限用户(如普通用户)获取更高权限(如root权限)的过程。提权方法通常分为两类:水平提权(横向移动,获取同权限用户权限)和垂直提权(纵向提升,获取更高权限)。以下是常见的Linux提权方法及原理:


一、内核漏洞利用

利用Linux内核未修复的漏洞直接获取root权限,是最高效的提权方式。

  • 方法
    • 使用公开的内核漏洞EXP(如DirtyCowDirtyPipeCVE-2021-4034等)。
    • 通过工具扫描系统内核版本是否包含已知漏洞:
    uname -a                     # 查看内核版本
    searchsploit "Linux Kernel"  # 搜索漏洞库
  • 防御:定期更新系统补丁(apt update && apt upgrade)。

二、SUID/SGID滥用

利用具有SUID(Set User ID)或SGID(Set Group ID)权限的可执行文件,执行恶意代码继承高权限。

什么是SUID文件?

  • SUIDSet User ID 的缩写。
  • 它是一种 Linux/Unix 文件权限标志,作用是:

当普通用户执行这个文件时,程序 会以文件所有者的权限来运行,而不是以执行者的权限运行。

  • 例如
-rwsr-xr-x 1 root root 12345 Aug 25 2019 /usr/bin/passwd

这里的 s 就表示 SUID 位被设置。

/usr/bin/passwd 是 SUID 文件,允许普通用户修改自己的密码,但实际操作是以 root 权限执行的

为什么 SUID 文件可以提权

  • 普通用户执行 SUID 文件时,会临时 拥有文件所有者的权限
  • 如果这个 SUID 文件存在安全漏洞(例如可以执行 shell、覆盖文件、调用外部命令等),就可能让普通用户获得 root 权限
  • 举例:

  • 假设有一个 SUID 脚本 /usr/local/bin/vuln,属于 root:

-rwsr-xr-x 1 root root 1024 Aug 25 2019 /usr/local/bin/vuln
  • 如果这个脚本调用了某些 可控文件或环境变量,普通用户执行时可能能注入命令:
./vuln
  • 执行后,可能获得 root shell

  • 如何查看SUID文件的方法

    1. 查找系统中具有SUID权限的文件:
     find / -perm -4000 -type f 2>/dev/null
  1. 利用可写或可注入的SUID文件(如findvimbashcp等):
     # 示例:利用find命令提权
     find / -exec /bin/bash -p \; -quit
  • 防御:限制不必要的SUID权限(chmod -s [文件])。

例如我在 新手的第一次DC-1靶场渗透实战过程的提权部分,就是通过 SUID的方式查找到具有SUID权限二进制文件

DC8这里就是利用Exim的历史漏洞 使用searchploit提权的

DC9搜索到了一个python脚本 核心就是将一个文件的内容读取出来,并追加到另一个文件的末尾,我们可以利用这个来修改/etc/passwd文件新增一个root用户来拿到root权限


三、环境变量劫持(PATH Injection)

劫持程序依赖的环境变量(如PATHLD_PRELOAD),诱骗程序加载恶意库或脚本。

  • 方法
    1. 查找以高权限运行且依赖环境变量的程序:
     # 查看是否有程序使用相对路径调用命令(如调用"service"而非"/usr/sbin/service")
  1. 在用户可控的路径下创建恶意文件,并添加到PATH优先级更高的路径:
     echo 'echo "root:password123" | chpasswd' > /tmp/service
     chmod +x /tmp/service
     export PATH=/tmp:$PATH
  • 防御:使用绝对路径调用系统命令,避免依赖环境变量。

四、Sudo配置错误

利用/etc/sudoers文件的错误配置,允许低权限用户以root身份执行特定命令。

什么是 sudo -l

  • sudo “以其他用户身份执行命令” 的工具,默认是 root。
  • sudo -l 的作用是:

列出当前用户 哪些命令可以使用 sudo 执行,以及是否需要密码。

为什么可以通过 sudo -l 提权

权限信息暴露

  • sudo -l 告诉你哪些命令可以用 sudo 执行。
  • 如果某些命令允许你执行 任意文件或 shell,就可能利用它获得 root 权限。

利用可执行命令提权

  • 例如,如果 vimlesspython 在 sudo 权限列表里,你可以在里面执行 :!bashpython -c 'import os; os.system("/bin/bash")' 来获取 root shell。
  • 本质上就是 通过 sudo 授权的命令执行任意操作

无需密码或可绕过密码

  • 有些系统配置允许某些命令 无需输入密码就能 sudo,这大大降低了提权难度。

这里列举一下SUID和sudo -l 的不同点方便大家区分

特性 SUID 文件 sudo -l
权限来源 文件自身权限位设置了 SUID 系统 sudoers 配置文件允许用户以 root 执行命令
使用方式 执行 SUID 文件,程序以文件所有者身份运行 先用 sudo -l 查看可用命令,再执行可滥用命令获取 root
是否主动提权 执行 SUID 文件即可获得权限 sudo -l 本身不提权,只是告知可执行命令
可控性 必须利用 SUID 文件存在漏洞或可被利用点 利用 sudo 列出的可执行命令即可提权
文件类型 一般是二进制或脚本文件 可能是任何可执行命令(vim、python、bash 等)
  • 方法
    1. 查看当前用户可执行的sudo命令:
     sudo -l
  1. 利用可执行命令的逃逸功能(如vimpythontarfind等):
     # 示例:利用sudo权限执行vim提权
     sudo vim -c ':!/bin/bash'
  • 防御:严格限制sudoers文件权限,避免通配符滥用。

例如我在 新手的第一次DC-2靶场渗透实战过程就是使用的sudo -l 的方式,找打了git命令然后用git启动!/bin/bash 获得shell

新手的第一次DC-4靶场渗透实战过程这里我就是使用sudo -l 找到tee命令是以root身份用户执行的 通过修改/etc/passwd 文件 最后提权

还可以将具有sudo权限的脚本内容追加反弹shell的恶意脚本,然后执行这个文件,这样这个文件将会以root身份启动,然后反弹shell到我们的攻击机上


五、服务与进程漏洞

利用系统服务(如MySQL、Redis、Docker)或高权限进程的漏洞。

  • 方法
    • MySQL UDF提权:通过MySQL写入恶意共享库并执行系统命令。
    • Docker逃逸:利用容器配置错误挂载宿主机目录或启用特权模式。
    • Cron Jobs:劫持高权限定时任务执行的脚本或路径。
    # 检查定时任务文件权限
    ls -l /etc/cron* /var/spool/cron
    
    # 查看系统级计划任务配置文件
    /etc/crontab

例如在Ignite – TryHackMe这里,就是因为泄露了数据库的配置文件,然后进入数据库的配置文件找到了root的密码,然后登录的

六、密码与哈希破解

通过窃取或破解/etc/shadow中的密码哈希获取root权限。

  • 方法
    1. 读取/etc/shadow文件(需root权限):
     cat /etc/shadow
  1. 使用johnhashcat破解弱密码哈希。
  • 防御:使用强密码,限制/etc/shadow文件权限。

七、文件权限错误

利用全局可写的敏感文件(如/etc/passwd/etc/crontab)或日志文件。

  • 方法
    • 直接修改/etc/passwd添加新的root用户:
    # 生成密码"123456"的哈希,替换x字段
    openssl passwd -1 -salt abc 123456
    echo 'newroot:$1$abc$BtJ7D1HmEaU2qZQ07Az5Z0:0:0:root:/root:/bin/bash' >> /etc/passwd
  • 利用/etc/crontab写入定时任务反弹Shell。

例如在·DC7的靶场里DC-7靶场实战详解这里通过文件查看知道当前用户有一个用root 运行的/opt/scripts/backup.sh 文件

并且通过ls -l命令 了解到用户对这个文件有执行和写的权限这样子就可以劫持这个计划任务进行提权


八、共享库注入(LD_PRELOAD)

通过注入恶意共享库劫持高权限进程。

  • 方法
    1. 编写恶意共享库(如malicious.c):
     #include <stdio.h>
     #include <sys/types.h>
     #include <stdlib.h>
     void _init() {
         system("chmod +s /bin/bash");
     }
  1. 编译并注入:
     gcc -shared -fPIC -o malicious.so malicious.c -nostartfiles
     sudo LD_PRELOAD=./malicious.so [任意程序]

九、自动化工具

使用提权辅助工具快速扫描系统弱点:

  • LinPEAS:自动化检测SUID、Cron、Sudo配置等。
  • Linux Exploit Suggester:根据内核版本推荐EXP。
  • Metasploit:利用local_exploit_suggester模块。

总结

总的来说比较常用思路的就是 SUIDsudo -l和计划任务劫持这大类来展开

SUID

  • SUID文件看看当前有没有可以直接使用的命令 /bin/sh 来提权
  • 如果没可以看看SUID文件上有哪些历史漏洞,搜索漏洞库来进行提权
  • 或者如果知道SUID上面的文件有什么作用,可以利用这个文件的作用进行修改环境变量 添加用户的方式来进行提权

sudo -l

  • 跟SUID一样看看有没有什么命令是直接以root身份启动的然后使用/bin/bash 获得提权
  • 要么就是根据这个根据这个命令的作用 修改环境变量 添加用户的方式来进行提权
  • 如果可以修改这个sudo -l的命令 可以在这个命令添加恶意脚本 当下次执行这个命令的时候 执行恶意脚本然后反弹shell到攻击机上

计划任务劫持

  • 使用cat /etc/crontab 上看看有没有什么计划任务是以root身份启动的,如果当前用户对这个计划任务可控,可以添加恶意脚本到这个计划任务上面,当这个计划任务下次执行的时候就会执行恶意脚本然后反弹shell到攻击机上面
  • 可控点包括:
    • 脚本文件可写 → 可以直接修改,插入恶意命令。
    • 目录可写 → 可以删除原脚本,换成自己写的同名文件。
    • 可写 PATH 路径 → 任务里调用了不带绝对路径的命令(例如 tarcp),你可以在 PATH 里提前放一个恶意二进制。
posted @ 2025-08-06 14:49  0xMouise  阅读(60)  评论(2)    收藏  举报