RidgeBot™ Post-Explotación Basada en la Explotación de MSSQL (Segunda Parte)

por | May 13, 2020 | Consejos técnicos para la prueba de penetración

En la primera parte, presentamos herramientas «más sigilosas» basadas en Windows para detectar el servicio MSSQL: Detectar la instancia de MSSQL basada en el grupo de trabajo y detectar la instancia de MSSQL en un entorno de dominio de Windows. En este blog, vamos a compartir el Exploit de MSSQL, habilitamos el objetivo MSSQL xp_cmdshel y habilitamos el objetivo MSSQL sp_oacreate.

Habilitar el objetivo MSSQL xp_cmdshell

El procedimiento almacenado (SP) que comienza con XP en MSSQL es un procedimiento extendido. Por ejemplo: xp_dirtree, XP_REGREAD, xp_subdirs, etc. xp_cmdshell puede pasar comandos a cmd para ejecutarlos. Por razones de seguridad, esta característica no está abierta de manera predeterminada en MSSQL.

Por defecto, sólo el administrador del sistema o el administrador del servidor tiene permiso para ejecutar el comando RECONFIGURAR. Después de la versión 2008r2 de MSSQL, instalada globalmente, ya no es necesario el permiso de sysadmin o serveradmin, sino que requiere un bajo permiso de red para habilitar el procedimiento extendido.

Ejemplo:

Intente cargar de forma remota el script ps para extraer la contraseña de texto sin cifrar en el procedimiento de memoria lsass del host. Use la clase System.Text.Encoding para convertir el comando en una matriz de bytes Unicode y realice la codificación utf_16_le. Después de la decodificación, regrese al host de destino para ejecutar. Hicimos una prueba real, y se evadió del software antivirus.

Habilite el objetivo MSSQL sp_oacreate

Si el archivo dll correspondiente al componente xp_cmdshell en el sistema de destino es eliminado o monitoreado por un software antivirus y vuelve al código de error CreateProcess 5, aún podemos restaurar el procedimiento almacenado sp_oacreate para realizar la ejecución del comando sp_oacreate. La sintaxis de referencia es la siguiente:

Progid es el identificador de programación (ProgID) del objeto OLE que se creará. Esta cadena describe la clase del objeto OLE. Su formato es OLEComponent, el nombre del componente del servidor de automatización OLE. clsid es el identificador de clase (CLSID) del objeto. Esta cadena describe la clase del objeto OLE y su forma es la siguiente:

‘{Nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}’

Objeto es el nombre del objeto OLE. El objeto OLE especificado debe ser válido y debe admitir la interfaz IDispLatLch. OUTPUT es la etiqueta de objeto devuelta, que debe ser una variable local de tipo de datos int. Esta etiqueta de objeto identifica el objeto OLE creado y se usa para llamar a otros procedimientos almacenados automatizados OLE. Utilice los permisos de administrador del sistema para habilitar la configuración de los procedimientos de automatización OLE:

Ejemplo:

En este ejemplo, sp_oacreate crea el objeto OLE wscript.shell, que también puede ser otros objetos OLE. Si no se utilizan parámetros específicos, el valor NULL es necesario para pasar como marcador de posición cuando sp_oamethod llama al objeto OLE.

Al llamar a sp_oacreate, obtenemos un valor numérico de retorno 0 (éxito) o un número distinto de cero (falla), que es el valor de retorno del objeto de automatización OLE. Al mismo tiempo, los comandos no pueden hacer eco de esta manera. Por supuesto, es posible obtener la salida del comando correspondiente utilizando protocolos de transmisión como DNS y HTTP, pero este no es el propósito en este momento. Ahora que podemos manipular el objeto COM mediante el procedimiento almacenado de la base de datos sp_oacreate, enumeramos los objetos comúnmente utilizados en instancias OLE:

Scripting.FileSystemObject: Proporciona un conjunto de funciones de operación del sistema de archivos.

Scripting.Dictionary: Se utiliza para devolver un objeto de diccionario que almacena pares clave o de valor.

Wscript.Shell: Proporciona un conjunto de funciones para leer información del sistema, como leer y escribir el registro, encontrar la ruta del archivo especificado, leer las variables de entorno de DOS y leer la configuración en el enlace.

Wscript.NetWork: proporciona funciones para la conexión de red y la administración remota de impresoras. (Entre ellos, todos los objetos de secuencias de comandos se almacenan en el archivo SCRRUN.DLL y todos los objetos de Wscript se almacenan en el archivo WSHOM.ocx).

Los anteriores son dos ejemplos de Exploit de MSSQL. En un próximo blog compartiremos el método para implementar el comando y obtener el eco.