> 文章列表 > Linux 提权学习

Linux 提权学习

Linux 提权学习

提权的目的是获取 root 权限

root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展

暴力破解

suid 提权

内核漏洞提权

定时任务提权

sudo 提权

第三方服务提权(docker、mysql、redis、NFS提权)

暴力破解

爆破 root 用户的密码

有一个工具,sucrack

——————

suid 提权

suid(Set owner User ID up on execution)

suid是可执行文件的一个属性(我理解为是一个特殊权限)

通过这个,其他组用户在执行一个程序时可以有该程序所有者/组 的权限

如果此程序所有者是root权限,那其他用户也能有root权限

条件:程序所有者是 0 号或其他 super user ,同时有suid 权限

程序只要有suid权限,就可以提权,这个说法其实是不准确的。只有这个程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。

正常权限比如为 rwx ,可读可写可执行

而有的却是 rws ,这个 s 就是 suid

比如,nmap是需要 root 权限才能运行, 给nmap加上suid权限,这样普通用户就可以随便运行nmap了。

常见用来提权的 Linux 可执行文件:

nmap、vim 、find、bash、more、less、nano、cp

查看可以 suid 提权的可执行文件

find / -perm -u=s -type f 2>/dev/null

find / -user root -perm -4000-print2>/dev/null

find / -user root -perm -4000-exec ls -ldb {} \\;

可以看到有 nmap 之类的

在看看 nmap 的权限

-rwsr-xr-x 1 root root 780676 2008-04-08 10:04 /usr/bin/nmap

有一个 s 权限,即可以进行 suid 提权

旧版本的 Nmap(2.02 到 5.21)具有交互模式,允许用户执行 shell 命令。

即使用 nmap 的 --interactive 交互模式

nmap --interactive

进入 nmap 交互模式之后,输入 !sh 就可以进行执行命令了,并且是 root 权限

find 提权

后面跟的 abc 是一个存在的文件夹或文件

find abc -exec whoami \\;

————————

内核漏洞提权

先查看Linux 内核版本

uname -a

比如我这里是 5.13.0

1、寻找内核版本存在的漏洞

可以用 kali 自带的 searchsploit ,看看有没有符合的漏洞。

searchsploit Ubuntu 5.13.0

2、下载payload并编译

如果有符合的漏洞,后面有 payload 文件名,使用 -m 命令下载下来(一般应该是 .c 文件, 还需要编译)

searchsploit -m 41760.txt

下载好会有路径

文本打开这个文件会有编译命令,编译之后得到可执行文件,执行即可。

3、执行编译后的可执行文件

然后大概会得到一个用户,su 用户名 登录,就有 root 权限了

除了kali 的 searchsploit ,还可以利用  linux-exploit-suggester、linux-exploit-suggester-2等工具

——————

计划任务提权

定时任务(cron job)

通过配置crontab可以让系统周期性地执行某些命令或者脚本

User Crontabs 通常位于 /var/spool/cron/or/var/spool/cron/crontabs/(非 root 用户无法查看 root 用户的计划任务)

system 系统的 crontab 位于/etc/crontab (普通用户可查看)

cron通常以root特权运行,如果可以修改其调度的任何脚本或二进制文件,那就可以使用root权限执行任意代码。

普通用户可以列出系统的计划任务:

cat /etc/crontab

我们先创建一个可执行文件以便测试,然后在 /etc/crontab 文件中添加这个文件,让此文件能够计划性周期性执行。

而在实际情况中,cat /etc/crontab 就是要看看里面存不存在可执行文件,并且有普通用户可更改的权限。

创建测试文件

为了方便,也先赋权,防止后面没有执行权限

touch test.sh

chmod 777 test.sh

文件中写入内容:

#!/bin/bash

cp /bin/bash /tmp/shell

chmod +s /tmp/shell

此内容的功能:

cp /bin/bash /tmp/shell 是把 bash 复制到 /tmp 文件夹下,命名为 shell 文件

chmod +s /tmp/shell 给其赋予 suid 权限,即让普通用户也能执行此 /shell 文件

在 /etc/crontab 加上创建的文件的计划任务(编辑此文件需要 root 权限)

*  *    * * *   root    /home/doodric/test.sh

然后计划任务成功执行,即 /home/doodric/test.sh 执行之后

/tmp 下就得到了这个 shell 文件,是通过 /bin/bash 复制过来的

直接输入 /tmp/shell 

相当于成功把 bash 文件给复制移动了(是 root 权限才能做到的)

总之,就是在 计划任务中看看有没有可写的可执行文件,普通用户对此计划任务文件修改内容,达到以 root 权限执行命令

——————

sudo 提权

运用sudo可以使普通用户使用root用户的命令,只需要输入普通用户的密码。

比如通过 sudo 命令执行 su 切换用户命令,只需要输入普通用户 msfadmin 的密码,不需要 root 用户的密码

但是通过对配置文件 /etc/sudoers 进行修改,把用户

vim  /etc/sudoers

我这里文件内是空白的,添加一行内容:

msfadmin ALL=(ALL:ALL) NOPASSWD:ALL

(msfadmin 是我们的普通用户,添加之后让 sudo 命令免密码使用)

然后再执行 sudo su

发现不用输入普通用户的密码就能进入管理员用户了。