前端开发

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

2021-01-07 20:36:02 阅读数 2684 收藏 0

0x00简介

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

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-master/struts2/s2-061

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

5.在浏览器访问目标地址http://your-ip:8080

0x04漏洞复现

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

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

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

3.方法二,在首页使用burp抓包发送到重放模块,并修改成POST传输

Payload:

4. 反弹shell,反弹命令需要使用base64编码

编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html

5.方法三,使用脚本快捷执行命令

小结

1. 本次漏洞复现需要使用docker环境搭建,需要会使用基本docker命令

2. 需要使用burp抓包改包,需要会使用基本的burp的方法

3. 需要使用到linux命令,需要了解linux命令用法和命令含义

4.使用python脚本进行验证,需要安装python3环境

0x05修复建议

1.建议升级至最新版本

参考链接:https://www.freebuf.com/vuls/257626.html