CVE-2019-7304 Ubuntu本地提权漏洞复现
程序员文章站
2022-03-24 08:37:28
...
本文首发于我的个人博客。
Snapd提供附加到本地UNIX_AF套接字的REST API。通过查询与该套接字的任何连接相关联的UID来完成对受限API函数的访问控制。在for循环中进行字符串解析期间,可能会影响用户控制的套接字对等数据以覆盖UID变量。这允许任何用户访问任何API函数。
影响版本
snap version < 2.37.1
- Ubuntu 18.10
- Ubuntu 18.04 LTS
- Ubuntu 16.04 LTS
- Ubuntu 14.04 LTS
实验环境
Ubuntu 16.04.07 LTS
实验过程
1. 确定snap版本
snap version
# snap版本应该小于2.37.1
Ubuntu自带的snap一般都不存在该漏洞,我在这里卡了很久,慕然回首,之间在POC的README.md文档中给出了可用的下载链接…
2. 下载POC
git clone https://github.com/initstring/dirty_sock.git
3. 生成**
登录Ubuntu,创建账号,然后本地生成一个**。
ssh-****** -t rsa -C "Ubuntu注册邮箱"
进入.ssh目录下,使用cat命令显示id_rsa.pub(公钥)内容,然后把这些内容拷到账户的ssh_key中。
4. 漏洞利用
首先开启ssh:sudo /etc/init.d/ssh start
。如果提示找不到命令,则是ssh还没有安装,输入sudo apt install openssh-server -y
以进行安装。安装完成后,再次启动。
进入poc文件夹,使用python3利用dirty_sockv1.py进行攻击,中间需要输入密码进行登录。
sudo python3 dirty_sockv1.py -u "Ubuntu注册邮箱" -k "/home/zxy/.ssh/id_rsa.pub"
运行完后,查看/home路径下,多了一个和刚才创建ubuntu账户用户名相同的文件夹。但是我没找到该用户的密码是什么。
然后继续使用dirty_sockv2.py进行攻击:sudo python3 dirty_sockv2.py
。
攻击成功,创建了一个用户名和密码均为dirty_sock的用户,我们可以验证该用户具有sudo权限。
利用完该脚本后,snap会自动升级,但是拥有sudo权限的dirty_sock用户却会一直存在并可用。