Proof of Attack Capability

Offensive Security Work

Real targets. Real exploits. Real reports. This is what I can break and how I break it.

9 Vulns Exploited
2 Critical RCE / Auth Bypass
29/30 DFIR Flags Captured
45+ Evidence Screenshots
What I can break

Key Offensive Highlights

Web Application Pentesting
  • Bypassed authentication via SQL injection: full admin access
  • Exploited IDOR to enumerate all users' basket data
  • Cracked admin credentials via missing rate limiting (attempt 3)
  • Extracted BIP-39 seed phrase from plaintext storage
  • 9 vulnerabilities across 7 OWASP Top 10 categories, 45+ evidence screenshots
DFIR & Incident Response
  • Reconstructed full attack timeline across 5 forensic challenge layers
  • Identified Cobalt Strike beacon in memory via Volatility3
  • Uncovered DNS exfiltration channel from raw PCAP traffic
  • Recovered deleted credentials and attacker exfil plan from wiped disk
  • Reversed two-stage VBA macro infection chain via static analysis
Testing Methodology
01
Recon
Enumeration & OSINT
02
Scanning
Nmap · Nessus · Burp
03
Exploitation
SQLi · IDOR · Brute Force
04
Post-Exploitation
Priv Esc · Pivoting
05
Reporting
CVSS · Remediation
Based on OWASP Testing Guide v4 · PTES · MITRE ATT&CK
Pentest Report

Featured Projects

Real engagements. Real exploits. Real reports.

 Penetration Testing  ·  Application Security Flagship Project

OWASP Juice Shop: Web Application Penetration Test

Target
OWASP Juice Shop (Node.js)
Type
Black-box web application
Methodology
OWASP Testing Guide v4
Tools
Burp Suite, Kali, Docker
Findings
9 vulnerabilities, 7 categories
Outcome
Full admin access achieved
Executive Summary

Black-box penetration test against OWASP Juice Shop, an intentionally vulnerable Node.js e-commerce application. Objective: gain unauthorized administrative access and demonstrate the real-world blast radius of every finding. The assessment identified 9 vulnerabilities across 7 OWASP Top 10 (2021) categories, including two Critical-severity issues enabling complete session takeover. Every finding is backed by a working exploit, a captured Burp Suite request/response, a root cause analysis, and a remediation recommendation. In a production environment, this attack chain would expose all customer data, enable arbitrary account takeover, and grant persistent administrative control with no detectable footprint.

Phase 1: Reconnaissance

Mapped the full attack surface before running a single exploit. Enumerated all API endpoints via Burp Suite passive crawl, discovered an unauthenticated /ftp/ directory exposing backup files, and extracted every REST route from main.js via static analysis. No automated scanner. All manual.

Phase 2: Attack Chain

Findings did not exist in isolation. They chained. The SQLi bypass produced the admin JWT. The FTP exposure yielded the seed phrase and OAuth secret. IDOR gave access to every user basket. Together they formed a single kill chain from unauthenticated visitor to full application owner.

Recon
API + FTP mapped
SQLi
Auth bypassed
Admin JWT
Session hijacked
IDOR
All users exposed
FTP Secrets
Seed + OAuth leaked
Full Admin
Application owned
Phase 3: Exploitation Evidence

Every finding is backed by a working exploit, a captured Burp Suite request/response, a root cause analysis, and a remediation recommendation. 45 evidence screenshots documented across all phases. Full report on GitHub.

2 Critical
3 High
4 Medium
9 total findings across 7 OWASP Top 10 categories
Phase 4: Key Findings
Critical CVSS 9.8

SQL Injection: Auth Bypass

Entry POST /rest/user/login Exploit Unsanitised email field Impact Full admin access
email: ' OR 1=1--
password: anything
→ Admin JWT extracted. Session hijacked.

Root cause: User input concatenated directly into SQL string with no parameterisation. Any raw query without a prepared statement is this bug.

Fix: Replace with parameterised queries or an ORM. Input validation is secondary: the query itself must never accept literal user input.

Critical CVSS 9.1

Sensitive Data Exposure

Entry /ftp/ directory listing Exploit No auth, direct file access Impact Account takeover chain
GET /ftp/package.json.bak HTTP/1.1
→ BIP-39 seed phrase exposed.
→ OAuth client_secret in plaintext.

Root cause: Backup files deployed to a publicly accessible directory with no access controls. A forgotten file is all it takes.

Fix: Remove /ftp/ from the public webroot. Enforce authentication on all non-public paths. Add backup file patterns to .gitignore and deployment exclusion lists.

High CVSS 8.1

IDOR: Basket Enumeration

Entry GET /api/BasketItems/1 Exploit Sequential ID increment Impact All users' data exposed
GET /api/BasketItems/1 → user A cart
GET /api/BasketItems/2 → user B cart
→ Zero ownership validation.

Root cause: API returns objects by ID alone with no ownership check. The server trusts the client to only request its own data.

Fix: Verify req.user.id matches the resource owner on every object request server-side. Use UUIDs instead of sequential integers to raise the enumeration cost.

High CVSS 7.5

Broken Auth: No Rate Limiting

Entry POST /rest/user/login Exploit Targeted brute force Impact Admin password cracked
Attempt 1: admin123 → 401
Attempt 2: password → 401
Attempt 3: admin12345 → 200 ✓
→ No lockout. No rate limit.

Root cause: Login endpoint accepts unlimited attempts with no throttling or lockout. Password complexity is the only defence.

Fix: Implement account lockout after 5 failed attempts, IP-based rate limiting via express-rate-limit, and exponential backoff. Add CAPTCHA on repeated failures.

Medium CVSS 6.1

Reflected XSS: Search & Track Order

Entry Search bar / order tracking Exploit Unsanitised input reflected in DOM Impact Session theft / phishing vector
<iframe src="javascript:alert('XSS')">
→ Executes in victim's browser context.
→ Escalates to session cookie theft.

Root cause: User-controlled input reflected into HTML without output encoding. As a developer, I have written this exact pattern.

Fix: Encode all user input before rendering into the DOM. Use DOMPurify or framework-level encoding. Set a strict Content-Security-Policy to block inline script execution.

Medium CVSS 6.8

File Upload Restriction Bypass

Entry Profile photo upload Exploit Client-side validation only Impact Arbitrary file uploaded server-side
1. UI blocks non-image files → JS only
2. Intercept POST in Burp Suite
3. Rename payload.php → avatar.jpg
→ Server accepted. No server check.

Root cause: File type enforcement happens only in JavaScript. Any intercepting proxy bypasses it in seconds. The server performs zero validation.

Fix: Validate file type and MIME server-side using an extension allowlist. Scan file content, not just the header. Store uploads outside the webroot and serve through a controlled handler.

9
Vulnerabilities Found
45+
Evidence Screenshots
7
OWASP Categories
9.8
Highest CVSS
100%
Admin Access Gained
Burp Suite Kali Linux Python Bash SQLi XSS IDOR OWASP Top 10 CVSS 3.1 Docker
What I'd Do Differently
  • Automate the enumeration phase with a custom Python script to cover all API endpoints systematically rather than manually.
  • Chain the IDOR finding with privilege escalation to demonstrate a full account takeover path, not just data exposure.
  • Add a WAF bypass section: test whether the same payloads pass through a real WAF configuration and document the bypass techniques.
 Digital Forensics  ·  Incident Response 6-Part Series

Investigated a Simulated Linux Breach and Reconstructed the Full Attack Timeline Across Six Evidence Domains

Target
Linux web server (Ubuntu)
Type
Digital Forensics and IR
Evidence Sources
Logs, RAM, PCAP, Disk, Malware
Tools
Volatility3, tshark, foremost, strings
MITRE Techniques
10 ATT&CK techniques mapped
Outcome
29/30 flags, full breach reconstructed
Executive Summary

End-to-end forensic investigation of a compromised Linux web server across six evidence domains. A single attacker (198.51.100.47) conducted a targeted breach on 14 November 2025. Starting from DirBuster reconnaissance at 02:55 UTC, they achieved root in 36 minutes via SSH brute force, web shell upload, and privilege escalation, then installed a Cobalt Strike beacon disguised as a kernel process, created a backdoor user, loaded a rootkit to hide PID 31337, and exfiltrated credentials via DNS tunnelling. Every step was reconstructed from raw evidence: system logs, a RAM dump, a packet capture, disk images, and a custom ELF malware sample, producing a complete 12-event attack timeline mapped to 10 MITRE ATT&CK techniques.

Attack Chain: 02:55 to 03:55 UTC
DirBuster SSH Brute Force Web Shell Upload Root Access Beacon Deployed Backdoor + Rootkit DNS Exfiltration
Six Investigation Domains
01. Log Analysis 6/6 flags

Reconstructed initial access and persistence from apache, auth, syslog, and kern logs. Identified brute force source IP, web shell upload, privilege escalation via sudo, rootkit loading, and cron persistence.

02. Memory Forensics 6/6 flags

Used Volatility3 to expose a Cobalt Strike beacon disguised as kworker-update (PID 31337). Recovered plaintext credentials from RAM and reconstructed attacker commands from bash history in memory.

03. Network Forensics 5/5 flags

Analysed a PCAP with tshark to identify the C2 domain, count 47 scanned ports, reconstruct the reverse shell session (TCP stream 190), and decode base64-encoded credentials exfiltrated inside DNS subdomains.

04. Disk Forensics 5/5 flags

Mounted disk images read-only, used foremost to carve a PNG from raw sectors, and recovered deleted credentials and a staged exfiltration plan (OPERATION NIGHTFALL) from unallocated space using strings.

05. Malware Triage 5/5 flags

Static analysis only. Extracted C2 IP hardcoded in an ELF binary using strings, identified the beacon User-Agent, and fully reversed a two-stage VBA macro infection chain including sandbox evasion and encoded PowerShell payload.

06. Incident Timeline 2/3 flags

Correlated all five evidence sources to reconstruct a 12-event canonical attack timeline from 02:55 to 03:55 UTC. Third flag (SHA-256 timeline hash) not captured: format mismatch despite 1.3M brute-force combinations. Documented in full.

Key Findings
Initial Access Vector Identified Log Analysis

SSH brute force from 198.51.100.47 succeeded after 83 attempts targeting the admin account. Web shell uploaded to /uploads/shell.php within 2 minutes of login. Both attack vectors confirmed via apache-access.log and auth.log cross-reference.

Persistence Mechanisms Detected 3 Methods

Three independent persistence methods deployed: backdoor user svc-backup with injected SSH key, cron job running beacon every 5 minutes, and a rootkit (rootkit_mod.ko) hiding PID 31337 from process listings. Removal of any one leaves two others active.

Cobalt Strike Beacon Exposed Critical

Volatility3 process tree analysis revealed kworker-update (PID 31337) spawned from bash, not kthreadd. Wrong parent process = disguised malware. Beacon confirmed via cmdline output showing AES-256 C2 connection to 203.0.113.99:443.

DNS Exfiltration Channel Decoded Network

tshark analysis of PCAP identified base64-encoded credentials embedded inside DNS subdomain queries to evil-c2.example.com. Decoded to reveal stolen /etc/shadow hashes and SSH private keys. Exfil passed through firewalls that permitted DNS traffic.

Deleted Exfiltration Plan Recovered Disk Forensics

strings analysis on raw disk image recovered OPERATION NIGHTFALL: a deleted file staging a planned DNS tunnel exfiltration of customer database and financial records. Filesystem showed no record of the file. Raw disk sector analysis recovered it intact.

Full Attack Timeline Reconstructed Incident Timeline

All five evidence sources correlated into a single 12-event canonical timeline from 02:55 to 03:55 UTC. Attacker achieved root in 36 minutes from first recon hit. Timeline maps each event to MITRE ATT&CK technique, source log, and timestamp, ready for legal or executive reporting.

MITRE ATT&CK Coverage
T1595 Active Scanning T1110 Brute Force T1505.003 Web Shell T1136 Create Account T1098.004 SSH Auth Keys T1053.003 Cron Job T1014 Rootkit T1003 Credential Dumping T1059 Command Interpreter T1048.003 DNS Exfiltration
29/30
Flags Captured
6
Evidence Domains
10
MITRE Techniques
60 min
Full Breach Window
3
Persistence Methods
36 min
Recon to Root
Volatility3 tshark Wireshark foremost strings grep / awk sha256sum Python 3 Linux Logs Static Analysis Memory Forensics DNS Exfiltration
Why This Matters

This investigation demonstrates my ability to:

  • Analyse real-world attack artifacts across logs, memory, network, disk, and malware, using the same tools and methodology a SOC analyst or IR responder would use on a live incident.
  • Think like an attacker: understanding why each technique was used (beacon disguised as kworker, DNS exfil to bypass firewalls, rootkit to hide PID) makes the investigation sharper and faster.
  • Reconstruct a complete incident narrative from raw forensic evidence and deliver a timeline that maps directly to MITRE ATT&CK, suitable for executive reporting, legal proceedings, or remediation planning.
  • Document failures honestly: the one uncaptured flag is explained in full, with the investigation steps taken, why it failed, and what the correct approach should have been. That level of rigour is what separates a junior analyst from a trusted one.
 Security Tool  ·  DFIR Automation Bash + Python

Built a Two-Part Automated DFIR Triage Tool That Runs All Six Investigation Modules and Produces a Tabbed HTML Incident Report

Language
Bash 4.0 + Python 3.6+
Modules
6 forensic domains
Output
HTML report, JSON, timeline
Dependencies
Python stdlib only
MITRE Techniques
Mapped per finding
Source
CyberDefenders Linux Breach
What It Does

Two-part tool built directly from the CyberDefenders Linux Breach Investigation CTF. dfir-triage.sh runs all six forensic modules in sequence: log analysis, memory forensics, network forensics, disk forensics, malware triage, and timeline correlation. Attacker IP discovered in Module 1 is automatically threaded into Modules 2 through 5 so each module hunts the same actor. report.py then reads the JSON findings and timeline and renders a tabbed HTML incident report covering Summary, Findings, Timeline, and MITRE ATT&CK mapping. No external dependencies.

Usage
$ ./dfir-triage.sh -l /logs -m /volatility -n capture.pcap -d disk.dd -w /malware -a <attacker_ip> -c <c2_ip>
$ python3 report.py --input ./output/<timestamp> --title "Incident Report"
Six Forensic Modules
01. Log Analysis

Parses auth.log, apache access/error logs, syslog, kern.log. Extracts attacker IP, brute force count, web shell path, and persistence indicators. Feeds discovered IP downstream.

02. Memory Forensics

Runs Volatility3 pstree and netscan. Flags anomalous parent-child chains, suspicious PIDs, and C2 connections. Matches network sessions to the attacker IP from Module 1.

03. Network Forensics

Uses tshark to count conversations, filter by attacker IP, extract DNS queries, and identify C2 traffic. Reconstructs session data from the supplied PCAP file.

04. Disk Forensics

Mounts disk image read-only, runs strings and foremost, searches for deleted files and attacker artifacts in unallocated space. Reports carved files and suspicious strings.

05. Malware Triage

Static analysis: file type detection, strings extraction for IPs/domains/paths, ELF header inspection, and optional VirusTotal hash lookup. No sandbox required.

06. Timeline Builder

Correlates timestamped events from all five prior modules, sorts chronologically, and writes timeline.txt. report.py renders this as a visual MITRE-mapped incident timeline in HTML.

Bash Python 3 Volatility3 tshark strings foremost grep / awk strace MITRE ATT&CK HTML Report
Why I Built This
  • After completing the six-part investigation manually, I wanted to codify the methodology so any analyst could run it consistently against a new set of evidence with a single command.
  • Cross-module correlation (attacker IP flows automatically from Module 1 into Modules 2 through 5) eliminates the manual copy-paste step that causes analysts to miss connections under pressure.
  • The HTML report output is designed for real-world delivery: tabbed layout, MITRE ATT&CK mapping, and an executive summary that a SOC lead or IR manager can read without touching a terminal.

More pentest reports in the pipeline

Active network pentest lab, custom Python offensive tooling, and a red-team scenario. Each will follow the same attack-driven format: target, exploit chain, impact, evidence.

Read Writeups ↓
Where I sharpen the blade

Hacking Platforms

HackTheBox Premium Member
Active Machines Privilege Escalation Sherlocks (DFIR) CTF Challenges
View Profile

CTF Writeups, DFIR Challenges & Machine Walkthroughs

HackTheBox machine writeups, DFIR challenge series, and lab write-ups, documenting methodology, tools, and findings. First HTB writeup live: HTB Cap (Easy). DFIR Challenge Series: 1 write-up live, 5 dropping Apr 4-12.

View Writeups ↓
Methodology in action

Machine Writeups

Documented HTB machine compromises: full attack chains, techniques, and lessons learned from every root.

Easy Linux 2h 13min

Cap

HackTheBox / First Machine Rooted

Python/Gunicorn-based security dashboard running on Linux. Exploited an IDOR vulnerability to access another user's packet capture, extracted FTP plaintext credentials via Wireshark, reused those credentials for SSH access, then escalated to root via Linux capabilities (cap_setuid) on Python 3.8.

Attack Chain
Web IDOR/data/0
Download PCAP
FTP CredsWireshark
SSH AccessPassword Reuse
Rootcap_setuid
IDOR A01:2021

Insecure Direct Object Reference

PCAP files stored at sequential IDs: changing /data/1 to /data/0 exposed another user's capture without any authorisation check.

Exposure A02:2021

FTP Plaintext Credentials

FTP transmits credentials in cleartext. User nathan's password captured in the downloaded PCAP and recovered with a simple Wireshark FTP filter.

Reuse A07:2021

Password Reuse Across Services

FTP credentials accepted on SSH: same password across services with no isolation, granting an interactive shell as nathan.

PrivEsc Capabilities

cap_setuid on Python 3.8

cap_setuid+eip misconfigured on /usr/bin/python3.8: one liner calls os.setuid(0) and drops a root shell.

Nmap Gobuster Wireshark SSH getcap Python 3.8 Linux Capabilities IDOR FTP
Easy Windows Active Directory

Forest

HackTheBox / Windows Domain Controller

Windows Server 2016 Domain Controller running Active Directory. Enumerated the full domain user list via RPC null session without credentials, identified svc-alfresco with pre-auth disabled and obtained its AS-REP hash, cracked the hash offline with Hashcat, then used BloodHound to trace a four-hop nested group path from svc-alfresco through Account Operators to WriteDACL on HTB.LOCAL. Granted DCSync rights via PowerView, dumped all domain hashes with impacket-secretsdump, and compromised Administrator via Pass the Hash.

Attack Chain
RPC Null SessionUser Enum
AS-REP Roastsvc-alfresco
Hashcats3rvice
BloodHoundWriteDACL Path
DCSyncAll Hashes
Domain AdminPass the Hash
Enum Unauthenticated

RPC Null Session

Full domain user list retrieved via rpcclient -U "" -N with no credentials. Standard AD misconfiguration exposing the entire attack surface before a single password is known.

Initial Access Kerberos

AS-REP Roasting

svc-alfresco had UF_DONT_REQUIRE_PREAUTH set. AS-REP hash obtained without credentials and cracked offline with Hashcat mode 18200 against rockyou.txt in seconds.

PrivEsc ACL Abuse

WriteDACL on Domain Object

Four-hop nested group chain from svc-alfresco to Exchange Windows Permissions granted WriteDACL on HTB.LOCAL. Used PowerView to write DCSync ACEs, then dumped all domain hashes via impacket-secretsdump.

Lateral NTLM

Pass the Hash

Administrator NTLM hash obtained via DCSync. Used directly with evil-winrm -H flag to authenticate as Administrator without ever cracking the plaintext password.

Nmap rpcclient impacket-GetNPUsers Hashcat evil-winrm BloodHound CE bloodhound-python PowerView impacket-secretsdump Active Directory
Easy Windows Active Directory

Return

HackTheBox / Windows Domain Controller

Windows Domain Controller with a printer admin panel on port 80. The settings page sends LDAP credentials to any server address configured on the form. Replaced the address with Kali IP, started a netcat listener on port 389, clicked Update. The printer authenticated and transmitted svc-printer : 1edFg43012!! in plaintext. The compromised account is a member of Server Operators. Modified the VSS service binary path to add svc-printer to local Administrators via sc.exe. Reconnected for a fresh session token. Full Administrator access.

Attack Chain
Port 80Printer Panel
Netcat :389Creds Captured
evil-winrmShell + User Flag
Server Operatorswhoami /groups
VSS Hijacksc.exe binpath
Domain AdminFresh Token
Initial Access LDAP Capture

Printer Panel Credential Transmission

The printer admin settings page sends LDAP bind credentials to any server address entered in the form. Changing the address to an attacker-controlled IP and listening on port 389 captures the service account password in plaintext with no exploitation required.

Privilege Escalation Server Operators

Service Binary Path Hijack via Server Operators

The compromised service account held Server Operators membership, allowing modification of service binary paths on the DC. Changing the VSS service binpath to a net localgroup command and starting the service executed it as SYSTEM, adding the account to local Administrators.

Misconfiguration Group Membership

Service Account in Privileged Built-in Group

A printer service account had no business being a member of Server Operators on the domain controller. Built-in privileged groups grant broad system-level rights and should only contain named administrator accounts with documented justification.

Credential Exposure Cleartext Auth

LDAP Credentials Transmitted in Plaintext

The printer panel transmitted credentials over an unencrypted LDAP connection on port 389. Using LDAPS on port 636 with certificate validation would prevent credential capture via a rogue listener, as the TLS handshake would fail against an attacker-controlled server.

nmap netcat evil-winrm bloodhound-python sc.exe Server Operators Service Binary Hijack Windows AD
Easy Windows Active Directory

Timelapse

HackTheBox / Windows Domain Controller

Windows Domain Controller with an anonymous Shares SMB share containing a zip-protected WinRM backup. Cracked the zip password (supremelegacy) and PFX password (thuglegacy) independently with john, extracted the certificate and key with openssl, and authenticated to WinRM over HTTPS on port 5986 as legacyy. PowerShell history exposed credentials for svc_deploy. BloodHound mapped LAPS_READERS group membership to ReadLAPSPassword on the DC. A single ldapsearch query against ms-Mcs-AdmPwd returned the Administrator password in plaintext.

Attack Chain
SMB Anonymouswinrm_backup.zip
zip2john + pfx2johnBoth Cracked
Cert Auth -SShell as legacyy
PS Historysvc_deploy Creds
LAPS_READERSReadLAPSPassword
Domain Adminldapsearch LAPS
Initial Access SMB + PFX

WinRM Certificate on Anonymous Share

A zip-protected WinRM authentication certificate for legacyy was stored on an anonymous SMB share. Both the zip and PFX passwords were in rockyou.txt. Certificate-based WinRM access granted without any domain credentials.

Credential Exposure PowerShell

Plaintext Credentials in PS History

PowerShell ConsoleHost_history.txt contained a ConvertTo-SecureString command with the svc_deploy password passed as plaintext. PSReadLine writes every command to disk. History files are never automatically purged.

PrivEsc LAPS

LAPS Password Readable via Group

svc_deploy is a member of LAPS_READERS, which holds ReadLAPSPassword on DC01. The LAPS-managed Administrator password returned in plaintext from a single ldapsearch query against ms-Mcs-AdmPwd.

Weak Passwords rockyou.txt

Zip and PFX Passwords in Wordlist

Both supremelegacy (zip) and thuglegacy (PFX) are present in rockyou.txt. Password-protected archives containing credentials must use passwords that are not in common wordlists to provide any meaningful protection.

Nmap smbclient zip2john pfx2john john openssl evil-winrm bloodhound-python ldapsearch
Easy Windows Active Directory

Support

HackTheBox / Windows Domain Controller

Windows Domain Controller with an anonymously accessible support-tools SMB share. A custom .NET binary on the share contained XOR-encoded LDAP credentials, recovered via monodis IL decompilation and a Python decode script. Authenticated LDAP enumeration found a second account's password stored in the user object's info attribute. BloodHound revealed GenericAll over the DC via group membership, enabling a full RBCD attack using four impacket commands to forge an Administrator Kerberos ticket and dump all domain hashes.

Attack Chain
SMB Anonymoussupport-tools
monodis REXOR LDAP Creds
LDAP DumpInfo Field PW
BloodHoundGenericAll DC$
RBCD + S4UAdmin Ticket
Domain AdminPass the Hash
Initial Access Hardcoded Creds

XOR-Encoded Credentials in Binary

LDAP credentials embedded in UserInfo.exe obfuscated with a two-pass XOR cipher using the static key armando. .NET IL is always recoverable with monodis. Obfuscation is not encryption.

Credential Exposure LDAP

Password in LDAP info Field

Plaintext password stored in the info attribute of the support user object. LDAP attribute fields are visible to all authenticated domain users. A single grep reveals it immediately.

PrivEsc ACL Abuse

GenericAll over DC via Group

The Shared Support Accounts group holds GenericAll over the DC computer object. support is a member. Full computer object control enables RBCD without any group membership change.

Domain RBCD

Resource Based Constrained Delegation

MachineAccountQuota above zero plus GenericAll over DC$ enabled a full RBCD chain: create fake computer, write delegation attribute, forge Administrator Kerberos ticket, dump all domain hashes via secretsdump.

Nmap smbclient monodis ldapsearch evil-winrm bloodhound-python impacket-addcomputer impacket-rbcd impacket-getST impacket-secretsdump
Easy Windows Active Directory

Active

HackTheBox / Windows Domain Controller

Windows Domain Controller running Windows Server 2008 R2. Anonymous SMB access to a non-standard Replication share exposed Groups.xml containing a GPP cpassword. Used gpp-decrypt to recover SVC_TGS : GPPstillStandingStrong2k18, retrieved the user flag via SMB, then used those credentials to Kerberoast the Administrator account. Cracked the TGS hash offline with Hashcat mode 13100, and delivered a SYSTEM shell via impacket-psexec.

Attack Chain
SMB AnonymousReplication Share
Groups.xmlGPP cpassword
gpp-decryptSVC_TGS Creds
KerberoastingAdmin SPN
Hashcat 13100Ticketmaster1968
Domain Adminpsexec SYSTEM
Initial Access SMB

Anonymous SMB Access

Replication share readable without credentials. Non-standard shares exposed to unauthenticated users are always high-priority targets on a Domain Controller.

Credential Exposure MS14-025

GPP Credentials in SYSVOL

Groups.xml in the Replication share contained a cpassword encrypted with Microsoft's published AES key. One command with gpp-decrypt recovered SVC_TGS plaintext credentials.

PrivEsc Kerberos

SPN on Administrator Account

The built-in Administrator account had an SPN registered. Any authenticated domain user can Kerberoast it and crack the TGS hash offline. High-privilege accounts must never hold SPNs.

Domain Hashcat 13100

Weak Administrator Password

Administrator Kerberos TGS hash cracked from rockyou.txt via Hashcat mode 13100. Plaintext credentials used directly with impacket-psexec for a SYSTEM shell.

Nmap smbclient gpp-decrypt impacket-GetUserSPNs Hashcat impacket-psexec Active Directory
Easy Windows Active Directory

Sauna

HackTheBox / Windows Domain Controller

Windows Domain Controller hosting the Egotistical Bank web application. Harvested six employee names from the public-facing website to build a username wordlist, identified fsmith with pre-authentication disabled and captured the AS-REP hash, cracked it offline with Hashcat, then used WinPEAS to find AutoLogon registry credentials for svc_loanmgr. BloodHound confirmed that account held pre-assigned DCSync rights on the domain object. Dumped all domain hashes via impacket-secretsdump and compromised Administrator via Pass the Hash.

Attack Chain
Web OSINT6 Employee Names
AS-REP Roastfsmith
HashcatThestrokes23
WinPEASAutoLogon Creds
DCSyncAll Hashes
Domain AdminPass the Hash
Enum OSINT

Employee Names on Public Web App

Six full employee names listed publicly on the bank website. With RPC null sessions blocked, the web app was the only path to a username wordlist. Names on company websites are always an enumeration target.

Initial Access Kerberos

AS-REP Roasting

fsmith had UF_DONT_REQUIRE_PREAUTH set. AS-REP hash captured unauthenticated and cracked offline with Hashcat mode 18200 against rockyou.txt.

PrivEsc Registry

AutoLogon Credentials in Registry

WinPEAS discovered svc_loanmgr credentials stored in plaintext under HKLM\...\Winlogon\DefaultPassword. AutoLogon credential exposure is a common misconfiguration in Windows environments with service accounts.

Domain ACL Abuse

DCSync Rights Pre-Assigned

svc_loanmgr held GetChanges and GetChangesAll directly on the domain object. No ACL manipulation required. These two rights alone are sufficient to dump every credential in the domain via impacket-secretsdump.

Nmap impacket-GetNPUsers Hashcat evil-winrm WinPEAS BloodHound CE bloodhound-python impacket-secretsdump Active Directory
DFIR 6 Challenges 29/30 Flags

DFIR Challenge Series

Self-Authored / Blog + GitHub

A six-part DFIR investigation of a compromised Linux web server. Each challenge adds a new evidence domain: system logs, RAM dump, packet capture, disk images, malware sample, and final timeline synthesis. 29 of 30 flags captured. Full repository on GitHub with all commands, methodology, and canonical attack timeline.

Challenge 01Log Analysis
Challenge 02Memory Forensics
Challenge 03Network Forensics
Challenge 04Disk Forensics
Challenge 05Malware Triage
Challenge 06Incident Timeline
Volatility3 tshark Wireshark foremost strings Log Analysis Memory Forensics DNS Exfiltration Cobalt Strike Static Analysis Incident Response

More writeups in the pipeline

Documenting every machine rooted on HackTheBox. Write-ups added as completed.

Verified credentials

Core Certifications

Industry-recognised credentials validating expertise in cybersecurity, compliance, and AI governance. Click any badge to verify on Credly.

Continuous learning

Training & Development

Courses, workshops, and hands-on training spanning offensive security, cloud infrastructure, and development. Click any card to view the certificate.

In progress

What's Next

The pipeline is loaded. These sections are actively being built, so check back soon.

Machine Writeups

Step-by-step walkthroughs of HackTheBox machines, documenting exploit chains, methodology, and post-exploitation techniques. Write-ups live: Cap, Forest, Sauna.

HackTheBox CTF Writeups
View Writeups ↑

Security Tools

Custom Python-based offensive and defensive tooling: recon automation, payload generators, SIEM integrations, and network scanning utilities.

Python Automation Red Team Open Source
In Development

Lab Walkthroughs

Structured lab environments covering Active Directory attack chains, network pivoting, malware analysis sandbox walkthroughs, and detection engineering labs.

Active Directory Malware Labs Detection
Planned

Interested in working together?

Whether it's a penetration testing engagement, a security consultation, or a collaboration, I'm ready. Let's talk.