一、docker和docker-compose安装(用的kali虚拟机)
二,vulhub漏洞复现及其原理
1.tomcat
1. PUT文件上传漏洞
原理:
- 当Tomcat的配置文件(如
conf/web.xml
)中的readonly
属性被设置为false
时,Tomcat服务器将允许HTTP PUT请求上传文件到服务器上。 - 默认情况下,Tomcat可能限制上传文件的后缀名(如
.jsp
),以防止恶意代码的执行。然而,攻击者可以通过多种绕过方法(如利用文件名解析漏洞、特殊字符编码等)来上传包含恶意代码的JSP文件(webshell)。 - 一旦恶意文件被上传并成功执行,攻击者就可以控制服务器,执行任意代码,访问或修改服务器上的数据。
影响:
- 可将任意文件写入服务器,包括恶意代码文件。
- 攻击者可上传webshell,进一步控制服务器,执行任意命令,窃取数据或进行其他恶意活动。
2. AJP文件包含漏洞(如Ghostcat漏洞)
原理:
- Apache Tomcat的AJP(Apache JServ Protocol)服务默认开启在8009端口,用于Tomcat与其他基于Java的web服务器或应用服务器之间的通信。
- AJP协议设计上存在缺陷,攻击者可以通过构造恶意的AJP请求包,利用文件包含漏洞读取或包含Tomcat上所有webapp目录下的任意文件。
- 这些文件可能包括webapp的配置文件、源代码等敏感信息。
影响:
- 攻击者可以读取或包含Tomcat服务器上的任意文件,获取敏感信息。
- 漏洞影响范围广泛,几乎涉及所有版本的Tomcat(特别是旧版本)。
2.weblogic
1. 远程代码执行(RCE)
远程代码执行是WebLogic漏洞中最为严重的一类,它允许攻击者未经授权地在服务器上执行任意代码。这类漏洞通常通过WebLogic的T3/IIOP协议、JNDI注入等方式实现。例如,CVE-2023-21839漏洞允许未经身份验证的远程攻击者通过T3/IIOP协议网络访问并破坏易受攻击的WebLogic服务器,成功利用此漏洞可能导致Oracle WebLogic服务器被接管或敏感信息泄露。
远程代码执行的原理大致如下:
- 攻击者利用WebLogic的T3/IIOP协议支持远程绑定对象到服务端。
- 当远程对象继承自特定类(如OpaqueReference)时,服务端在调用远程对象的特定方法(如getReferent)时,会执行攻击者控制的代码。
- 攻击者通过构造恶意的远程对象,并在其getReferent方法中嵌入恶意代码,当服务端调用此方法时,即可触发远程代码执行。
2. 认证绕过
认证绕过漏洞允许攻击者绕过WebLogic的身份验证机制,直接访问受保护的资源。这类漏洞通常由于WebLogic的安全配置不当、默认账户密码未更改或存在已知的安全漏洞等原因造成。
3. 信息泄露
信息泄露漏洞允许攻击者获取WebLogic服务器上的敏感信息,如配置文件、数据库连接信息等。这类漏洞可能由于WebLogic的日志记录不当、错误处理机制不完善或未对敏感信息进行加密等原因造成。
4. 拒绝服务(DoS)
拒绝服务漏洞允许攻击者通过发送大量恶意请求或占用大量系统资源,导致WebLogic服务器无法响应正常请求。这类漏洞可能由于WebLogic的并发处理能力不足、资源分配策略不当或存在已知的安全漏洞等原因造成。
3.apache换行解析漏洞
-
正则表达式匹配问题:
Apache HTTPD在修复早期版本中的后缀名解析漏洞时,采用了正则表达式来匹配文件后缀。然而,这个正则表达式在处理包含换行符(\x0A
)的文件名时存在问题。在特定配置下,如SetHandler application/x-httpd-php
,Apache会将包含.php
后缀(后跟换行符)的文件视为PHP文件进行处理。 -
文件名构造:
攻击者可以利用这个特性,通过构造形如xxx.php\x0A
的文件名(其中\x0A
代表换行符),并上传至服务器。尽管从表面上看,这个文件名似乎不符合PHP文件的常规命名规则,但由于Apache在处理时会忽略换行符,因此这个文件仍然会被当作PHP文件来解析和执行。 -
绕过安全策略:
这种解析方式允许攻击者绕过一些基于文件扩展名进行安全过滤的策略。例如,如果服务器配置为只允许上传图片文件(如jpg、png等),攻击者可以通过将webshell(一种恶意脚本)的后缀名改为xxx.php.jpg
并上传,然后利用换行符特性来绕过这一限制,最终使webshell被执行。
4. apache druid RCE
以CVE-2021-25646为例,该漏洞允许攻击者通过发送包含恶意JavaScript代码的JSON请求来执行任意代码。这是因为Apache Druid在处理用户提供的JavaScript代码时,没有足够的安全措施来防止恶意代码的执行。攻击者可以构造一个包含恶意JavaScript函数的JSON请求,并通过Druid的API接口发送这个请求。当Druid服务器处理这个请求时,会执行其中的JavaScript代码,从而允许攻击者执行任意命令或访问敏感数据。
三、总结RCE漏洞的原理和利用条件及解决方案
一、RCE漏洞的原理
远程代码执行(Remote Code Execution,RCE)漏洞是一类允许攻击者在远程服务器上执行任意代码的安全漏洞。这类漏洞通常发生在应用程序处理用户输入时没有进行适当的验证和过滤,导致攻击者可以注入恶意代码并在服务器上执行。RCE漏洞允许攻击者完全控制受影响的系统,执行未授权的命令,包括安装恶意软件、窃取数据、破坏系统完整性等。
具体来说,RCE漏洞的原理可能包括以下几个方面:
- 输入验证不足:应用程序未对用户的输入数据进行充分的验证和过滤,使得攻击者能够注入恶意代码。
- 代码执行函数滥用:应用程序中使用了能够执行系统命令或代码的函数(如PHP中的
eval()
,system()
,shell_exec()
等),且这些函数的参数未受到严格控制。 - 第三方组件漏洞:应用程序调用的第三方组件存在代码执行漏洞,攻击者可以通过这些漏洞间接执行恶意代码。
二、RCE漏洞的利用条件
RCE漏洞的利用通常需要满足以下条件:
- 存在可执行的代码执行函数:应用程序中必须存在能够执行系统命令或代码的函数,且这些函数的参数可控。
- 参数过滤不严:应用程序对函数参数的过滤不足,使得攻击者能够注入恶意代码。
- 攻击者能够发送恶意请求:攻击者必须能够向应用程序发送包含恶意代码的请求,这通常要求攻击者具有网络访问权限。
三、RCE漏洞的解决方案
为了防范RCE漏洞,可以采取以下解决方案:
- 加强输入验证:对所有用户输入进行严格的验证和过滤,确保输入数据的合法性和安全性。使用白名单验证法,只接受预期内的输入格式和类型。
- 避免使用危险函数:尽量避免在应用程序中使用能够执行系统命令或代码的函数。如果必须使用,应对其参数进行严格的过滤和验证。
- 升级和打补丁:及时关注并应用第三方组件和应用程序的安全更新和补丁,以修复已知的安全漏洞。
- 实施最小权限原则:限制应用程序的权限,使其只能执行必要的操作。这可以减少攻击者利用漏洞执行恶意代码的能力。
- 代码审计和安全测试:定期进行代码审计和安全测试,以发现潜在的安全漏洞并及时修复。
- 使用安全编程实践:遵循安全编程最佳实践,如使用安全的编程语言特性、避免硬编码敏感信息等。
- 部署安全设备:在应用程序和网络边界部署防火墙、入侵检测系统等安全设备,以监控和阻止恶意流量。