关于sudo
Linux是多用户多任务的操作系统, 共享该系统的用户往往不只一个。出于安全性考虑, 有必要通过useradd创建一些非root用户, 只让它们拥有不完全的权限; 如有必要再来提升权限执行。
sudo就是来解决这个需求的: 这些非root用户不需要知道root的密码,就可以提权到root,执行一些root才能执行的命令。执行命sudo -u <用户名> <令>, 将允许当前用户,提权到<用户名>的身份,再执行后面的<命令>, 即使<命令>原本需要root权限。提权到<用户名>身份时,是以<用户名>的身份来执行命令的,因此创建的文件默认属于<用户名>用户。
如果不带-u, 则默认使用root用户,而大多数时候sudo都是要提权到root的,所以-u <用户名>可以省略为:
sudo <命令>
需要注意的是: 执行sudo时输入的密码是当前用户的密码, 并非<用户名>的密码。
漏洞复现:
先以root身份登录并查看sudoers文件:
这里主要是要看到中间几段:
##Allow root to run any commands anywhere
root ALL=(ALL) ALL
wg ALL=(ALL) ALL
这一段表示我的系统中有两个超级权限用户,分别是root和wg
接下来用root权限在这个文件的这一段里加入一个新的用户
具体代码如下:
zhh043 ALL=(ALL,!root) /user/bin/id
这段代码的意思是zhh043这个用户无权以root身份使用id命令
试一下:
果然,在试图使用id命令时被提示无权以root身份执行它。
但是,在特殊情况下,这个漏洞被触发,使得zhh043绕过了root,直接使用了id命令:
因为sudo -u 允许使用UID来代替用户,当指定的UID是-1或者4294967695(-1的补码)时,漏洞被触发,绕过了root,直接执行了id命令。
这个漏洞的触发其实有比较严格的条件:
Sudo版本低于1.8.28
知道用户的密码(当前用户,不是root的密码)
用户处于sudo权限列表之中
存在 ALL 关键词的复合限制逻辑
综上,这个漏洞虽然功能强大,可以绕过root的权限,但是由于种种限制,这种漏洞对于外不来说没有什么利用的可能性,但是对于内部不怀好意的人却很难防备,因为这种访问时不会留下痕迹和记录的。