从一次未授权的访问到获取系统shell的过程
2021-12-06 14:32:51 Author: www.freebuf.com(查看原文) 阅读量:18 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

本文记录了从一次未授权的访问到获取系统shell的渗透测试过程,文中主要阐述了攻击方法、漏洞成因以及防御思路。在进行攻防过程阶段,最重要的工作莫过于信息收集,本文不想记录对信息收集中的数据反复甄别的过程,而是想对一次重大的发现进行过程记录,通过对收集的数据进行反复的筛选发现了2375端口,相信很多在做云原生或者做容器化部署的朋友,应该对这个端口不陌生,没错这个就是docker swarm。从官方的文档可以看出swarm是用来管理docker集群的,本次获取shell权限的过程就与此有着莫大的关系。

  • 起因

有一位运维同学在部署docker swarm的时候,在管理的docker 节点上会开放一个TCP端口2375,绑定在0.0.0.0上,相信很多有经验的运维大牛应该知道swarm是用来管理docker集群的,应该放在内网才对。但是不知道出于什么原因,他是在公网上的几台机器上安装swarm的,并且2375端口的访问策略是开放的,所以可以直接访问,那么这就造成了可以远程执行docker命令。

  • 漏洞利用过程

当发现2375端口是开放的,所以肯定要访问一下该服务,发现是可以直接访问。1638767525_61ad9ba500fb8fda54153.png!small

现在可以确定存在一个未授权的访问漏洞,难道渗透测试就此结束了嘛!恐怕也才是开始,既然这个端口可以远程执行docker指令所以肯定要好好利用一番,首先要看一下所有镜像。

1638767577_61ad9bd9e688a2fd2d4ab.png!small

已经获取到了镜像ID,这个在后续的过程中会有利用的,所以先记录一下,接着查看一下容器内部。

1638767620_61ad9c0443b5f8697d00a.png!small

又是简单的收集了一波信息,现在要做的就是要获得宿主机的权限了,毕竟现在一直在容器里。首先要做的就是启动一个容器,挂载宿主机的var/spool/cron/目录,之后将反弹shell的脚本写入到/var/spool/cron/root中做一个执行计划,攻击机nc -vv -l -p Port进行监听,这个时候会得到一个反弹的shell。

1638767678_61ad9c3ed7dd56c7158d2.png!small

通过执行命令,我们获得了宿主机的反弹shell。现在你会发现docker逃逸成功了,拿下了该服务器。

1638767706_61ad9c5a290a571f8eebc.png!small

就这样,我们不仅拿下了服务器,甚至还是获得了root权限,总体来说还是获得了不错的成果。从一次未受权的访问漏洞到获取的系统shell,是对一个漏洞的深入挖掘,达到攻击的目的,其实后果造成的危害还是很大的,但其实修复这个漏洞是比较容易的。企业在信息安全建设中,如果只是修复漏洞,那会变得疲于奔命,所以对这种问题还是要构建完整的防御体系,从未授权的访问到获取到系统root权限,需要经过很长的攻击链,如果能及时的阻断攻击链,也是对漏洞攻击面的缩小。

  • 防御思路

1.简单的方法就是对2375端口做网络访问控制,如ACL控制,或者访问规则等;

2.修改docker swarm的认证方式,使用TLS认证,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行。

  • 写在最后

在企业安全体系的建设过程中,是离不开渗透测试或者说安全攻防的,安全的生命周期链路比较长,从安全需求再到安全的持续运营阶段,其实渗透测试已经在安全生命周期的末端了,发现漏洞的情况已经是产品的末期。其实还是要在产品的初期,引入安全自动化平台对产品的安全质量进行阈门控制。并且建设整体的安全架构,及时的阻断攻击链,把漏洞对环境的影响面降到最低。


文章来源: https://www.freebuf.com/articles/es/307402.html
如有侵权请联系:admin#unsafe.sh