The lab · VM 301 and VM 302

Kali Red and Blue

This is where I learn what an attack looks like from both sides. Kali Red runs a scoped test, Kali Blue looks for what that test left behind, and I decide what the evidence actually shows. Every test stays inside the isolated LAB_TEST network and on targets I set up for it.

The four walkthroughs below are labelled examples: the hostnames, addresses, accounts, timestamps and outputs are substituted to protect my lab, and nothing here is a live target. Real records are marked where they are used.

Two guests, one isolated test network

VM 301

Kali Red

The attacking side: scans, proxies requests and runs bounded checks against lab targets only.

Stopped when recorded on 8 Nov 2026

VM 302

Kali Blue

The watching side: reads captures, host logs and the SIEM, and writes the analyst notes.

Stopped when recorded on 8 Nov 2026

That state comes from my inventory record and is separate from the exercises below, which are dated walkthroughs with example evidence.

Lab map · substituted names and addresses

VLAN 20 · LAB_TEST 192.0.2.0/24 (example)

  • Kali Red192.0.2.31
  • Kali Blue192.0.2.32
  • shop.lab.example192.0.2.40 · training web app
  • trainbox.lab.example192.0.2.41 · disposable VM

Same VLAN: traffic between these never crosses Sophos.

VLAN 10 · SERVERS 198.51.100.0/24 (example)

  • fs-01.lab.example198.51.100.10 · out of scope
  • ws-02.lab.example198.51.100.22

Domain machines. Evidence flows to the SIEM; Kali Red does not.

Kali Red, Kali Blue and two training targets share VLAN 20. Sophos drops traffic from VLAN 20 to VLAN 10 and to the internet.

Four questions, worked from both sides

Each walkthrough opens with a question I could have asked at the keyboard, then follows the test, the evidence, the obstacle, the fix or decision, and the retest. Pick a step, or press Play to walk through it.

Lab walkthroughExample evidence21 Oct 2026 · times in UTC

I thought the service was down. Was it?

  • Kali Red 192.0.2.31
  • trainbox 192.0.2.41 (in scope)
  • fs-01 198.51.100.10 (out of scope: cross-zone check only)
  • TCP 22, 80, 445, 8080
  1. My first scan went to the file server on SERVERS. Nmap called 445 filtered: it sent SYNs and got nothing back, which can mean a firewall, a dead host or a lost reply.

    Kali Red
    nmap -Pn -sS -p 445 198.51.100.10
    PORT    STATE    SERVICE
    445/tcp filtered microsoft-ds
  2. I captured on the Proxmox host, on the tap interface behind fs-01’s NIC. My first try used the wrong tap; on the right one the capture was still empty, so the SYNs never reached the server.

    Proxmox host · example tap
    tcpdump -ni tap110i0 "tcp port 445 and host 192.0.2.31"
    0 packets captured
    0 packets received by filter
  3. Sophos had the answer: every SYN from Kali Red to SERVERS matched DROP_NEW_VLANS, the first rule in the order. The service was fine; my path was closed by design.

    Sophos log viewer
    filter: src 192.0.2.31, dst 198.51.100.10
    19:02:14  Drop  TCP 192.0.2.31:51544 → 198.51.100.10:445  Rule: DROP_NEW_VLANS
    19:02:15  Drop  TCP 192.0.2.31:51544 → 198.51.100.10:445  Rule: DROP_NEW_VLANS
  4. Opening SERVERS to the lab would have made the scan work and the lab worse. I left the rule alone and retested against trainbox, which sits on VLAN 20 with Kali Red.

  5. On the same VLAN the traffic never crosses Sophos. Nmap now reported open, closed and filtered ports, each for a different reason.

    Kali Red
    nmap -Pn -sS -p 22,80,8080,9000 192.0.2.41
    PORT     STATE    SERVICE
    22/tcp   open     ssh
    80/tcp   open     http
    8080/tcp closed   http-proxy
    9000/tcp filtered cslistener
  6. I read trainbox’s capture in Wireshark on Kali Blue. My first display filter kept only packets from Kali Red, so 8080 looked unanswered. Removing the source condition showed the RST: closed means the host is up and nothing listens.

    Kali Blue · Wireshark
    display filter: tcp.port in {80 8080 9000}
    192.0.2.31 → .41  80   [SYN]
    .41 → 192.0.2.31  80   [SYN, ACK]
    192.0.2.31 → .41  80   [ACK]
    192.0.2.31 → .41  8080 [SYN]
    .41 → 192.0.2.31  8080 [RST, ACK]
    192.0.2.31 → .41  9000 [SYN]   (no reply: host firewall drops it)

What I took from it: A dropped SYN, a reset and a handshake are three different answers. Before I call a service down, I check which one I got, where I captured it, and whether my filter could have hidden the reply.

ATT&CK mapping I added: T1046 Network Service Discovery

Tool index

Every tool named on this page: what it takes in, what it produces, what that output can establish, and whether my records show the tool in use or it appears only in a walkthrough. The first four lead because security-testing roles ask for them: the OTARIS working-student listing for product security and testing names Nmap, Burp Suite, Metasploit and Wireshark.

ToolRoleInputEvidence it producesWhat it can establishShown as
Nmapwalkthrough 1, 4Service discoveryA scoped host and port listPort states and version guessesWhat answered, and how; not why a port is filteredIn a lab walkthrough
Burp Suitewalkthrough 2Web proxy and request replayBrowser traffic to a training appCaptured and replayed requestsHow the server answers one changed variableIn a lab walkthrough
Metasploit Frameworkwalkthrough 4Banner scans and precondition checksA disposable training VMBanner text and check resultsWhether a precondition holds; a banner proves only itselfIn a lab walkthrough
Wiresharkwalkthrough 1Packet analysisA capture fileDecoded TCP exchangesSYN, RST or handshake, if the filter does not hide itIn a lab walkthrough
tcpdumpwalkthrough 1, 4Packet captureOne interface and a capture filterpcap files and live countsWhether packets reached that interfaceIn my records
PowerShellwalkthrough 3Directory cross-checksRead-only AD queriesCurrent group membershipWhat is true now, against a stale graphIn a lab walkthrough
BloodHoundwalkthrough 3AD relationship graphCollected lab-domain dataPaths between users, groups and rightsA hypothesis to verify, as of collection timeIn a lab walkthrough
Windows Event Viewerwalkthrough 3Endpoint evidenceThe Security log on the targetEvent 4625 with logon type and sub statusWhich logon failed, where, and whyIn a lab walkthrough
Sophos logswalkthrough 1Firewall evidenceLog viewer filtersAllow and drop lines with the rule nameWhich rule acted on a flow that crossed SophosIn my records
Wazuhwalkthrough 3Detection and searchAgent eventsAlerts and searchable eventsWhat was collected and which rule matchedReference architecture
SOCFortress CoPilotwalkthrough 3Cases and triageWazuh alertsA case with its evidence and decisionThat fields survived collection, and what was decidedReference architecture
Splunk and Defender for EndpointParallel evidence viewsSelected endpoint dataSPL and KQL resultsWhether a second view agreesIn my records
Proxmox snapshotswalkthrough 4Reset and verifyA disposable VMA restored, known stateThat the next test starts cleanIn a lab walkthrough

Where this connects: Wazuh and CoPilot are the SOCFortress stack (reference architecture); Splunk and Defender for Endpoint are the parallel views in Splunk and Defender side by side; the domain is described in Running Active Directory in my lab.

References: ATT&CK T1046 · ATT&CK T1110.001 · PortSwigger access control · Microsoft event 4625 · OTARIS listing

4 walkthroughs, all labelled examples. Which ones I have run, and with which tools, is kept with my records until I publish the evidence.