Docker逃逸之由内核漏洞引起的逃逸(CVE-2016-5195)
内容提要
Docker逃逸的原因有三种:dirty cow实现逃逸、软件程序引起的docker逃逸漏洞、docker配置不当引起的特权模式逃逸。漏洞CVE-2016-5195可实现提权。通过nmap扫描靶机IP和开放端口,利用msf内置exp进行利用。使用searchsploit工具找到提权脚本,将文件上传到靶机并执行。登录靶机,利用ssh远程登录,开启一个终端。漏洞分析:docker安全,Docker逃逸。
延伸解读
漏洞影响范围与利用前提
CVE-2016-5195影响Linux kernel 2.6.22及以上全版本,利用竞争条件在COW操作中提权。攻击者需在目标系统上执行代码,通常通过Web漏洞获取初始低权限shell,再上传并编译提权脚本。该漏洞不依赖Docker配置,但容器共享内核,因此容器内低权限用户可利用它逃逸至宿主机root。
信息收集与初始入侵路径
文章演示了从信息收集到初始入侵的完整链条:先用nmap扫描存活主机和开放端口,确认靶机运行Drupal 7,然后使用Metasploit的drupal_drupalgeddon2模块获取低权限shell。这提醒防御者,Web应用漏洞是攻击者进入内网并进一步利用内核漏洞的常见入口,及时修补CMS漏洞至关重要。
提权脚本的获取与编译要点
攻击者通过searchsploit定位脏牛提权脚本40847.cpp,将其复制到本地HTTP目录,再让靶机wget下载。编译命令包含多个选项:-Wall和-pedantic启用警告,-O2优化,-std=c++11指定标准,-pthread链接线程库,-o指定输出文件名。这些选项确保脚本正确编译并利用多线程竞争条件。
交互式shell在提权中的必要性
获取root密码后,需通过SSH登录或切换用户。但直接切root可能失败,因为需要交互式终端输入密码。文章使用python -c 'import pty; pty.spawn("/bin/bash")'开启交互式shell,使命令能正常回显并响应密码提示。这强调了在渗透测试中,交互式环境对于执行需要输入的命令至关重要。
Q&A
Docker逃逸主要有哪几种原因?
Docker逃逸的原因可分为三种:由内核漏洞引起的dirty cow逃逸(如CVE-2016-5195)、软件程序引起的docker逃逸漏洞(如CVE-2019-5736)、docker配置不当引起的特权模式逃逸或docker remote api未授权访问导致逃逸等。
CVE-2016-5195漏洞的原理是什么?影响哪些Linux版本?
CVE-2016-5195(Dirty COW)是Linux内核在处理写入时复制(COW)时产生的竞争条件漏洞,恶意用户可利用此漏洞获取高权限,对只读内存映射进行访问,甚至获取root权限。该漏洞影响全版本Linux系统(Linux kernel >= 2.6.22)。
利用CVE-2016-5195进行Docker逃逸时,信息收集阶段需要做什么?
信息收集阶段需使用nmap扫描存活主机以确认靶机IP(可通过MAC地址准确确认),然后扫描靶机开放端口和服务(如nmap -sV -p- 靶机IP),确认开放端口(如22、80、1898)及服务、CMS类型(如Drupal 7)。
如何利用msf和searchsploit进行Dirty COW提权?
使用msf内置exp(如exploit/unix/webapp/drupal_drupalgeddon2)获取低权限shell;然后用searchsploit查找dirty cow提权脚本(如40847.cpp),将其复制到本地目录,通过python -m http.server起http服务,在靶机用wget下载并编译(g++ -Wall -pedantic -O2 -std=c++11 -pthread -o 40847 40847.cpp -lutil),执行后得到root密码。
为什么在Dirty COW提权后需要开启交互式shell?如何开启?
因为某些命令执行后需要交互式输入(如询问yes/no或输入密码),非交互式shell会导致命令卡住无法回显。开启方法:在目标主机上执行python -c 'import pty; pty.spawn("/bin/bash")',即可获得交互式shell。
通过Dirty COW漏洞获取root密码后,如何远程登录靶机?
获取root密码(如dirtyCowFun)后,由于靶机22端口开放,可使用ssh远程登录:ssh root@靶机IP,输入密码即可登录。