一、原理

sudo在linux用来临时使用其他用户拥有的命令。比如当前用户是test1(普通用户),vi命令拥有者是test2,test1是无法使用vi命令的,但是如果配置了test1可以通过sudo命令使用vi,则test1可以通过“sudo vi”来使用vi命令。要注意的是,使用的时候,实际执行vi命令的用户是test2,如果这时候在vi的命令模式下执行/bin/bash命令,则会打开一个以test2为用户的shell,如果test2刚好是root用户,则打开的就是一个root shell,从而实现提权。
参考:
sudo和suders文件

二、可以用来提权的命令

一般来说,只要是能sudo且可以在执行命令后可以再输入命令的命令,都可以用来提权。比较常见的有如下几个:
vi
more
less
git
nmap

三、提权过程

环境:DC-2靶机,基于Debian3.16,已经拥有一个可以用ssh连接的低权限账户jerry,要提升至root权限。

1.找到可以使用的命令

sudo -l 可以查看当前用户可以使用的sudo命令

centos7 sudo提权 linux提权命令sudo_linux


PS:本人修改了该系统sudo配置,使得DC-2只能通过sudo使用这四个命令,实际环境中不一定会这么明显显示可用命令,某些配置也是可以使用这几个命令的,如果对sudo机制不熟悉,可以直接使用sudo+命令 测试是否可用。

2.sudo vi提权

vi是linux中的一个文本编辑器,其在底线命令行模式下,可以执行命令打开一个shell

①输入命令

sudo vi test.txt

centos7 sudo提权 linux提权命令sudo_安全_02

②进入后即为底线命令模式,输入:!/bin/bash,即可打开一个用户为root的shell

centos7 sudo提权 linux提权命令sudo_centos7 sudo提权_03


3.sudo more和sudo less提权

more为按页读取文本,当一页未显示完时,可以执行命令打开一个shell

①输入命令(以sudo more演示,sudo less过程一样)

sudo more flag4.txt

注:flag4.txt是当前目录中的一个文件,如果没有这个文件,可以先创建一个,该文件的行数尽量多一点,保证终端中一页无法显示完

centos7 sudo提权 linux提权命令sudo_git_04


②输入!/bin/bash,即可打开一个用户为root的shell

centos7 sudo提权 linux提权命令sudo_安全_05


3.sudo git提权

sudo git提权与sudo vi类似,不过git使用的是帮助信息未显示完全可以输入命令打开shell

①输入命令

sudo git -p help   #不知道为什么要写成这样,只有这样写才可以

得到如图

centos7 sudo提权 linux提权命令sudo_运维_06


注意:一定要把终端窗口上下拉窄一些,使得回显信息一页无法显示完全

②输入!/bin/bash,即可打开一个用户为root的shell

centos7 sudo提权 linux提权命令sudo_linux_07


4.sudo nmap提权

echo "os.execute('/bin/bash')" > /tmp/shell.nse #将os.execute('/bin/bash')"写入文件shell.nse
sudo nmap --script=/tmp/shell.nse #使用sudo nmap执行脚本shell.nse

五、加固措施

sudo提权其实利用的是linux的一种权限机制,本身并不是系统存在的漏洞,主要还是配置上存在一些问题。

实际应用中,一般不存在单独配置more/less/vi为sudo命令,这三个命令很少会需要用root来执行,git也很少见,更多的情况是管理员直接配置所有普通用户都可以sudo使用root的所有命令或者是/bin、/usr/bin目录下的所有命令,这样也就可以sudo more/less/vi了。如下图

centos7 sudo提权 linux提权命令sudo_运维_08


若sudo -l查看可使用的sudo命令时,显示(ALL) ALL,表示该用户可以sudo使用所有root命令,自然也就包括more/less/vi了。

所以,加固措施是,在配置sudo的时候,排除掉more/less/vi/git等命令

jerry ALL =(root) ALL,!/bin/more,!/usr/bin/less,!/usr/bin/vi,/usr/bin/git

对于确实需要在root下使用的命令,建议切换至root使用。

参考链接
Linux sudo命令和sudoers文件