{"id":305,"date":"2024-03-24T01:41:53","date_gmt":"2024-03-24T01:41:53","guid":{"rendered":"https:\/\/jsec-rt.com\/?p=305"},"modified":"2024-07-08T22:53:54","modified_gmt":"2024-07-09T02:53:54","slug":"rt-movimiento-lateral-a-traves-de-mssql-parte-1","status":"publish","type":"post","link":"https:\/\/jsec-rt.com\/index.php\/2024\/03\/24\/rt-movimiento-lateral-a-traves-de-mssql-parte-1\/","title":{"rendered":"RT &#8211; Movimiento lateral a trav\u00e9s de MSSQL &#8211; Parte 1"},"content":{"rendered":"\n<p>Es bastante com\u00fan llegar a identificar instancias MSSQL en entornos de Active Directory, debido a la f\u00e1cil integraci\u00f3n con LDAP y mecanismos de autenticaci\u00f3n respectivos, por lo que estas instancias desplegadas pueden brindar a un atacante distintas maneras de obtener informaci\u00f3n o alguna manera de comprometer servidores internos.<\/p>\n\n\n\n<p>En este post explicar\u00e9 algunas maneras de extraer informaci\u00f3n de bases de datos MSSQL y abusar de ciertas configuraciones para realizar movimiento lateral.<\/p>\n\n\n\n<p>Los escenarios que exploraremos ser\u00e1n los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Listado de directorios internos de un servidor a trav\u00e9s de MSSQL, identificando ficheros sensibles.<\/li>\n\n\n\n<li>Uso de funciones p\u00fablicas para forzar la autenticaci\u00f3n del servidor y de un usuario de dominio hacia el equipo del atacante para ataques de NTLM Relay.<\/li>\n\n\n\n<li>Ejecuci\u00f3n de c\u00f3digo remoto a trav\u00e9s de funciones propias de MSSQL.<\/li>\n<\/ul>\n\n\n\n<p>Para emular estos vectores de ataque, necesitaremos desplegar un par de bases de datos MSSQL sobre el dominio de prueba utilizado en posts anteriores.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalaci\u00f3n de MSSQL en servidores internos.<\/h2>\n\n\n\n<p>Para este laboratorio, es suficiente con instalar MSSQL Express, lo podemos hacer directamente desde la p\u00e1gina web oficial de Microsoft.<\/p>\n\n\n\n<p><a href=\"https:\/\/download.microsoft.com\/download\/5\/1\/4\/5145fe04-4d30-4b85-b0d1-39533663a2f1\/SQL2022-SSEI-Expr.exe\">https:\/\/download.microsoft.com\/download\/5\/1\/4\/5145fe04-4d30-4b85-b0d1-39533663a2f1\/SQL2022-SSEI-Expr.exe<\/a><\/p>\n\n\n\n<p>En este caso, utilizare un laboratorio distinto, que desplegu\u00e9 hace unos d\u00edas, utilizando un NUC como server.<\/p>\n\n\n\n<p>La nueva topolog\u00eda es la siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"734\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/jsec.drawio-2-1024x734.png\" alt=\"\" class=\"wp-image-380\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/jsec.drawio-2-1024x734.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/jsec.drawio-2-300x215.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/jsec.drawio-2-768x551.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/jsec.drawio-2.png 1131w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Para este ejercicio, desplegaremos dos instancias MSSQL en el dominio hijo <strong>internal.jsec.rt<\/strong> y el dominio padre <strong>jsec.rt<\/strong>, sin embargo, la configuraci\u00f3n de enlaces entre las dos bases de datos sera para un siguiente post.<\/p>\n\n\n\n<p>Los pasos se repiten para ambos equipos, al tratarse de un laboratorio.<\/p>\n\n\n\n<p>*Nota: Asegurarse que se tiene instalado <strong>.NET Framework 4.7.2<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"804\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1024x804.png\" alt=\"\" class=\"wp-image-321\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1024x804.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-300x235.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-768x603.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1536x1205.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image.png 1858w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Podemos escoger la opci\u00f3n <strong>Basic<\/strong> por temas de simplicidad.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"790\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1-1024x790.png\" alt=\"\" class=\"wp-image-322\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1-1024x790.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1-300x232.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1-768x593.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1-1536x1185.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-1.png 1858w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Aceptamos los t\u00e9rminos y condiciones.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"795\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-2-1024x795.png\" alt=\"\" class=\"wp-image-323\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-2-1024x795.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-2-300x233.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-2-768x596.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-2-1536x1193.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-2.png 1852w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Escogemos la ruta donde queremos instalar el software y luego click en <strong>Install<\/strong>.<\/p>\n\n\n\n<p>El instalador descargara los archivos necesarios y tendremos la base de datos disponible localmente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalando el gestor de base de datos.<\/h2>\n\n\n\n<p>Utilizaremos la herramienta recomendada por Microsoft para la gesti\u00f3n de la base de datos. Lo podemos descargar desde la pantalla del instalador, una ves que termine.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"778\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-5-1024x778.png\" alt=\"\" class=\"wp-image-326\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-5-1024x778.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-5-300x228.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-5-768x584.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-5-1536x1168.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-5.png 1860w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>La instalaci\u00f3n, similar al caso anterior, se la puede hacer por defecto, al tratarse de un laboratorio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuraci\u00f3n para acceder remotamente.<\/h2>\n\n\n\n<p>La base de datos es accesible \u00fanicamente de manera local, para permitir el acceso a trav\u00e9s de la red, realizaremos los siguientes pasos.<\/p>\n\n\n\n<p>Accediendo al gestor de configuraci\u00f3n de SQL Server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"824\" height=\"1024\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-6-824x1024.png\" alt=\"\" class=\"wp-image-327\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-6-824x1024.png 824w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-6-241x300.png 241w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-6-768x955.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-6-1236x1536.png 1236w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-6.png 1276w\" sizes=\"auto, (max-width: 824px) 100vw, 824px\" \/><\/figure>\n\n\n\n<p>Modificando las opciones para poder acceder a la base de datos de manera remota, tenemos que acceder a la opci\u00f3n TCP\/IP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"500\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-7-1024x500.png\" alt=\"\" class=\"wp-image-328\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-7-1024x500.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-7-300x146.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-7-768x375.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-7.png 1192w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Cambiamos la opci\u00f3n <strong>Enabled<\/strong> a <strong>Yes<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-8-1024x683.png\" alt=\"\" class=\"wp-image-329\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-8-1024x683.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-8-300x200.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-8-768x513.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-8-1536x1025.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-8.png 1804w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Luego, accedemos a la pesta\u00f1a <strong>IP Addresses<\/strong> y agregamos el puerto en el que queremos que el servicio este a la escucha en el campo <strong>TCP Port<\/strong> de la secci\u00f3n <strong>IPAll.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"688\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-10-1024x688.png\" alt=\"\" class=\"wp-image-331\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-10-1024x688.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-10-300x202.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-10-768x516.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-10-1536x1033.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-10.png 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Luego, para reiniciar el servicio y que se apliquen los cambios, accedemos al menu <strong>SQL Server Services<\/strong>, le damos click derecho al objeto <strong>SQL Server<\/strong> y luego click en <strong>Restart.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"327\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-11-1024x327.png\" alt=\"\" class=\"wp-image-332\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-11-1024x327.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-11-300x96.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-11-768x245.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-11-1536x490.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-11.png 1942w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ahora, para confirmar que el servicio sea accesible, podemos listar los puertos en escucha del servidor a trav\u00e9s de Powershell.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"308\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-12-1024x308.png\" alt=\"\" class=\"wp-image-333\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-12-1024x308.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-12-300x90.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-12-768x231.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-12.png 1224w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Desde el equipo Kali, podemos validar que el servicio esta a la escucha utilizando Impacket-mssqlclient para intentar conectarnos a la base de datos respectiva.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"423\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-13-1024x423.png\" alt=\"\" class=\"wp-image-334\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-13-1024x423.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-13-300x124.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-13-768x317.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-13.png 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Obtenemos el hostname y la base de datos configurada como respuesta, por lo que se confirma que ya podemos proceder a generar el laboratorio vulnerable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preparando el entorno vulnerable.<\/h2>\n\n\n\n<p>Recapitulando las vulnerabilidades mencionadas.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Listado de directorios internos de un servidor a trav\u00e9s de MSSQL, identificando ficheros sensibles.<\/li>\n\n\n\n<li>Uso de funciones p\u00fablicas para forzar la autenticaci\u00f3n del servidor y de un usuario de dominio hacia el equipo del atacante para ataques de NTLM Relay.<\/li>\n\n\n\n<li>Ejecuci\u00f3n de c\u00f3digo remoto a trav\u00e9s de funciones propias de MSSQL.<\/li>\n<\/ul>\n\n\n\n<p>Para las primeras dos funciones, no necesitamos hacer mucho, ya que se instalo sobre un dominio de Windows, los usuarios regulares tienen privilegios de consulta, muy reducidos, pero cualquier credencial nos da acceso a funciones publicas.<\/p>\n\n\n\n<p>Pero para replicar el comportamiento en redes corporativas, registraremos tickets SPN en los dominios respectivos para permitir la autenticaci\u00f3n por Kerberos al servicio respectivo.<\/p>\n\n\n\n<p>Para esta tarea, en nuestro controlador de dominio utilizaremos el siguiente comando:<\/p>\n\n\n\n<p>season -S MSSQLSvc\/coreint.internal.jsec.rt internal.jsec.rt\\serveradmin<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"321\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-36-1024x321.png\" alt=\"\" class=\"wp-image-360\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-36-1024x321.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-36-300x94.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-36-768x241.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-36-1536x481.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-36.png 1698w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>De esta manera, la instancia podr\u00e1 ser identificada a trav\u00e9s de enumeraci\u00f3n de Active Directory.<\/p>\n\n\n\n<p>Para el tercer punto, crearemos un usuario local de base de datos con privilegios de Sysadmin, el cual es uno de los requisitos para habilitar la funci\u00f3n &#8220;xp_cmdshell&#8221;.<\/p>\n\n\n\n<p>En las bases de datos respectivas, accedemos al gestor de base de datos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"980\" height=\"1024\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-15-980x1024.png\" alt=\"\" class=\"wp-image-336\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-15-980x1024.png 980w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-15-287x300.png 287w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-15-768x802.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-15-1470x1536.png 1470w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-15.png 1516w\" sizes=\"auto, (max-width: 980px) 100vw, 980px\" \/><\/figure>\n\n\n\n<p>Accedemos con el usuario de dominio que instalo el servidor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"787\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-18-1024x787.png\" alt=\"\" class=\"wp-image-339\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-18-1024x787.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-18-300x231.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-18-768x590.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-18-1536x1180.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-18.png 1580w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Una vez dentro, accedemos al submenu <strong>Security<\/strong> y luego a <strong>Logins<\/strong>, dandole click derecho y accediendo a <strong>New Login<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1004\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-22-1024x1004.png\" alt=\"\" class=\"wp-image-343\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-22-1024x1004.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-22-300x294.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-22-768x753.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-22.png 1244w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Para agregar a un usuario del dominio como un usuario valido con privilegios en la base de datos, le damos click en <strong>Search<\/strong>, luego hacemos click en el bot\u00f3n <strong>Locations<\/strong> y para poder buscar usuarios del dominio interno, expandimos el dominio padre <strong>jsec.rt<\/strong> y seleccionamos el subdominio <strong>internal.jsec.rt <\/strong>donde reside nuestro usuario de pruebas.<img decoding=\"async\" src=\"blob:https:\/\/jsec-rt.com\/b375ad76-0584-4dc3-b4bf-739b61478be0\"><\/p>\n\n\n\n<p>Escribimos el nombre de usuario al que le queremos dar privilegios, en mi caso <strong>Sqluser<\/strong>, y le damos click en <strong>Check Names<\/strong>, para asegurarnos que el usuario esta siendo identificado correctamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"841\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-20-1024x841.png\" alt=\"\" class=\"wp-image-341\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-20-1024x841.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-20-300x246.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-20-768x631.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-20-1536x1262.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-20.png 1702w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Le damos click a <strong>OK<\/strong> y pasamos a la pesta\u00f1a <strong>Server Roles<\/strong>, donde marcaremos a este usuario como <strong>Sysadmin<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"806\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-21-1024x806.png\" alt=\"\" class=\"wp-image-342\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-21-1024x806.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-21-300x236.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-21-768x604.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-21-1536x1209.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-21.png 1756w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Le podemos dar click a <strong>OK<\/strong> y ya tendremos nuestro nuevo usuario de pruebas con posibilidad de acceder a la base de datos respectiva.<\/p>\n\n\n\n<p>Desde nuestro equipo Kali, podemos validar el acceso utilizando impacket-mssqlclient.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"317\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-23-1024x317.png\" alt=\"\" class=\"wp-image-344\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-23-1024x317.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-23-300x93.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-23-768x238.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-23.png 1512w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Cabe destacar que es necesario utilizar la flag <strong>-windows-auth<\/strong> para poder autenticarnos con usuarios del sistema operativo o de dominio.<\/p>\n\n\n\n<p>Para finalizar la configuraci\u00f3n, agregaremos al usuario del equipo <strong>Coreint<\/strong> como administrador del equipo <strong>DBInt<\/strong> para el ataque de Relay.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"617\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-24-1024x617.png\" alt=\"\" class=\"wp-image-346\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-24-1024x617.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-24-300x181.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-24-768x462.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-24-1536x925.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-24.png 2036w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ahora podemos proceder a los escenarios de explotaci\u00f3n.<\/p>\n\n\n\n<p>Para estos escenarios de explotaci\u00f3n, utilizaremos la herramienta <strong>PowerUpSQL<\/strong> y un equipo Windows en la red interna, con acceso de bajos privilegios (usuario <strong>jsec<\/strong>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Escenario de explotaci\u00f3n 1: Listado de directorios internos a trav\u00e9s de MSSQL.<\/h2>\n\n\n\n<p>Existen muchos casos donde es posible identificar instancias de MSSQL configuradas en el dominio, para aplicaciones internas y otros, para el caso de aplicaciones Web alojadas en un servidor con MSSQL, es posible descubrir los directorios expuestos y en algunos casos, identificar ficheros sensibles que podr\u00edan ser descargados.<\/p>\n\n\n\n<p>Simulando un escenario real, en un servidor con MSSQL instale XAMPP para tener un servidor web, creando una carpeta de backups con un nombre que seria un poco complicado de encontrar sin realizar acciones de bruteforcing sobre directorios.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"345\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-26-1024x345.png\" alt=\"\" class=\"wp-image-349\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-26-1024x345.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-26-300x101.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-26-768x259.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-26.png 1334w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ahora utilizaremos <strong>PowerUpSQL<\/strong> para realizar el descubrimiento de instancias MSSQL y utilizar la funci\u00f3n publica &#8220;xp_dirtree&#8221; para listar contenidos internos.<\/p>\n\n\n\n<p>Desde un equipo fuera de dominio pero con visibilidad hacia los equipos respectivos, validamos la visibilidad hacia el controlador de dominio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"525\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-27-1024x525.png\" alt=\"\" class=\"wp-image-351\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-27-1024x525.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-27-300x154.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-27-768x393.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-27.png 1214w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Luego, importamos el script en una sesi\u00f3n de Powershell estableciendo el estado de la pol\u00edtica de ejecuci\u00f3n como <strong>Bypass<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"264\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-28-1024x264.png\" alt=\"\" class=\"wp-image-352\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-28-1024x264.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-28-300x77.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-28-768x198.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-28.png 1286w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ahora, para poder consultar la informaci\u00f3n al dominio, necesitamos que las funciones importadas se ejecuten desde el contexto de un usuario de dominio, para realizar esto, algunas de las opciones mas sencillas son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utilizar un objeto tipo <strong>Credential<\/strong> en Powershell, el cual es aceptado por la herramienta.<\/li>\n\n\n\n<li>Ejecutar una ventana de Powershell utilizando <strong>runas<\/strong>, para forzar el contexto de un usuario distinto.<\/li>\n\n\n\n<li>Agregar el equipo respectivo al dominio, asumiendo que el par\u00e1metro MachineAccountQuota se encuentre con los valores por defecto y que no se haya implementado restricciones sobre los usuarios de dominio.<\/li>\n<\/ul>\n\n\n\n<p>Las primeras dos opciones son posibles de validar de manera r\u00e1pida, as\u00ed que en este caso, utilizaremos runas para levantar una shell en el contexto de un usuario de dominio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"305\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-30-1024x305.png\" alt=\"\" class=\"wp-image-354\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-30-1024x305.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-30-300x89.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-30-768x229.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-30.png 1384w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Una vez obtenida la shell respectiva y validado el acceso al dominio interno, procedemos a enumerar las instancias MSSQL registradas en el dominio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"824\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-37-1024x824.png\" alt=\"\" class=\"wp-image-361\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-37-1024x824.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-37-300x241.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-37-768x618.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-37.png 1528w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Observamos dos instancias registradas, por lo que podemos utilizar otra funci\u00f3n para probar la conectividad a estas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"714\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-38-1024x714.png\" alt=\"\" class=\"wp-image-362\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-38-1024x714.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-38-300x209.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-38-768x535.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-38-1536x1071.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-38.png 1790w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Confirmando la accesibilidad a estos utilizando un usuario de dominio cualquiera, procedemos a listar los directorios internos utilizando la funci\u00f3n publica &#8220;xp_dirtree&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"724\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-39-1024x724.png\" alt=\"\" class=\"wp-image-363\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-39-1024x724.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-39-300x212.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-39-768x543.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-39-1536x1086.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-39.png 1842w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Podemos leer mas de esta funci\u00f3n en el siguiente enlace:<\/p>\n\n\n\n<p><blockquote class=\"wp-embedded-content\" data-secret=\"EmE9t4ze6t\"><a href=\"https:\/\/www.sqlops.com\/what-is-xp_dirtree\/\">What is XP_DIRTREE?\u00a0 What are the alternatives to XP_Dirtree<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;What is XP_DIRTREE?\u00a0 What are the alternatives to XP_Dirtree&#8221; &#8212; SQLOPS\" src=\"https:\/\/www.sqlops.com\/what-is-xp_dirtree\/embed\/#?secret=1dz3cHHnCy#?secret=EmE9t4ze6t\" data-secret=\"EmE9t4ze6t\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n\n\n\n<p>Ahora, me paso mas de una vez el encontrarme con una aplicaci\u00f3n web que tenia una instancia de MSSQL corriendo, por lo que pude utilizar esta funci\u00f3n para descubrir directorios y ficheros ocultos.<\/p>\n\n\n\n<p>En este caso, utilizaremos XAMPP por temas de simplicidad.<\/p>\n\n\n\n<p>Podemos listar los contenidos de la carpeta xampp para explorar un poco, pero la ruta conocida donde se alojan las aplicaciones web es en la carpeta <strong>htdocs<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"379\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-40-1024x379.png\" alt=\"\" class=\"wp-image-364\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-40-1024x379.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-40-300x111.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-40-768x284.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-40-1536x568.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-40.png 1958w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Observamos dos carpetas distintas a la estructura por defecto, en este caso podemos explorar la carpeta <strong>backups<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"319\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-41-1024x319.png\" alt=\"\" class=\"wp-image-365\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-41-1024x319.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-41-300x94.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-41-768x239.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-41-1536x479.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-41.png 1982w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Observamos la existencia de la carpeta <strong>backups-old-2023-migracion<\/strong>, la cual seria muy dif\u00edcil de encontrar utilizando m\u00e9todos tradicionales de descubrimiento de directorios en aplicaciones web.<\/p>\n\n\n\n<p>Al ya no contar con mas carpetas dentro de esta ultima, obtenemos un resultado vac\u00edo con la query utilizada anteriormente, sin embargo, podemos agregar un nuevo valor como par\u00e1metro en xp_dirtree, para mostrar los archivos.<\/p>\n\n\n\n<p>En este caso, la query ejecutada seria: exec xp_dirtree &#8216;C:\\xampp\\htdocs\\backups\\backups-old-2023-migracion&#8217;,1,1&#8242;<\/p>\n\n\n\n<p>Donde los dos par\u00e1metros despu\u00e9s de la ruta definida hacen referencia a la profundidad del listado de archivos en la funci\u00f3n y una flag para habilitar el listado de ficheros, el cual viene deshabilitado por defecto.<\/p>\n\n\n\n<p>Podemos descargar el fichero que no se hubiera identificado de manera r\u00e1pida con m\u00e9todos tradicionales utilizando un usuario de bajos privilegios y aprovechando una funci\u00f3n valida en la instancia MSSQL.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"624\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-42-1024x624.png\" alt=\"\" class=\"wp-image-366\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-42-1024x624.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-42-300x183.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-42-768x468.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-42-1536x936.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-42.png 1976w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Escenario de explotaci\u00f3n 2: Uso de funciones publicas para forzar la autenticaci\u00f3n del servidor hacia el equipo atacante para ataques NTLM Relay.<\/h2>\n\n\n\n<p>Para este escenario, podemos aprovechar la misma funci\u00f3n del anterior punto, o tambi\u00e9n podemos utilizar otra funci\u00f3n llamada <strong>xp_fileexist<\/strong>.<\/p>\n\n\n\n<p>Esta segunda funci\u00f3n simplemente validara que un archivo especifico existe en la ruta especificada o no.<\/p>\n\n\n\n<p>Como atacante, podemos aprovechar que ambas funciones permiten trabajar con rutas remotas por SMB, por lo que es posible capturar hashes o realizar ataques de relay.<\/p>\n\n\n\n<p>Validando las direcciones IP y que la firma de mensajes SMB no sea requerida.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"212\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-43-1024x212.png\" alt=\"\" class=\"wp-image-367\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-43-1024x212.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-43-300x62.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-43-768x159.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-43-1536x318.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-43-2048x425.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Podemos hacer la prueba de visibilidad, observando que tipo de hashes y de que usuario se podr\u00eda capturar utilizando la funci\u00f3n <strong>xp_dirtree<\/strong> o <strong>xp_fileexist<\/strong><\/p>\n\n\n\n<p>Desplegando un servidor smb por Impacket.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"960\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-44-1024x960.png\" alt=\"\" class=\"wp-image-368\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-44-1024x960.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-44-300x281.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-44-768x720.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-44.png 1288w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ejecutando la funci\u00f3n <strong>xp_dirtree<\/strong> en <strong>Coreint<\/strong> hacia el equipo atacante para capturar el hash Netntlmv2 del usuario.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"99\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-45-1024x99.png\" alt=\"\" class=\"wp-image-369\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-45-1024x99.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-45-300x29.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-45-768x74.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-45-1536x149.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-45.png 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Observamos que el hash obtenido pertenece al usuario <strong>coreint$<\/strong>, ya que la instancia MSSQL se ejecuta bajo un usuario de servicio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"505\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-46-1024x505.png\" alt=\"\" class=\"wp-image-370\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-46-1024x505.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-46-300x148.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-46-768x379.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-46-1536x758.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-46.png 1622w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Confirmando la posibilidad de capturar el hash del equipo <strong>Coreint<\/strong>, podemos desplegar el servidor relay apuntando hacia <strong>DBINT<\/strong>, donde agregamos al equipo <strong>CoreInt<\/strong> como administrador local.<\/p>\n\n\n\n<p>Ejecutamos nuevamente la query y vemos que los hashes de usuarios locales (SAM) se obtienen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-48-1024x536.png\" alt=\"\" class=\"wp-image-372\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-48-1024x536.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-48-300x157.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-48-768x402.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-48-1536x804.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-48-2048x1071.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Ejecutamos nuevamente la query y vemos que los hashes de usuarios locales (SAM) se obtienen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"480\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-49-1024x480.png\" alt=\"\" class=\"wp-image-373\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-49-1024x480.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-49-300x140.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-49-768x360.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-49-1536x719.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-49-2048x959.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Similar a posts anteriores, si quisiera ejecutar comandos los podr\u00eda especificar o tambi\u00e9n podr\u00eda desplegar un servidor socks.<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"508\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-50-1024x508.png\" alt=\"\" class=\"wp-image-374\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-50-1024x508.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-50-300x149.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-50-768x381.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-50-1536x762.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-50-2048x1015.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>De esta manera, logramos utilizar las funciones internas de MSSQL para ejecutar ataques de Relay.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Escenario de explotaci\u00f3n 3: Ejecuci\u00f3n de c\u00f3digo remoto a trav\u00e9s de funciones propias de MSSQL.<\/h2>\n\n\n\n<p>La ejecuci\u00f3n de comandos se realiza a trav\u00e9s de xp_cmdshell, una funci\u00f3n bastante conocida, por lo que mostraremos la explotaci\u00f3n utilizando PowerUpSQL.<\/p>\n\n\n\n<p>En este caso, para explotar este escenario, necesitamos a un usuario privilegiado en la base de datos para poder habilitar la funci\u00f3n respectiva, en nuestro caso, sera el usuario de dominio <strong>Sqluser<\/strong>, que anteriormente lo agregamos como Sysadmin.<\/p>\n\n\n\n<p>Iniciamos la ventana de Powershell bajo el contexto de este usuario, cuya pass podr\u00edamos haber encontrado en el escenario 1 (descarga de un fichero de backup en directorios web ocultos), validando que las credenciales sean correctas al consultar los tickets SPN relacionados a bases de datos MSSQL.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"826\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-51-1024x826.png\" alt=\"\" class=\"wp-image-375\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-51-1024x826.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-51-300x242.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-51-768x620.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-51-1536x1240.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-51.png 1586w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Posteriormente, necesitamos validar si el usuario que tenemos realmente es privilegiado, para lo cual podemos utilizar la funci\u00f3n <strong>Get-SQLServerLinkCrawl<\/strong>, que consultara bases de datos enlazadas y si tenemos privilegios de Sysadmin.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"756\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-52-1024x756.png\" alt=\"\" class=\"wp-image-376\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-52-1024x756.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-52-300x221.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-52-768x567.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-52.png 1520w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>El siguiente post hablara sobre bases de datos enlazadas, por lo que ahora nos interesa \u00fanicamente el valor de Sysadmin que se encuentra en 1, confirmando que somos un usuario privilegiado.<\/p>\n\n\n\n<p>Podriamos habilitar la funci\u00f3n xp_cmdshell manualmente, para lo cual existe bastante documentaci\u00f3n, pero en resumen, estas serian las consultas que tendr\u00edamos que ejecutar sobre la base de datos usando al usuario privilegiado.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>EXECUTE sp_configure &#8216;show advanced options&#8217;, 1;<\/li>\n\n\n\n<li>RECONFIGURE;<\/li>\n\n\n\n<li>EXECUTE sp_configure &#8216;xp_cmdshell&#8217;, 1;<\/li>\n\n\n\n<li>RECONFIGURE;<\/li>\n<\/ul>\n\n\n\n<p>Afortunadamente, PowerUpSQL tiene una funci\u00f3n llamada <strong>Invoke-SQLOSCmd<\/strong>, la cual habilita <strong>xp_cmdshell <\/strong>de manera autom\u00e1tica y nos permite ejecutar comandos respectivos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"404\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-53-1024x404.png\" alt=\"\" class=\"wp-image-377\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-53-1024x404.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-53-300x118.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-53-768x303.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-53-1536x605.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-53.png 1766w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p> Si bien es posible ejecutar comandos, no es una shell interactiva, por lo que obtener resultados o informaci\u00f3n de comandos llega a ser complicado de entender.<\/p>\n\n\n\n<p>Por ejemplo, si ejecutamos un simple ipconfig, veremos que la respuesta es autom\u00e1ticamente reducida para caber en la pantalla, se podr\u00eda utilizar la funci\u00f3n <strong>fl<\/strong> para obtener el resto de la informaci\u00f3n, pero como se observa en la captura, sigue siendo complicado de entender.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"554\" src=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-54-1024x554.png\" alt=\"\" class=\"wp-image-378\" srcset=\"https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-54-1024x554.png 1024w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-54-300x162.png 300w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-54-768x415.png 768w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-54-1536x830.png 1536w, https:\/\/jsec-rt.com\/wp-content\/uploads\/2023\/11\/image-54.png 1994w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>As\u00ed que en este caso, lo mas recomendado seria poder desplegar una shell reversa para poder interactuar con el sistema operativo, o agregar a nuevos usuarios al grupo de administradores locales, pero esto puede llegar a ser un poco complicado por temas de antivirus y EDR.<\/p>\n\n\n\n<p>En el siguiente post mostrare un peque\u00f1o truco que desarrolle para poder desplegar un servidor SSH &#8220;portable&#8221; utilizando una base de datos MSSQL y una cuenta de servicio, el cual puede ser utilizado posteriormente como t\u00fanel SSH para obtener acceso a redes segmentadas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es bastante com\u00fan llegar a identificar instancias MSSQL en entornos de Active Directory, debido a la f\u00e1cil integraci\u00f3n con LDAP y mecanismos de autenticaci\u00f3n respectivos, por lo que estas instancias desplegadas pueden brindar a un atacante distintas maneras de obtener informaci\u00f3n o alguna manera de comprometer servidores internos. En este <a href=\"https:\/\/jsec-rt.com\/index.php\/2024\/03\/24\/rt-movimiento-lateral-a-traves-de-mssql-parte-1\/\" class=\"btn-link\">Continue Reading<i class=\"ion-ios-arrow-right\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-305","post","type-post","status-publish","format-standard","hentry","category-p-rt"],"_links":{"self":[{"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/posts\/305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/comments?post=305"}],"version-history":[{"count":8,"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/posts\/305\/revisions"}],"predecessor-version":[{"id":429,"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/posts\/305\/revisions\/429"}],"wp:attachment":[{"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/media?parent=305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/categories?post=305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jsec-rt.com\/index.php\/wp-json\/wp\/v2\/tags?post=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}