Ataques a aplicaciones que se conectan a servicios
Las aplicaciones que están conectadas a servicios a menudo incluyen cadenas de conexión que pueden filtrarse si no están suficientemente protegidas. En los siguientes párrafos, repasaremos el proceso de enumeración y explotación de aplicaciones que están conectadas a otros servicios para ampliar su funcionalidad. Esto puede ayudarnos a recopilar información y a movernos lateralmente o escalar nuestros privilegios durante las pruebas de penetración.
Examen de ejecutable ELF
El binario octopus_checker se encuentra en una máquina remota durante la prueba. Al ejecutar la aplicación localmente, se revela que se conecta a instancias de bases de datos para verificar que estén disponibles.
afsh4ck@kali$ ./octopus_checker
Program had started..
Attempting Connection
Connecting ...
The driver reported the following diagnostics whilst running SQLDriverConnect
01000:1:0:[unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found
connected
El binario probablemente se conecta usando una cadena de conexión SQL que contiene credenciales. Usando herramientas como PEDA (Python Exploit Development Assistance for GDB) podemos examinar más a fondo el archivo. Esta es una extensión del depurador GNU estándar (GDB), que se usa para depurar programas C y C++. GDB es una herramienta de línea de comandos que le permite recorrer el código, establecer puntos de interrupción y examinar y cambiar variables. Al ejecutar el siguiente comando podemos ejecutar el binario a través de él.
afsh4ck@kali$ gdb ./octopus_checker
GNU gdb (Debian 9.2-1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./octopus_checker...
(No debugging symbols found in ./octopus_checker)
Una vez cargado el binario, establecemos el estilo de visualización del código disassembly-flavor y procedemos a desensamblar la función principal del programa.
Esto revela varias instrucciones de llamada que apuntan a direcciones que contienen cadenas. Parecen ser secciones de una cadena de conexión SQL, pero las secciones no están en orden y el orden de bytes implica que el texto de la cadena está invertido. El orden de bytes define el orden en que se leen los bytes en diferentes arquitecturas. Más abajo en la función, vemos una llamada a SQLDriverConnect.
Al agregar un breakpoint en esta dirección y ejecutar el programa una vez más, se revela una cadena de conexión SQL en la dirección del registro RDX, que contiene las credenciales para una instancia de base de datos local.
gdb-peda$ b *0x5555555551b0
Breakpoint 1 at 0x5555555551b0
gdb-peda$ run
Starting program: /htb/rollout/octopus_checker
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program had started..
Attempting Connection
[----------------------------------registers-----------------------------------]
RAX: 0x55555556c4f0 --> 0x4b5a ('ZK')
RBX: 0x0
RCX: 0xfffffffd
RDX: 0x7fffffffda70 ("DRIVER={ODBC Driver 17 for SQL Server};SERVER=localhost, 1401;UID=username;PWD=password;")
RSI: 0x0
RDI: 0x55555556c4f0 --> 0x4b5a ('ZK')
<SNIP>
Además de intentar conectarse al servicio MS SQL, los evaluadores de penetración también pueden verificar si la contraseña puede ser reutilizada por usuarios de la misma red.
Examen de archivos DLL
Un archivo DLL (Dynamically Linked Library) es un código que se ejecuta desde otros programas. El binario MultimasterAPI.dll se encuentra en una máquina remota durante el proceso de enumeración. El análisis del archivo revela que se trata de un ensamblado .Net.
Mediante el depurador y editor de ensamblados .NET dnSpy , podemos ver el código fuente directamente. Esta herramienta permite leer, editar y depurar el código fuente de un ensamblado .NET (C# y Visual Basic). La inspección de MultimasterAPI.Controllers-> ColleagueController revela una cadena de conexión a la base de datos que contiene la contraseña.
Además de intentar conectarse al servicio MS SQL, también se pueden utilizar ataques como el Password Spraying para probar la seguridad de otros servicios.
Caso práctico
Objetivo: 10.129.205.20
SSH a 10.129.205.20 (ACADEMY-ACA-ROLLOUT)
Usuario "htb-student"
Contraseña "HTB_@cademy_stdnt!"
¿Qué credenciales se encontraron para la instancia de base de datos local al depurar el binario octopus_checker?
Nos conectamos por ssh y encontramos el binario ELF a analizar:
htb-student@htb:~$ ls
octopus_checker
Al ejecutarlo vemos que intenta conectarse a un SQL Server:
htb-student@htb:~$ ./octopus_checker
Program had started..
Attempting Connection
Connecting ...
The driver reported the following diagnostics whilst running SQLDriverConnect
01000:1:5701:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'master'.
01000:2:5703:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed language setting to us_english.
connected
El binario probablemente se conecta usando una cadena de conexión SQL que contiene credenciales.
Vamos a analizarlo con gba:
htb-student@htb:~$ gdb ./octopus_checker
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./octopus_checker...
(No debugging symbols found in ./octopus_checker)
gdb-peda$