Files
HacktivityLabSheets/index.md
Z. Cliffe Schreuders 6258a58b09 Enhance lab content and layout
- Refactored the lab listing to group labs by unique categories and sort them alphabetically for better organization.
- Added a new CTF challenge titled "Feeling Blu Challenge - Web Security CTF" with comprehensive instructions and resources for penetration testing and privilege escalation.
- Updated the lab layout to include tags for better categorization and improved user navigation.
- Introduced multiple new images to support the new lab content, enhancing visual learning and engagement.
2025-09-29 11:27:48 +01:00

10 KiB

layout, title
layout title
default Hacktivity Lab Sheets

Hacktivity Lab Sheets

Welcome to the Hacktivity SecGen lab sheets repository. This site contains hands-on cybersecurity lab exercises designed for educational purposes.

Available Labs

{% if site.labs.size > 0 %}

{% comment %} Create a collection of all unique categories {% endcomment %} {% assign all_categories = '' | split: '' %} {% for lab in site.labs %} {% if lab.categories %} {% for category in lab.categories %} {% unless all_categories contains category %} {% assign all_categories = all_categories | push: category %} {% endunless %} {% endfor %} {% endif %} {% endfor %}

{% comment %} Sort categories alphabetically {% endcomment %} {% assign sorted_categories = all_categories | sort %}

{% comment %} Display labs grouped by category {% endcomment %} {% for category in sorted_categories %}

{{ category | replace: '_', ' ' | capitalize }}

<div class="category-labs">
  {% for lab in site.labs %}
    {% if lab.categories contains category %}
    <div class="lab-item">
      <h3><a href="{{ lab.url | relative_url }}">{{ lab.title }}</a></h3>
      <p class="lab-description">{{ lab.description | default: lab.excerpt }}</p>
      <div class="lab-meta">
        {% if lab.author %}
          <div class="author">
            <strong>{% if lab.author.first %}Authors:{% else %}Author:{% endif %}</strong> 
            {% if lab.author.first %}
              {% assign author_count = lab.author.size %}
              {% for author in lab.author %}
                {% if forloop.last and author_count > 1 %}and {% endif %}{{ author }}{% unless forloop.last %}, {% endunless %}
              {% endfor %}
            {% else %}
              {{ lab.author }}
            {% endif %}
          </div>
        {% endif %}
        {% if lab.license %}
          <div class="license">
            <strong>License:</strong> {{ lab.license }}
          </div>
        {% endif %}
        {% if lab.cybok %}
          <div class="cybok">
            <strong>CyBOK Knowledge Areas:</strong>
            {% for cybok_item in lab.cybok %}
              <span class="cybok-ka">{{ cybok_item.ka }}: {{ cybok_item.topic }}</span>
            {% endfor %}
          </div>
        {% endif %}
        {% if lab.tags %}
          <div class="tags">
            {% for tag in lab.tags %}
              <span class="tag">{{ tag }}</span>
            {% endfor %}
          </div>
        {% endif %}
      </div>
    </div>
    {% endif %}
  {% endfor %}
</div>

{% endfor %}

{% comment %} Display labs without categories {% endcomment %} {% assign uncategorized_labs = site.labs | where: 'categories', nil %} {% if uncategorized_labs.size > 0 %}

General Labs

{% for lab in uncategorized_labs %}

{{ lab.title }}

{{ lab.description | default: lab.excerpt }}

{% if lab.author %}
{% if lab.author.first %}Authors:{% else %}Author:{% endif %} {% if lab.author.first %} {% assign author_count = lab.author.size %} {% for author in lab.author %} {% if forloop.last and author_count > 1 %}and {% endif %}{{ author }}{% unless forloop.last %}, {% endunless %} {% endfor %} {% else %} {{ lab.author }} {% endif %}
{% endif %} {% if lab.license %}
License: {{ lab.license }}
{% endif %} {% if lab.cybok %}
CyBOK Knowledge Areas: {% for cybok_item in lab.cybok %} {{ cybok_item.ka }}: {{ cybok_item.topic }} {% endfor %}
{% endif %} {% if lab.tags %}
{% for tag in lab.tags %} {{ tag }} {% endfor %}
{% endif %}
{% endfor %}
{% endif %}

{% else %}

No labs are currently available. Labs will be added as they are developed.

Check back soon for new cybersecurity lab exercises!

{% endif %}

About

These lab sheets are designed to provide practical, hands-on experience with various cybersecurity concepts and techniques.

These labs are written to be completed on VMs configured with practical hacking/security challenges.

Visit Hacktivity Cyber Security Labs for a fully configured, cloud-based lab environment

  • No setup required - labs are pre-configured and ready to use
  • Access to virtual machines and all required tools
  • Perfect for students and educators

Option 2: Manual Setup with SecGen

For advanced users who want to build their own lab environment:

  • Use SecGen (Security Scenario Generator) to create vulnerable VMs
  • Requires technical expertise in virtualization and security tools

Contributing

If you'd like to contribute new labs or improvements to existing ones, please see the repository's contribution guidelines.

<script> // Theme toggle functionality document.addEventListener('DOMContentLoaded', function() { const themeToggle = document.getElementById('theme-toggle'); const themeIcon = document.getElementById('theme-icon'); const body = document.body; // Check for saved theme preference or default to dark mode const currentTheme = localStorage.getItem('theme') || 'dark'; body.setAttribute('data-theme', currentTheme); updateThemeIcon(currentTheme); themeToggle.addEventListener('click', function() { const currentTheme = body.getAttribute('data-theme'); const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; body.setAttribute('data-theme', newTheme); localStorage.setItem('theme', newTheme); updateThemeIcon(newTheme); }); function updateThemeIcon(theme) { if (theme === 'dark') { themeIcon.className = 'fas fa-sun'; } else { themeIcon.className = 'fas fa-moon'; } } }); // Process ==highlight== syntax document.addEventListener('DOMContentLoaded', function() { const contentBody = document.querySelector('.lab-list'); if (contentBody) { // Replace specific highlight types first contentBody.innerHTML = contentBody.innerHTML.replace(/==action:\s*([^=]+)==/gi, ' $1'); contentBody.innerHTML = contentBody.innerHTML.replace(/==tip:\s*([^=]+)==/gi, '💡 $1'); contentBody.innerHTML = contentBody.innerHTML.replace(/==hint:\s*([^=]+)==/gi, '💭 $1'); contentBody.innerHTML = contentBody.innerHTML.replace(/==note:\s*([^=]+)==/gi, '$1'); contentBody.innerHTML = contentBody.innerHTML.replace(/==warning:\s*([^=]+)==/gi, '⚠️ $1'); contentBody.innerHTML = contentBody.innerHTML.replace(/==VM:\s*([^=]+)==/gi, '🖥️ $1'); // Replace generic ==text== with text contentBody.innerHTML = contentBody.innerHTML.replace(/==([^=]+)==/g, '$1'); // Replace > TIP: patterns with tip-item divs contentBody.innerHTML = contentBody.innerHTML.replace( /
\s*

\s*Tip:<\/em>\s*([^<]+(?:<[^>]+>[^<]*<\/[^>]+>[^<]*)*)<\/p>\s*<\/blockquote>/gi, '

$1
' ); // Handle > *Tip: ANYTHINGHERE* (entire content in italics) contentBody.innerHTML = contentBody.innerHTML.replace( /
\s*

\s*Tip:\s*([^<]+(?:<[^>]+>[^<]*<\/[^>]+>[^<]*)*)<\/em>\s*<\/p>\s*<\/blockquote>/gi, '

$1
' ); // Also handle > TIP: without italics contentBody.innerHTML = contentBody.innerHTML.replace( /
\s*

\s*Tip:\s*([^<]+(?:<[^>]+>[^<]*<\/[^>]+>[^<]*)*)<\/p>\s*<\/blockquote>/gi, '

$1
' ); // Handle block-level action, warning, note, hint patterns contentBody.innerHTML = contentBody.innerHTML.replace( /
\s*

\s*Action:\s*([^<]+(?:<[^>]+>[^<]*<\/[^>]+>[^<]*)*)<\/p>\s*<\/blockquote>/gi, '

$1
' ); contentBody.innerHTML = contentBody.innerHTML.replace( /
\s*

\s*Warning:\s*([^<]+(?:<[^>]+>[^<]*<\/[^>]+>[^<]*)*)<\/p>\s*<\/blockquote>/gi, '

$1
' ); contentBody.innerHTML = contentBody.innerHTML.replace( /
\s*

\s*Note:\s*([^<]+(?:<[^>]+>[^<]*<\/[^>]+>[^<]*)*)<\/p>\s*<\/blockquote>/gi, '

Note: $1
' ); contentBody.innerHTML = contentBody.innerHTML.replace( /
\s*

\s*Hint:\s*([^<]+(?:<[^>]+>[^<]*<\/[^>]+>[^<]*)*)<\/p>\s*<\/blockquote>/gi, '

Hint: $1
' ); } }); </script>