From 5a89ce945c8e8a39934d648666c20d1b1a1e8bd8 Mon Sep 17 00:00:00 2001 From: "Z. Cliffe Schreuders" Date: Thu, 4 Dec 2025 14:13:21 +0000 Subject: [PATCH] Update INK best practices and instructor scenarios for influence tracking - Added critical requirements for including `#influence_increased` and `#influence_decreased` tags after modifying influence variables to ensure visual feedback in the game. - Enhanced documentation on best practices for dialogue formatting, emphasizing the importance of avoiding lists and keeping exit conversations brief. - Updated multiple instructor scenarios to include the necessary influence tags, ensuring consistent feedback for player actions. - Corrected room connection direction in scenario.json.erb for improved navigation. --- docs/INK_BEST_PRACTICES.md | 85 +++++++++++++-- scenarios/lab_intro_linux/ink/instructor.ink | 101 ++++++++++++------ scenarios/lab_intro_linux/ink/instructor.json | 2 +- scenarios/lab_intro_linux/scenario.json.erb | 2 +- 4 files changed, 145 insertions(+), 45 deletions(-) diff --git a/docs/INK_BEST_PRACTICES.md b/docs/INK_BEST_PRACTICES.md index 490a567..3c0db41 100644 --- a/docs/INK_BEST_PRACTICES.md +++ b/docs/INK_BEST_PRACTICES.md @@ -702,6 +702,8 @@ sticky { Every NPC can track an **influence** variable representing your relationship with them. When influence changes, Break Escape displays visual feedback to the player. +**CRITICAL REQUIREMENT**: You MUST include `#influence_increased` after every `influence +=` statement and `#influence_decreased` after every `influence -=` statement. These tags are required for the game to display visual feedback to players. This applies regardless of the variable name used (e.g., `influence`, `rapport`, `favour`, `trust`, etc.). + ### Implementation #### 1. Declare the Influence Variable @@ -720,12 +722,14 @@ When the player does something helpful or builds rapport: === help_npc === Thanks for your help! I really appreciate it. ~ influence += 1 -# influence_increased +#influence_increased -> hub ``` **Result**: Displays green popup: **"+ Influence: Agent Carter"** +**CRITICAL**: You MUST include `#influence_increased` immediately after every `influence +=` statement. Without this tag, the game will not display the visual feedback to the player. + #### 3. Decrease Influence (Negative Actions) When the player is rude or makes poor choices: @@ -734,12 +738,14 @@ When the player is rude or makes poor choices: === be_rude === That was uncalled for. I expected better. ~ influence -= 1 -# influence_decreased +#influence_decreased -> hub ``` **Result**: Displays red popup: **"- Influence: Agent Carter"** +**CRITICAL**: You MUST include `#influence_decreased` immediately after every `influence -=` statement. Without this tag, the game will not display the visual feedback to the player. + #### 4. Use Influence for Conditional Content ```ink @@ -775,7 +781,7 @@ Hello. What do you need? + [Offer to help] That would be great, thanks! ~ influence += 2 - # influence_increased + #influence_increased -> hub + [Demand cooperation] @@ -795,12 +801,13 @@ Hello. What do you need? This option only appears when influence >= 5. The breach came from inside the facility. ~ influence += 1 -# influence_increased +#influence_increased -> hub ``` ### Best Practices +- **ALWAYS include influence tags**: Every `influence +=` must be followed by `#influence_increased`, and every `influence -=` must be followed by `#influence_decreased`. This is REQUIRED for the game to display visual feedback to players. - **Use meaningful increments**: ±1 for small actions, ±2-3 for significant choices - **Track thresholds**: Unlock new options at key influence levels (5, 10, 15) - **Show consequences**: Have NPCs react differently based on current influence @@ -809,10 +816,12 @@ The breach came from inside the facility. ### Technical Tags -| Tag | Effect | Popup Color | -|-----|--------|-------------| -| `# influence_increased` | Shows positive relationship change | Green | -| `# influence_decreased` | Shows negative relationship change | Red | +| Tag | Effect | Popup Color | Required? | +|-----|--------|-------------|-----------| +| `#influence_increased` | Shows positive relationship change | Green | **YES** - Must follow every `influence +=` | +| `#influence_decreased` | Shows negative relationship change | Red | **YES** - Must follow every `influence -=` | + +**IMPORTANT**: These tags are NOT optional. They must be included wherever you modify influence variables, regardless of variable name (e.g., `influence`, `rapport`, `favour`, `trust`, etc.). Without these tags, players will not see visual feedback when their relationship with NPCs changes. See `docs/NPC_INFLUENCE.md` for complete documentation. @@ -866,6 +875,66 @@ If you need section headers, use plain text without asterisks. Always fix these warnings before considering your Ink story complete. They can cause runtime errors or unexpected behavior in the game. +### Avoid Lists in Dialogue (Use Sentences Instead) + +**Dialogue is displayed line-by-line to players**, so lists with bullet points create a poor reading experience. Players must click through each list item individually, which feels tedious. + +❌ **WRONG:** +```ink +You've shown you can: +- Navigate Linux systems effectively +- Use SSH for remote access +- Perform security testing with tools like Hydra +- Escalate privileges when needed +``` + +✅ **RIGHT:** +```ink +You've shown you can navigate Linux systems effectively, use SSH for remote access, perform security testing with tools like Hydra, and escalate privileges when needed. +``` + +**Best Practice:** Convert lists to flowing sentences using commas and "and" for the final item. This creates natural, readable dialogue that players can skip through more easily. + +### Keep Exit Conversations Brief + +**Exit conversations should be 1-2 lines maximum** before the `#exit_conversation` tag. Players are trying to leave, so don't make them read through multiple paragraphs. + +❌ **WRONG:** +```ink +=== end_conversation === +Whenever you need a refresher on Linux fundamentals, I'm here. + +You've demonstrated solid understanding and good security awareness. Keep that mindset. + +Now get to that terminal and start practicing. Theory is useful, but hands-on experience is how you actually learn. + +See you in the field, Agent. + +#exit_conversation +``` + +✅ **RIGHT:** +```ink +=== end_conversation === +See you in the field, Agent. + +#exit_conversation +``` + +Or with conditional content: +```ink +=== end_conversation === +{instructor_rapport >= 40: + You've demonstrated solid understanding. See you in the field, Agent. +- else: + See you in the field, Agent. +} + +#exit_conversation +``` + +**Best Practice:** Keep farewell messages short and to the point. Players appreciate quick exits. + ## Common Questions **Q: Should I use `-> END` or hub loop?** diff --git a/scenarios/lab_intro_linux/ink/instructor.ink b/scenarios/lab_intro_linux/ink/instructor.ink index 0265193..0c02d0f 100644 --- a/scenarios/lab_intro_linux/ink/instructor.ink +++ b/scenarios/lab_intro_linux/ink/instructor.ink @@ -123,6 +123,7 @@ What would you like to cover? === linux_basics_intro === ~ linux_basics_discussed = true ~ instructor_rapport += 5 +# influence_increased Excellent starting point. Let me explain why Linux matters for security work. @@ -146,6 +147,7 @@ Linux comes in many "distributions"—different flavors packaged for different p === windows_comparison === ~ instructor_rapport += 8 +# influence_increased Fair question. Windows absolutely has its place—many enterprise environments are Windows-heavy, and you'll need those skills too. @@ -158,10 +160,12 @@ Second, the control. Linux gives you deep system access and transparency. You ca Third, the culture. The security community lives in Linux. Understanding Linux means understanding how other security professionals work, communicate, and share knowledge. ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub === kali_explanation === ~ instructor_rapport += 8 +# influence_increased Kali is essentially a curated arsenal of security tools, all pre-configured and ready to use. @@ -172,6 +176,7 @@ What makes Kali special isn't just the tools, though. It's the integration. Ever Think of it like this: you *could* build your own toolkit from scratch, hunting down each tool individually and figuring out dependencies. Or you could use Kali and get straight to the actual security work. ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub // =========================================== @@ -181,6 +186,7 @@ Think of it like this: you *could* build your own toolkit from scratch, hunting === command_line_skills === ~ command_line_skills_discussed = true ~ instructor_rapport += 5 +# influence_increased Right, let's build your command-line fundamentals. These are skills you'll use every single day in the field. @@ -206,6 +212,7 @@ I'll cover the essential commands: navigating the filesystem, manipulating files === navigation_commands === ~ instructor_rapport += 3 +# influence_increased Navigation is your foundation. Here are the essentials: @@ -221,11 +228,13 @@ Pro tip: pressing Tab autocompletes filenames and commands. Type a few letters, You: What other useful flags does ls have? Great question. "ls -lt" sorts by modification time, newest first. "ls -lh" shows human-readable file sizes. "ls -lR" recursively lists subdirectories. You can combine them: "ls -lhta" shows all files, human-readable sizes, sorted by time. ~ instructor_rapport += 5 + # influence_increased -> command_line_followup * [What about hidden files?] You: What are hidden files? In Linux, files starting with "." are hidden—they don't show up in normal ls output. Configuration files are typically hidden. Use "ls -a" to see them. You'll frequently need to examine hidden config files during security assessments. ~ instructor_rapport += 5 + # influence_increased -> command_line_followup * [Got it] -> command_line_followup @@ -240,6 +249,7 @@ Pro tip: pressing Tab autocompletes filenames and commands. Type a few letters, === file_manipulation === ~ instructor_rapport += 3 +# influence_increased Creating, copying, moving, and viewing files. Bread and butter stuff. @@ -257,11 +267,13 @@ echo - prints text. "echo 'hello world'" displays text. Useful for testing and s You: Cat seems limited for large files... Exactly right. For large files, use less. "less filename" lets you scroll through, search with "/", quit with "q". Much more practical than cat for big files. ~ instructor_rapport += 8 + # influence_increased -> command_line_followup * [What about creating files?] You: How do I create a new empty file? Several ways. "touch filename" creates an empty file. Or redirect output: "echo 'content' > filename" creates a file with content. We'll cover redirection shortly. ~ instructor_rapport += 5 + # influence_increased -> command_line_followup * [Understood] -> command_line_followup @@ -269,6 +281,7 @@ echo - prints text. "echo 'hello world'" displays text. Useful for testing and s === man_pages === ~ man_pages_discussed = true ~ instructor_rapport += 8 +# influence_increased This is possibly the most important skill: learning to teach yourself. @@ -284,11 +297,13 @@ Pro tip: if you're really stuck, try "command --help" for a quick summary. Many You: Can I search across all man pages for a topic? Yes. "man -k keyword" searches all man page descriptions. "apropos keyword" does the same thing. Useful when you know what you want to do but not which command does it. ~ instructor_rapport += 10 + # influence_increased -> command_line_followup * [What if man pages are too dense?] You: Man pages can be pretty technical... True. For beginner-friendly explanations, try "tldr command"—it shows simplified examples. Or search online for "command examples". But learning to parse man pages is a skill worth developing. They're accurate, complete, and always available. ~ instructor_rapport += 8 + # influence_increased -> command_line_followup * [Makes sense] -> command_line_followup @@ -300,6 +315,7 @@ Pro tip: if you're really stuck, try "command --help" for a quick summary. Many === vi_editor_intro === ~ vi_editor_discussed = true ~ instructor_rapport += 5 +# influence_increased Ah, vi. The editor that's been causing both frustration and devotion since 1976. @@ -323,6 +339,7 @@ That's literally everything you need to survive vi. You: Why not just use nano? It seems simpler. Nano is fine for quick edits. But vi is universal and powerful. On hardened systems or embedded devices, vi might be your only option. Plus, once you learn it, vi is dramatically faster. Your call, but I recommend at least learning vi basics. ~ instructor_rapport += 5 + # influence_increased -> vi_editor_followup * [I'll learn the basics] ~ completed_vi_challenge = true @@ -331,6 +348,7 @@ That's literally everything you need to survive vi. === vi_advanced_commands === ~ instructor_rapport += 8 +# influence_increased Want to unlock vi's power? Here are some favorites: @@ -352,6 +370,7 @@ You can combine commands: "d10j" deletes 10 lines down. "c3w" changes next 3 wor Ten minutes with a vi tutorial will make you look like a wizard. It's worth it. ~ instructor_rapport += 10 +# influence_increased -> vi_editor_followup === vi_editor_followup === @@ -365,6 +384,7 @@ Ten minutes with a vi tutorial will make you look like a wizard. It's worth it. === piping_intro === ~ piping_discussed = true ~ instructor_rapport += 5 +# influence_increased Piping is where Linux becomes genuinely powerful. You can chain simple commands together to accomplish complex tasks. @@ -389,6 +409,7 @@ You can chain multiple pipes: cat /etc/passwd, pipe to grep /home/, then pipe to === piping_examples === ~ instructor_rapport += 8 +# influence_increased Here are real-world examples you'll use constantly: @@ -404,10 +425,12 @@ The Unix philosophy: small tools that do one thing well, combined creatively. Pi ~ completed_piping_challenge = true ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub === piping_common_commands === ~ instructor_rapport += 8 +# influence_increased Commands that work brilliantly in pipes: @@ -429,6 +452,7 @@ Learn these, and you can process massive datasets from the command line. ~ completed_piping_challenge = true ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub // =========================================== @@ -438,6 +462,7 @@ Learn these, and you can process massive datasets from the command line. === redirection_intro === ~ redirection_discussed = true ~ instructor_rapport += 5 +# influence_increased Redirection lets you send command output to files or read input from files. @@ -463,6 +488,7 @@ Practical example: "ps aux > processes.txt" saves a snapshot of running processe === redirection_examples === ~ instructor_rapport += 8 +# influence_increased Practical redirection scenarios: @@ -481,10 +507,12 @@ Quick file creation: During security assessments, you'll constantly redirect command output to files for documentation and later analysis. ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub === stderr_redirection === ~ instructor_rapport += 10 +# influence_increased Good catch. There are actually two output streams: stdout (standard output) and stderr (standard error). @@ -501,6 +529,7 @@ To discard output entirely: "command > /dev/null 2>&1" - sends everything to the This is advanced stuff, but incredibly useful when scripting or when you want clean output. ~ instructor_rapport += 10 +# influence_increased -> linux_training_hub // =========================================== @@ -510,6 +539,7 @@ This is advanced stuff, but incredibly useful when scripting or when you want cl === networking_basics === ~ networking_discussed = true ~ instructor_rapport += 5 +# influence_increased Linux networking commands. Essential for understanding network configurations and troubleshooting connectivity. @@ -532,12 +562,14 @@ In our environment, your IP typically starts with "172.22" or "10" - those are p You: How do I discover other systems on the network? Good question, but that's scanning territory. We'll cover tools like nmap in the scanning module. For now, focus on understanding your own network configuration. ~ instructor_rapport += 5 + # influence_increased -> linux_training_hub * [Got it] -> linux_training_hub === network_interfaces === ~ instructor_rapport += 8 +# influence_increased Network interfaces are how your computer connects to networks. Think of them as connection points. @@ -552,10 +584,12 @@ Virtual interfaces - VPNs and containers create virtual interfaces like tun0, ta When you run ifconfig, you see all interfaces, their IP addresses, MAC addresses, and traffic statistics. Essential information for network security assessments. ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub === network_troubleshooting === ~ instructor_rapport += 8 +# influence_increased Basic network troubleshooting steps: @@ -572,6 +606,7 @@ Step 5: Test DNS: "ping google.com" tests name resolution and external connectiv In our lab environment, if you're having issues, usually dhclient fixes it. In the field, troubleshooting can be much more complex. ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub // =========================================== @@ -581,6 +616,7 @@ In our lab environment, if you're having issues, usually dhclient fixes it. In t === kali_intro === ~ kali_intro_discussed = true ~ instructor_rapport += 5 +# influence_increased Kali Linux. Your primary offensive security platform. @@ -601,6 +637,7 @@ Default credentials: username "kali", password "kali". Never use Kali as your pr === kali_tools_overview === ~ instructor_rapport += 8 +# influence_increased Let me give you a taste of what's available: @@ -619,10 +656,12 @@ Forensics: Autopsy, Sleuth Kit, Volatility. Analyzing systems and recovering dat And those are just highlights. Run "ls /usr/bin" to see hundreds more. It's an arsenal. ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub === kali_organization === ~ instructor_rapport += 8 +# influence_increased Kali organizes tools by the penetration testing lifecycle: @@ -639,6 +678,7 @@ The Applications menu mirrors this structure. When you need a tool, think about You'll also quickly learn the handful of tools you use constantly. Nmap, Metasploit, Burp Suite, Wireshark—these become second nature. ~ instructor_rapport += 5 +# influence_increased -> linux_training_hub // =========================================== @@ -648,6 +688,7 @@ You'll also quickly learn the handful of tools you use constantly. Nmap, Metaspl === ssh_intro === ~ ssh_discussed = true ~ instructor_rapport += 5 +# influence_increased SSH - Secure Shell. Encrypted remote access to systems. One of your most critical tools. @@ -678,6 +719,7 @@ SSH replaced older, insecure protocols like Telnet and rlogin, which transmitted === ssh_keys === ~ instructor_rapport += 10 +# influence_increased SSH keys are asymmetric cryptography for authentication. Much more secure than passwords. @@ -694,10 +736,12 @@ Benefits: stronger than passwords, can't be bruteforced, can be passphrase-prote Many organizations require key-based auth and disable password authentication entirely. Learn this workflow. ~ instructor_rapport += 10 +# influence_increased -> ssh_intro === ssh_x_forwarding === ~ instructor_rapport += 8 +# influence_increased X11 forwarding is clever. Linux graphical applications use the X Window System. SSH can tunnel X11 traffic. @@ -710,10 +754,12 @@ Example: "kate" opens the text editor, running on the remote system but displayi Warning: some latency over networks. And it does expose some security risks—only use on trusted connections. ~ instructor_rapport += 5 +# influence_increased -> ssh_intro === ssh_fingerprints === ~ instructor_rapport += 10 +# influence_increased Excellent security awareness. SSH uses host key fingerprints to prevent man-in-the-middle attacks. @@ -728,6 +774,7 @@ If the fingerprint changes unexpectedly, that's a warning sign. Could be a man-i Most people skip this check. Don't be most people. Especially in adversarial security contexts. ~ instructor_rapport += 10 +# influence_increased -> ssh_intro === ssh_to_hydra_transition === @@ -741,6 +788,7 @@ Now you're thinking like a penetration tester. Let's talk about attacking SSH. === hydra_intro === ~ hydra_discussed = true ~ instructor_rapport += 5 +# influence_increased Hydra. THC-Hydra, to be specific. A parallelized login cracker supporting numerous protocols. @@ -768,6 +816,7 @@ Supports dozens of protocols: SSH, FTP, HTTP, RDP, SMB, databases, and more. If === hydra_wordlists === ~ instructor_rapport += 10 +# influence_increased Wordlists are the fuel for Hydra. Collections of common passwords to test. @@ -785,10 +834,12 @@ Real-world advice: online attacks are slow and noisy. They generate logs. They t ~ completed_hydra_challenge = true ~ instructor_rapport += 10 +# influence_increased -> linux_training_hub === hydra_speed === ~ instructor_rapport += 8 +# influence_increased Speed depends on many factors: network latency, server response time, number of parallel connections. @@ -803,10 +854,12 @@ Compare to offline cracking (like hashcat on GPUs), which can test billions of p Strategic implication: online attacks work best when you have good intelligence. If you know username is "admin" and password is probably from a short list of defaults, Hydra excels. Blind bruteforce against random accounts? Impractical. ~ instructor_rapport += 8 +# influence_increased -> linux_training_hub === hydra_ethics === ~ instructor_rapport += 10 +# influence_increased Critical question. Shows good judgment. @@ -821,6 +874,7 @@ In the real world: Never, ever use these tools against systems without written a The skills you're learning are powerful. Use them responsibly. With authorization. Within the law. That's not optional—it's core to professional security work. ~ instructor_rapport += 15 +# influence_increased -> linux_training_hub // =========================================== @@ -829,6 +883,7 @@ The skills you're learning are powerful. Use them responsibly. With authorizatio === commands_reference === ~ instructor_rapport += 5 +# influence_increased Here's your essential commands quick reference: @@ -877,33 +932,17 @@ Security Tools: === challenge_tips === ~ instructor_rapport += 5 +# influence_increased Practical tips for the hands-on challenges: -For SSH practice: -- Verify fingerprints before accepting -- Try both regular SSH and -X flag for X forwarding -- Use "exit" or Ctrl-D to disconnect -- Check "who" command to see who else is connected +For SSH practice, verify fingerprints before accepting, try both regular SSH and the -X flag for X forwarding, use "exit" or Ctrl-D to disconnect, and check the "who" command to see who else is connected. -For Hydra attacks: -- Start with small, targeted wordlists from /usr/share/wordlists/seclists/Passwords/Common-Credentials/ -- Use -t 4 for reasonable parallel connections -- Be patient—online attacks are slow -- Watch for successful login messages -- Remember to actually SSH in once you crack credentials +For Hydra attacks, start with small, targeted wordlists from /usr/share/wordlists/seclists/Passwords/Common-Credentials/. Use -t 4 for reasonable parallel connections. Be patient—online attacks are slow. Watch for successful login messages and remember to actually SSH in once you crack credentials. -For finding flags: -- Navigate to user home directories -- Use "cat" to read files -- Remember "sudo" lets you act as root (if you have permission) -- Check file permissions with "ls -la" +For finding flags, navigate to user home directories, use "cat" to read files, remember "sudo" lets you act as root if you have permission, and check file permissions with "ls -la". -General advice: -- Use Tab completion to save typing -- Use up arrow to recall previous commands -- If stuck, check man pages -- Take notes on what works +General advice: use Tab completion to save typing, use the up arrow to recall previous commands, check man pages if stuck, and take notes on what works. + [Back to main menu] -> linux_training_hub @@ -914,6 +953,7 @@ General advice: === ready_for_practice === ~ instructor_rapport += 5 +# influence_increased Excellent. You've covered the fundamentals. @@ -949,16 +989,12 @@ Good luck, Agent. You've got this. === end_session === -Whenever you need a refresher on Linux fundamentals, I'm here. - {instructor_rapport >= 40: - You've demonstrated solid understanding and good security awareness. Keep that mindset. + You've demonstrated solid understanding and good security awareness. See you in the field, Agent. +- else: + See you in the field, Agent. } -Now get to that terminal and start practicing. Theory is useful, but hands-on experience is how you actually learn. - -See you in the field, Agent. - #exit_conversation -> linux_training_hub @@ -968,16 +1004,11 @@ See you in the field, Agent. === flags_completed_congrats === ~ instructor_rapport += 10 +# influence_increased Excellent work, {player_name}! You've successfully completed all the VM lab exercises and captured all the flags. That demonstrates real competence with Linux security fundamentals. -You've shown you can: -- Navigate Linux systems effectively -- Use SSH for remote access -- Perform security testing with tools like Hydra -- Escalate privileges when needed - -These are essential skills for field operations. +You've shown you can navigate Linux systems effectively, use SSH for remote access, perform security testing with tools like Hydra, and escalate privileges when needed. These are essential skills for field operations. I have an optional challenge for you, if you're interested. There's a lockpicking practice room. It's completely optional, but it's a useful field skill to learn. diff --git a/scenarios/lab_intro_linux/ink/instructor.json b/scenarios/lab_intro_linux/ink/instructor.json index 5a59656..b7da337 100644 --- a/scenarios/lab_intro_linux/ink/instructor.json +++ b/scenarios/lab_intro_linux/ink/instructor.json @@ -1 +1 @@ -{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["ev",0,"/ev",{"VAR=":"instructor_rapport","re":true},"^Welcome back, ","ev",{"VAR?":"player_name"},"out","/ev","^. What would you like to discuss?","\n",{"->":"linux_training_hub"},null],"intro_timed":["ev",0,"/ev",{"VAR=":"instructor_rapport","re":true},"^Welcome to Linux Fundamentals and Security, ","ev",{"VAR?":"player_name"},"out","/ev","^. I'm your technical instructor for this session.","\n","^This lab covers essential Linux command-line skills, remote administration via SSH, and basic penetration testing techniques. All crucial skills for field operations.","\n","^Let me explain how this lab works. You'll find three key resources here:","\n","^First, there's a Lab Sheet Workstation in this room. This gives you access to detailed written instructions and exercises that complement our conversation. Use it to follow along with the material.","\n","^Second, in the VM lab room to the north, you'll find terminals to launch virtual machines. You'll work with both a Kali Linux attacker machine and a vulnerable desktop system for hands-on practice.","\n","^Finally, there's a Flag Submission Terminal where you'll submit flags you capture during the exercises. These flags demonstrate that you've successfully completed the challenges.","\n","^You can talk to me anytime to explore Linux concepts, get tips, or ask questions about the material. I'm here to help guide your learning.","\n","^Ready to get started? Feel free to ask me about any topic, or head to the lab sheet workstation and VM room when you're ready to begin the practical exercises.","\n",{"->":"linux_training_hub"},null],"linux_training_hub":[["^What would you like to cover?","\n","ev","str","^Learn about Linux basics and why it matters","/str",{"VAR?":"linux_basics_discussed"},"!","/ev",{"*":".^.c-0","flg":5},"ev","str","^Essential command-line skills","/str",{"VAR?":"command_line_skills_discussed"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^Learn the vi editor","/str",{"VAR?":"vi_editor_discussed"},"!","/ev",{"*":".^.c-2","flg":5},"ev","str","^Piping between programs","/str",{"VAR?":"piping_discussed"},"!","/ev",{"*":".^.c-3","flg":5},"ev","str","^Redirecting input and output","/str",{"VAR?":"redirection_discussed"},"!","/ev",{"*":".^.c-4","flg":5},"ev","str","^Basic Linux networking","/str",{"VAR?":"networking_discussed"},"!","/ev",{"*":".^.c-5","flg":5},"ev","str","^Introduction to Kali Linux","/str",{"VAR?":"kali_intro_discussed"},"!","/ev",{"*":".^.c-6","flg":5},"ev","str","^Remote shell access with SSH","/str",{"VAR?":"ssh_discussed"},"!","/ev",{"*":".^.c-7","flg":5},"ev","str","^Attacking SSH with Hydra","/str",{"VAR?":"hydra_discussed"},"!","/ev",{"*":".^.c-8","flg":5},"ev","str","^Show me the essential commands reference","/str",{"VAR?":"linux_basics_discussed"},{"VAR?":"command_line_skills_discussed"},"&&","/ev",{"*":".^.c-9","flg":5},"ev","str","^Tips for the hands-on challenges","/str",{"VAR?":"ssh_discussed"},{"VAR?":"hydra_discussed"},"||","/ev",{"*":".^.c-10","flg":5},"ev","str","^I'm ready to start the practical exercises","/str","/ev",{"*":".^.c-11","flg":4},"ev","str","^That's all I need for now","/str","/ev",{"*":".^.c-12","flg":4},{"c-0":["\n",{"->":"linux_basics_intro"},null],"c-1":["\n",{"->":"command_line_skills"},null],"c-2":["\n",{"->":"vi_editor_intro"},null],"c-3":["\n",{"->":"piping_intro"},null],"c-4":["\n",{"->":"redirection_intro"},null],"c-5":["\n",{"->":"networking_basics"},null],"c-6":["\n",{"->":"kali_intro"},null],"c-7":["\n",{"->":"ssh_intro"},null],"c-8":["\n",{"->":"hydra_intro"},null],"c-9":["\n",{"->":"commands_reference"},null],"c-10":["\n",{"->":"challenge_tips"},null],"c-11":["\n",{"->":"ready_for_practice"},null],"c-12":["\n",{"->":"end_session"},null]}],null],"linux_basics_intro":[["ev",true,"/ev",{"VAR=":"linux_basics_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Excellent starting point. Let me explain why Linux matters for security work.","\n","^Linux is the backbone of modern internet infrastructure. Google, Facebook, Amazon—they all run Linux servers at massive scale. When you're conducting penetration tests or investigating security incidents, you'll encounter Linux systems constantly.","\n","^More importantly for us, the best security tools are Linux-native. Kali Linux contains hundreds of specialized tools for penetration testing, forensics, and security analysis. Mastering Linux means mastering your toolkit.","\n","^Linux comes in many \"distributions\"—different flavors packaged for different purposes. Ubuntu for ease of use, Debian for stability, Kali for security testing. They all share the same core commands and concepts, so learning one helps you understand them all.","\n","ev","str","^Why not just use Windows?","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What makes Kali special?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Got it, let's move on","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"VAR?":"deep_dives_completed"},1,"+",{"VAR=":"deep_dives_completed","re":true},"/ev","^You: Why can't we just use Windows for security work?","\n",{"->":"windows_comparison"},{"#f":5}],"c-1":["\n","ev",{"VAR?":"deep_dives_completed"},1,"+",{"VAR=":"deep_dives_completed","re":true},"/ev","^You: What specifically makes Kali Linux the industry standard?","\n",{"->":"kali_explanation"},{"#f":5}],"c-2":["\n","^You: Understood. Linux is essential for security work.","\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"windows_comparison":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Fair question. Windows absolutely has its place—many enterprise environments are Windows-heavy, and you'll need those skills too.","\n","^But for offensive security work, Linux has three major advantages:","\n","^First, the tools. Most cutting-edge security research happens in the open-source community, and those tools are Linux-first. Sure, some get ported to Windows eventually, but you'll always be behind the curve.","\n","^Second, the control. Linux gives you deep system access and transparency. You can see exactly what's happening, modify anything, and automate everything. That level of control is crucial when you're trying to exploit systems or analyze malware.","\n","^Third, the culture. The security community lives in Linux. Understanding Linux means understanding how other security professionals work, communicate, and share knowledge.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"kali_explanation":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Kali is essentially a curated arsenal of security tools, all pre-configured and ready to use.","\n","^Offensive Security—the company behind Kali—maintains hundreds of tools across every category: information gathering, vulnerability analysis, wireless attacks, exploitation, post-exploitation, forensics, you name it.","\n","^What makes Kali special isn't just the tools, though. It's the integration. Everything works together. The tools are kept up-to-date. Documentation is solid. And it's become the lingua franca of penetration testing—when security professionals share techniques, they assume you're using Kali.","\n","^Think of it like this: you *could* build your own toolkit from scratch, hunting down each tool individually and figuring out dependencies. Or you could use Kali and get straight to the actual security work.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"command_line_skills":[["ev",true,"/ev",{"VAR=":"command_line_skills_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Right, let's build your command-line fundamentals. These are skills you'll use every single day in the field.","\n","^The command line might seem archaic compared to graphical interfaces, but it's exponentially more powerful. You can automate tasks, chain commands together, work on remote systems, and handle massive datasets—all from a simple text interface.","\n","^I'll cover the essential commands: navigating the filesystem, manipulating files and directories, viewing content, and getting help when you're stuck.","\n","ev","str","^Show me the navigation commands","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How do I work with files?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^How do I get help when stuck?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^I want to see the full command reference","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"pwd_ls_discussed","re":true},"^You: How do I navigate the filesystem?","\n",{"->":"navigation_commands"},{"#f":5}],"c-1":["\n","ev",true,"/ev",{"VAR=":"file_manipulation_discussed","re":true},"^You: What about creating and editing files?","\n",{"->":"file_manipulation"},{"#f":5}],"c-2":["\n","ev",true,"/ev",{"VAR=":"man_pages_discussed","re":true},"^You: What if I don't know what a command does?","\n",{"->":"man_pages"},{"#f":5}],"c-3":["\n","^You: Can I see a complete list of essential commands?","\n",{"->":"commands_reference"},{"#f":5}]}],null],"navigation_commands":[["ev",{"VAR?":"instructor_rapport"},3,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Navigation is your foundation. Here are the essentials:","\n","^pwd - \"print working directory\". Shows exactly where you are in the filesystem. Lost? Run pwd.","\n","^ls - lists files in your current directory. Add \"-la\" for detailed information including hidden files and permissions. You'll use \"ls -la\" constantly.","\n","^cd - \"change directory\". Moves you around the filesystem. \"cd ..\" goes up one level, \"cd\" alone takes you home.","\n","^Pro tip: pressing Tab autocompletes filenames and commands. Type a few letters, hit Tab, save yourself endless typing. And use the up arrow to cycle through previous commands.","\n","ev","str","^Tell me more about ls flags","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What about hidden files?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Got it","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: What other useful flags does ls have?","\n","^Great question. \"ls -lt\" sorts by modification time, newest first. \"ls -lh\" shows human-readable file sizes. \"ls -lR\" recursively lists subdirectories. You can combine them: \"ls -lhta\" shows all files, human-readable sizes, sorted by time.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"command_line_followup"},{"#f":5}],"c-1":["\n","^You: What are hidden files?","\n","^In Linux, files starting with \".\" are hidden—they don't show up in normal ls output. Configuration files are typically hidden. Use \"ls -a\" to see them. You'll frequently need to examine hidden config files during security assessments.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"command_line_followup"},{"#f":5}],"c-2":["\n",{"->":"command_line_followup"},{"#f":5}]}],null],"command_line_followup":[["ev","str","^Show me file manipulation commands","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^How do I get help when stuck?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Back to the main menu","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"file_manipulation"},null],"c-1":["\n",{"->":"man_pages"},null],"c-2":["\n",{"->":"linux_training_hub"},null]}],null],"file_manipulation":[["ev",{"VAR?":"instructor_rapport"},3,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Creating, copying, moving, and viewing files. Bread and butter stuff.","\n","^mkdir - creates directories. \"mkdir mydir\" creates a new folder.","\n","^cp - copies files. \"cp source destination\" copies a file. Add \"-r\" for recursive directory copying.","\n","^mv - moves or renames files. \"mv oldname newname\" renames. \"mv file /path/to/destination/\" moves it.","\n","^cat - dumps file contents to the screen. \"cat filename\" shows the whole file.","\n","^echo - prints text. \"echo 'hello world'\" displays text. Useful for testing and scripting.","\n","ev","str","^Tell me more about viewing files","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What about creating files?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Understood","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: Cat seems limited for large files...","\n","^Exactly right. For large files, use less. \"less filename\" lets you scroll through, search with \"/\", quit with \"q\". Much more practical than cat for big files.","\n","ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"command_line_followup"},{"#f":5}],"c-1":["\n","^You: How do I create a new empty file?","\n","^Several ways. \"touch filename\" creates an empty file. Or redirect output: \"echo 'content' > filename\" creates a file with content. We'll cover redirection shortly.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"command_line_followup"},{"#f":5}],"c-2":["\n",{"->":"command_line_followup"},{"#f":5}]}],null],"man_pages":[["ev",true,"/ev",{"VAR=":"man_pages_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^This is possibly the most important skill: learning to teach yourself.","\n","^man - the manual pages. \"man command\" shows comprehensive documentation for any command. Navigation: space to page down, \"b\" to page up, \"/\" to search, \"q\" to quit.","\n","^Example: \"man ls\" shows every flag and option for ls. The man pages are detailed, sometimes overwhelming, but they're authoritative.","\n","^Alternative: info command provides similar documentation, sometimes more detailed.","\n","^Pro tip: if you're really stuck, try \"command --help\" for a quick summary. Many tools also have online documentation, but man pages are always available, even when you're offline on a compromised system with no internet.","\n","ev","str","^How do I search man pages?","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What if man pages are too dense?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Makes sense","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: Can I search across all man pages for a topic?","\n","^Yes. \"man -k keyword\" searches all man page descriptions. \"apropos keyword\" does the same thing. Useful when you know what you want to do but not which command does it.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"command_line_followup"},{"#f":5}],"c-1":["\n","^You: Man pages can be pretty technical...","\n","^True. For beginner-friendly explanations, try \"tldr command\"—it shows simplified examples. Or search online for \"command examples\". But learning to parse man pages is a skill worth developing. They're accurate, complete, and always available.","\n","ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"command_line_followup"},{"#f":5}],"c-2":["\n",{"->":"command_line_followup"},{"#f":5}]}],null],"vi_editor_intro":[["ev",true,"/ev",{"VAR=":"vi_editor_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Ah, vi. The editor that's been causing both frustration and devotion since 1976.","\n","^Here's why you need to know vi: it's on *every* Unix and Linux system. When you SSH into a compromised server with minimal tools, vi will be there. Other editors might not be.","\n","^Vi is modal. Two main modes: normal mode for commands, insert mode for typing text.","\n","^The essentials:","\n",["^\"vi filename\" opens or creates a file","\n",["^Press \"i\" to enter insert mode (now you can type)","\n",["^Press Esc to return to normal mode","\n",["^In normal mode: \":wq\" writes and quits, \":q!\" quits without saving","\n","^That's literally everything you need to survive vi.","\n","ev","str","^Tell me more about normal mode commands","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Why not use nano or another editor?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^I'll learn the basics","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"VAR?":"deep_dives_completed"},1,"+",{"VAR=":"deep_dives_completed","re":true},"/ev","^You: What else can I do in normal mode?","\n",{"->":"vi_advanced_commands"},{"#f":5}],"c-1":["\n","^You: Why not just use nano? It seems simpler.","\n","^Nano is fine for quick edits. But vi is universal and powerful. On hardened systems or embedded devices, vi might be your only option. Plus, once you learn it, vi is dramatically faster. Your call, but I recommend at least learning vi basics.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"vi_editor_followup"},{"#f":5}],"c-2":["\n","ev",true,"/ev",{"VAR=":"completed_vi_challenge","re":true},"^You: Got it. I'll practice the essential commands.","\n",{"->":"vi_editor_followup"},{"#f":5}],"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"vi_advanced_commands":[["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Want to unlock vi's power? Here are some favorites:","\n","^Navigation in normal mode:","\n",["^\"h\" \"j\" \"k\" \"l\" move cursor left, down, up, right","\n",["^\"w\" jumps forward by word, \"b\" jumps back","\n",["^\"gg\" jumps to start of file, \"G\" jumps to end","\n","^Editing in normal mode:","\n",["^\"dd\" deletes current line","\n",["^\"30dd\" deletes 30 lines","\n",["^\"yy\" copies (yanks) current line","\n",["^\"p\" pastes","\n",["^\"u\" undo","\n",["^\"/\" searches, \"n\" finds next match","\n","^You can combine commands: \"d10j\" deletes 10 lines down. \"c3w\" changes next 3 words.","\n","^Ten minutes with a vi tutorial will make you look like a wizard. It's worth it.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"vi_editor_followup"},{"#n":"g-8"}],{"#n":"g-7"}],{"#n":"g-6"}],{"#n":"g-5"}],{"#n":"g-4"}],{"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"vi_editor_followup":[["ev","str","^Back to main menu","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"linux_training_hub"},null]}],null],"piping_intro":[["ev",true,"/ev",{"VAR=":"piping_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Piping is where Linux becomes genuinely powerful. You can chain simple commands together to accomplish complex tasks.","\n","^The pipe operator sends the output of one command to the input of another.","\n","^Example command: cat /etc/passwd, then pipe to grep /home/","\n","^This reads the passwd file and filters it to only lines containing \"/home/\". Two simple commands, combined to do something useful.","\n","^You can chain multiple pipes: cat /etc/passwd, pipe to grep /home/, then pipe to sort -r. Now it's filtered *and* sorted in reverse.","\n","ev","str","^Show me more examples","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What commands work well with pipes?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^I've got the concept","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"piping_examples_discussed","re":true},"^You: What are some practical piping examples?","\n",{"->":"piping_examples"},{"#f":5}],"c-1":["\n","^You: Which commands are commonly piped together?","\n",{"->":"piping_common_commands"},{"#f":5}],"c-2":["\n","ev",true,"/ev",{"VAR=":"completed_piping_challenge","re":true},{"->":"linux_training_hub"},{"#f":5}]}],null],"piping_examples":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Here are real-world examples you'll use constantly:","\n","^Finding running processes: Command: ps aux, pipe to grep ssh. This lists all processes and filters for SSH-related ones.","\n","^Analyzing logs: Command: cat logfile, pipe to grep ERROR, pipe to sort, pipe to uniq -c, pipe to sort -nr. This finds errors, sorts them, counts unique occurrences, sorts by frequency. One line, powerful analysis.","\n","^Network analysis: Command: netstat -an, pipe to grep ESTABLISHED. This shows active network connections.","\n","^Counting things: Command: ls, pipe to wc -l. This counts files in current directory.","\n","^The Unix philosophy: small tools that do one thing well, combined creatively. Piping is how you combine them.","\n","ev",true,"/ev",{"VAR=":"completed_piping_challenge","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"piping_common_commands":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Commands that work brilliantly in pipes:","\n","^grep - filters lines matching a pattern. Your most-used pipe command.","\n","^sort - sorts lines alphabetically. \"-n\" for numeric sort, \"-r\" for reverse.","\n","^uniq - removes duplicate adjacent lines. Usually used after sort. \"-c\" counts occurrences.","\n","^head and tail - show first or last N lines. \"head -20\" shows first 20 lines.","\n","^wc - word count. \"-l\" counts lines, \"-w\" counts words, \"-c\" counts characters.","\n","^cut - extracts columns from text. \"cut -d: -f1\" splits on colons, takes first field.","\n","^awk and sed - powerful text processing. More advanced, but incredibly useful.","\n","^Learn these, and you can process massive datasets from the command line.","\n","ev",true,"/ev",{"VAR=":"completed_piping_challenge","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"redirection_intro":[["ev",true,"/ev",{"VAR=":"redirection_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Redirection lets you send command output to files or read input from files.","\n","^Three key operators:","\n","^greater than > - redirects output to a file, overwriting it. \"ls > filelist.txt\" saves directory listing to a file.","\n","^append >> - redirects output to a file, appending. \"echo 'new line' >> file.txt\" adds to the end.","\n","^less than < - reads input from a file. \"wc -l < file.txt\" counts lines in the file.","\n","^Practical example: \"ps aux > processes.txt\" saves a snapshot of running processes for analysis.","\n","ev","str","^Show me more redirection examples","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What about error messages?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Understood","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"redirection_examples_discussed","re":true},"^You: What are some practical redirection scenarios?","\n",{"->":"redirection_examples"},{"#f":5}],"c-1":["\n","^You: Can I redirect error messages too?","\n",{"->":"stderr_redirection"},{"#f":5}],"c-2":["\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"redirection_examples":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Practical redirection scenarios:","\n","^Saving command output for later:","\n","^\"ifconfig > network_config.txt\" - captures network configuration.","\n","^Building logs:","\n","^\"echo '$(date): Scan completed' >> scan_log.txt\" - appends timestamped entries.","\n","^Combining with pipes:","\n","^Command: cat /etc/passwd, pipe to grep /home/, redirect to users.txt. This filters and saves results.","\n","^Quick file creation:","\n","^\"echo 'test content' > test.txt\" - creates a file with content in one command.","\n","^During security assessments, you'll constantly redirect command output to files for documentation and later analysis.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"stderr_redirection":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Good catch. There are actually two output streams: stdout (standard output) and stderr (standard error).","\n","^By default, \">\" only redirects stdout. Error messages still appear on screen.","\n","^To redirect stderr: \"command 2> errors.txt\"","\n","^To redirect both: \"command > output.txt 2>&1\" - sends stderr to stdout, which goes to the file.","\n","^Or in modern Bash: \"command &> output.txt\" does the same thing more simply.","\n","^To discard output entirely: \"command > /dev/null 2>&1\" - sends everything to the void.","\n","^This is advanced stuff, but incredibly useful when scripting or when you want clean output.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"networking_basics":[["ev",true,"/ev",{"VAR=":"networking_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Linux networking commands. Essential for understanding network configurations and troubleshooting connectivity.","\n","^ifconfig - the classic command to view network interfaces and IP addresses. Shows all your network adapters.","\n","^ip - the modern replacement. \"ip a s\" (ip address show) does the same thing. You'll see both used in the field.","\n","^hostname -I - quick way to display just your IP address.","\n","^In our environment, your IP typically starts with \"172.22\" or \"10\" - those are private network ranges.","\n","ev","str","^Tell me more about network interfaces","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How do I troubleshoot network issues?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^What about finding other machines?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^Got it","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"ifconfig_discussed","re":true},"^You: What are network interfaces exactly?","\n",{"->":"network_interfaces"},{"#f":5}],"c-1":["\n","^You: What if my network isn't working?","\n",{"->":"network_troubleshooting"},{"#f":5}],"c-2":["\n","^You: How do I discover other systems on the network?","\n","^Good question, but that's scanning territory. We'll cover tools like nmap in the scanning module. For now, focus on understanding your own network configuration.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},{"#f":5}],"c-3":["\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"network_interfaces":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Network interfaces are how your computer connects to networks. Think of them as connection points.","\n","^eth0, eth1 - Ethernet interfaces. Physical network ports.","\n","^wlan0 - Wireless interface. WiFi adapter.","\n","^lo - Loopback interface, always 127.0.0.1. Your computer talking to itself. Useful for testing.","\n","^Virtual interfaces - VPNs and containers create virtual interfaces like tun0, tap0, docker0.","\n","^When you run ifconfig, you see all interfaces, their IP addresses, MAC addresses, and traffic statistics. Essential information for network security assessments.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"network_troubleshooting":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Basic network troubleshooting steps:","\n","^Step 1: Check interface status with \"ifconfig\" or \"ip a s\". Is the interface up? Does it have an IP?","\n","^Step 2: If no IP, try \"dhclient eth0\" to request one from DHCP server.","\n","^Step 3: Test local connectivity: \"ping 127.0.0.1\" tests your network stack.","\n","^Step 4: Test gateway: \"ping your_gateway_ip\" tests local network.","\n","^Step 5: Test DNS: \"ping google.com\" tests name resolution and external connectivity.","\n","^In our lab environment, if you're having issues, usually dhclient fixes it. In the field, troubleshooting can be much more complex.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"kali_intro":[["ev",true,"/ev",{"VAR=":"kali_intro_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Kali Linux. Your primary offensive security platform.","\n","^Released by Offensive Security in 2013 as the successor to BackTrack Linux. It's specifically designed for penetration testing, security auditing, and digital forensics.","\n","^Kali includes hundreds of pre-installed tools organized by category: information gathering, vulnerability analysis, wireless attacks, web applications, exploitation tools, password attacks, forensics, and more.","\n","^Default credentials: username \"kali\", password \"kali\". Never use Kali as your primary OS—it's designed for security testing, not everyday computing.","\n","ev","str","^Show me what tools are available","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How is Kali organized?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Sounds powerful","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: What kinds of tools are we talking about?","\n",{"->":"kali_tools_overview"},{"#f":5}],"c-1":["\n","^You: How do I find the right tool for a task?","\n",{"->":"kali_organization"},{"#f":5}],"c-2":["\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"kali_tools_overview":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Let me give you a taste of what's available:","\n","^Information Gathering: nmap, dnsenum, whois, recon-ng. Tools for mapping networks and gathering intelligence.","\n","^Vulnerability Analysis: Nessus, OpenVAS, nikto. Automated scanners that identify security weaknesses.","\n","^Exploitation: Metasploit Framework, BeEF, sqlmap. Tools for actively exploiting vulnerabilities.","\n","^Password Attacks: Hydra, John the Ripper, hashcat. Cracking and bruteforcing credentials.","\n","^Wireless Attacks: Aircrack-ng, Reaver, Wifite. WiFi security testing.","\n","^Forensics: Autopsy, Sleuth Kit, Volatility. Analyzing systems and recovering data.","\n","^And those are just highlights. Run \"ls /usr/bin\" to see hundreds more. It's an arsenal.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"kali_organization":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Kali organizes tools by the penetration testing lifecycle:","\n","^Phase 1 - Information Gathering: Passive and active reconnaissance. Learning about your target.","\n","^Phase 2 - Vulnerability Analysis: Identifying weaknesses in systems and applications.","\n","^Phase 3 - Exploitation: Actually compromising systems using identified vulnerabilities.","\n","^Phase 4 - Post-Exploitation: What you do after gaining access. Maintaining access, pivoting, data exfiltration.","\n","^The Applications menu mirrors this structure. When you need a tool, think about which phase you're in, and browse that category.","\n","^You'll also quickly learn the handful of tools you use constantly. Nmap, Metasploit, Burp Suite, Wireshark—these become second nature.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"ssh_intro":[["ev",true,"/ev",{"VAR=":"ssh_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^SSH - Secure Shell. Encrypted remote access to systems. One of your most critical tools.","\n","^SSH lets you securely connect to remote Linux systems and execute commands as if you were sitting at that machine. All traffic is encrypted, protecting against eavesdropping.","\n","^Basic usage: \"ssh username@ip_address\"","\n","^The server typically listens on port 22. When you connect, you authenticate (usually with password or key), and then you have a remote shell.","\n","^SSH replaced older, insecure protocols like Telnet and rlogin, which transmitted passwords in cleartext. Never use those—always use SSH.","\n","ev","str","^Tell me about SSH keys","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What's X11 forwarding?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^How do I verify I'm connecting to the right server?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^Let's talk about attacking SSH","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^Got the basics","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["\n","^You: What about SSH key authentication?","\n",{"->":"ssh_keys"},{"#f":5}],"c-1":["\n","ev",true,"/ev",{"VAR=":"ssh_x_forwarding_discussed","re":true},"^You: I saw something about -X flag for forwarding?","\n",{"->":"ssh_x_forwarding"},{"#f":5}],"c-2":["\n","^You: How do I know I'm not being man-in-the-middled?","\n",{"->":"ssh_fingerprints"},{"#f":5}],"c-3":["\n","^You: How do we test SSH security?","\n",{"->":"ssh_to_hydra_transition"},{"#f":5}],"c-4":["\n","ev",true,"/ev",{"VAR=":"completed_ssh_challenge","re":true},{"->":"linux_training_hub"},{"#f":5}]}],null],"ssh_keys":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^SSH keys are asymmetric cryptography for authentication. Much more secure than passwords.","\n","^You generate a key pair: a private key (keep secret) and public key (share freely).","\n","^Generate keys: \"ssh-keygen -t rsa -b 4096\"","\n","^Copy public key to server: \"ssh-copy-id user@server\"","\n","^Now you can SSH without typing passwords. The private key proves your identity.","\n","^Benefits: stronger than passwords, can't be bruteforced, can be passphrase-protected, can be revoked per-server.","\n","^Many organizations require key-based auth and disable password authentication entirely. Learn this workflow.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"ssh_intro"},null],"ssh_x_forwarding":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^X11 forwarding is clever. Linux graphical applications use the X Window System. SSH can tunnel X11 traffic.","\n","^Connect with: \"ssh -X user@server\"","\n","^Now you can run graphical programs on the remote server, but see them on your local screen. The program runs remotely, but displays locally.","\n","^Example: \"kate\" opens the text editor, running on the remote system but displaying on yours. Useful for accessing GUI tools remotely.","\n","^Warning: some latency over networks. And it does expose some security risks—only use on trusted connections.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"ssh_intro"},null],"ssh_fingerprints":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Excellent security awareness. SSH uses host key fingerprints to prevent man-in-the-middle attacks.","\n","^When you first connect, SSH shows the server's fingerprint. You should verify this matches the real server before accepting.","\n","^On the server, check fingerprint: \"ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub\"","\n","^If the fingerprint matches what SSH showed you, type \"yes\". SSH remembers this and will warn if it changes later.","\n","^If the fingerprint changes unexpectedly, that's a warning sign. Could be a man-in-the-middle attack, or could be the server was rebuilt. Investigate before proceeding.","\n","^Most people skip this check. Don't be most people. Especially in adversarial security contexts.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"ssh_intro"},null],"ssh_to_hydra_transition":["^Now you're thinking like a penetration tester. Let's talk about attacking SSH.","\n",{"->":"hydra_intro"},null],"hydra_intro":[["ev",true,"/ev",{"VAR=":"hydra_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Hydra. THC-Hydra, to be specific. A parallelized login cracker supporting numerous protocols.","\n","^Hydra performs online bruteforce attacks—it actually tries to log in with username/password combinations. Different from offline attacks where you crack hashed passwords.","\n","^Basic usage: \"hydra -l username -p password target ssh\"","\n","^Tests a single username/password combo. But Hydra's power is testing many combinations from wordlists.","\n","^Supports dozens of protocols: SSH, FTP, HTTP, RDP, SMB, databases, and more. If it accepts login credentials, Hydra can probably attack it.","\n","ev","str","^How do I use wordlists?","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How fast is Hydra?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^What are the legal/ethical considerations?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^I'm ready to try it","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"bruteforce_basics_discussed","re":true},"^You: How do I test multiple passwords?","\n",{"->":"hydra_wordlists"},{"#f":5}],"c-1":["\n","^You: How quickly can it crack passwords?","\n",{"->":"hydra_speed"},{"#f":5}],"c-2":["\n","^You: Is this legal to use?","\n",{"->":"hydra_ethics"},{"#f":5}],"c-3":["\n","ev",true,"/ev",{"VAR=":"completed_hydra_challenge","re":true},{"->":"linux_training_hub"},{"#f":5}]}],null],"hydra_wordlists":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Wordlists are the fuel for Hydra. Collections of common passwords to test.","\n","^Usage: \"hydra -l username -P /path/to/wordlist.txt target ssh\"","\n","^Capital -P for password list, lowercase -l for single username. Or use -L for username list too.","\n","^Kali includes wordlists: \"ls /usr/share/wordlists/seclists/Passwords/\"","\n","^Choosing the right wordlist is critical. A wordlist with 10 million passwords might take days for online attacks. Start with smaller, curated lists of common passwords.","\n","^For SSH specifically, \"Common-Credentials\" lists work well. They contain default passwords and common weak passwords.","\n","^Real-world advice: online attacks are slow and noisy. They generate logs. They trigger intrusion detection. Use them strategically, not as your first approach.","\n","ev",true,"/ev",{"VAR=":"completed_hydra_challenge","re":true},"ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"hydra_speed":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Speed depends on many factors: network latency, server response time, number of parallel connections.","\n","^Hydra's \"-t\" flag controls parallel tasks. \"hydra -t 4\" uses 4 parallel connections.","\n","^More isn't always better. Too many parallel connections can crash services or trigger rate limiting. For SSH, 4-16 threads is usually reasonable.","\n","^Realistic expectations: online SSH bruteforce might test 10-50 passwords per second. Against a wordlist with 10,000 passwords, that's several minutes at best.","\n","^Compare to offline cracking (like hashcat on GPUs), which can test billions of passwords per second. Online attacks are fundamentally slower.","\n","^Strategic implication: online attacks work best when you have good intelligence. If you know username is \"admin\" and password is probably from a short list of defaults, Hydra excels. Blind bruteforce against random accounts? Impractical.","\n","ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"hydra_ethics":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Critical question. Shows good judgment.","\n","^Legal status: Hydra itself is legal to possess and use in authorized security testing. Unauthorized use against systems you don't own or have explicit permission to test? That's computer fraud. Felony-level crime in most jurisdictions.","\n","^In this training: You're attacking lab systems we control, with explicit permission. This is legal and ethical training.","\n","^In SAFETYNET operations: You'll have authorization for your targets. Still legally gray area, but covered by classified operational authorities.","\n","^In the real world: Never, ever use these tools against systems without written authorization. Penetration testers get contracts. Bug bounty hunters follow program rules. Hobbyists practice in their own isolated labs.","\n","^The skills you're learning are powerful. Use them responsibly. With authorization. Within the law. That's not optional—it's core to professional security work.","\n","ev",{"VAR?":"instructor_rapport"},15,"+",{"VAR=":"instructor_rapport","re":true},"/ev",{"->":"linux_training_hub"},null],"commands_reference":[["ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Here's your essential commands quick reference:","\n","^Navigation:","\n",["^pwd (print working directory)","\n",["^ls, ls -la (list files, detailed)","\n",["^cd directory (change directory)","\n",["^cd .. (up one level), cd (home)","\n","^File Operations:","\n",["^mkdir (make directory)","\n",["^cp source dest (copy), cp -r (recursive)","\n",["^mv old new (move/rename)","\n",["^cat filename (display file)","\n",["^less filename (scrollable view)","\n",["^echo \"text\" (print text)","\n","^Getting Help:","\n",["^man command (manual page)","\n",["^info command (info page)","\n",["^command --help (quick help)","\n","^Text Processing:","\n",["^grep pattern (filter lines)","\n",["^sort (sort lines)","\n",["^uniq (remove duplicates)","\n",["^head, tail (first/last lines)","\n",["^wc -l (count lines)","\n","^Networking:","\n",["^ifconfig, ip a s (show interfaces)","\n",["^hostname -I (show IP)","\n",["^ssh user@host (remote shell)","\n",["^ssh -X user@host (X11 forwarding)","\n","^Security Tools:","\n",["^hydra -l user -p pass target ssh (test SSH login)","\n",["^hydra -l user -P wordlist target ssh (bruteforce SSH)","\n","ev","str","^Back to main menu","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"linux_training_hub"},null],"#n":"g-23"}],{"#n":"g-22"}],{"#n":"g-21"}],{"#n":"g-20"}],{"#n":"g-19"}],{"#n":"g-18"}],{"#n":"g-17"}],{"#n":"g-16"}],{"#n":"g-15"}],{"#n":"g-14"}],{"#n":"g-13"}],{"#n":"g-12"}],{"#n":"g-11"}],{"#n":"g-10"}],{"#n":"g-9"}],{"#n":"g-8"}],{"#n":"g-7"}],{"#n":"g-6"}],{"#n":"g-5"}],{"#n":"g-4"}],{"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"challenge_tips":[["ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Practical tips for the hands-on challenges:","\n","^For SSH practice:","\n",["^Verify fingerprints before accepting","\n",["^Try both regular SSH and -X flag for X forwarding","\n",["^Use \"exit\" or Ctrl-D to disconnect","\n",["^Check \"who\" command to see who else is connected","\n","^For Hydra attacks:","\n",["^Start with small, targeted wordlists from /usr/share/wordlists/seclists/Passwords/Common-Credentials/","\n",["^Use -t 4 for reasonable parallel connections","\n",["^Be patient—online attacks are slow","\n",["^Watch for successful login messages","\n",["^Remember to actually SSH in once you crack credentials","\n","^For finding flags:","\n",["^Navigate to user home directories","\n",["^Use \"cat\" to read files","\n",["^Remember \"sudo\" lets you act as root (if you have permission)","\n",["^Check file permissions with \"ls -la\"","\n","^General advice:","\n",["^Use Tab completion to save typing","\n",["^Use up arrow to recall previous commands","\n",["^If stuck, check man pages","\n",["^Take notes on what works","\n","ev","str","^Back to main menu","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"linux_training_hub"},null],"#n":"g-16"}],{"#n":"g-15"}],{"#n":"g-14"}],{"#n":"g-13"}],{"#n":"g-12"}],{"#n":"g-11"}],{"#n":"g-10"}],{"#n":"g-9"}],{"#n":"g-8"}],{"#n":"g-7"}],{"#n":"g-6"}],{"#n":"g-5"}],{"#n":"g-4"}],{"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"ready_for_practice":["ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Excellent. You've covered the fundamentals.","\n","ev",{"VAR?":"command_line_skills_discussed"},{"VAR?":"piping_discussed"},"&&",{"VAR?":"redirection_discussed"},"&&",{"VAR?":"ssh_discussed"},"&&",{"VAR?":"hydra_discussed"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^You've reviewed all the core material. You should be well-prepared for the practical exercises.","\n",{"->":".^.^.^.21"},null]}],[{"->":".^.b"},{"b":["\n","^You might want to review the topics you haven't covered yet, but you've got enough to start.","\n",{"->":".^.^.^.21"},null]}],"nop","\n","^Remember: the best way to learn Linux is by doing. Read the challenges, try commands, make mistakes, figure out fixes. That's how you build real competence.","\n","^Practical objectives:","\n","^1. Practice basic command-line navigation and file manipulation","\n","^2. Edit files with vi","\n","^3. Use piping and redirection","\n","^4. SSH between systems","\n","^5. Use Hydra to crack weak SSH credentials","\n","^6. Capture flags from compromised accounts","\n","^The lab environment is yours to experiment in. Break things. It's a safe space for learning.","\n","ev",{"VAR?":"instructor_rapport"},50,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^You've asked great questions and engaged deeply with the material. That's exactly the right approach. You're going to do well.","\n",{"->":".^.^.^.47"},null]}],"nop","\n","^Good luck, Agent. You've got this.","\n",{"->":"end_session"},null],"end_session":["^Whenever you need a refresher on Linux fundamentals, I'm here.","\n","ev",{"VAR?":"instructor_rapport"},40,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^You've demonstrated solid understanding and good security awareness. Keep that mindset.","\n",{"->":".^.^.^.8"},null]}],"nop","\n","^Now get to that terminal and start practicing. Theory is useful, but hands-on experience is how you actually learn.","\n","^See you in the field, Agent.","\n","#","^exit_conversation","/#",{"->":"linux_training_hub"},null],"flags_completed_congrats":[["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","^Excellent work, ","ev",{"VAR?":"player_name"},"out","/ev","^! You've successfully completed all the VM lab exercises and captured all the flags. That demonstrates real competence with Linux security fundamentals.","\n","^You've shown you can:","\n",["^Navigate Linux systems effectively","\n",["^Use SSH for remote access","\n",["^Perform security testing with tools like Hydra","\n",["^Escalate privileges when needed","\n","^These are essential skills for field operations.","\n","^I have an optional challenge for you, if you're interested. There's a lockpicking practice room to the east. It's completely optional, but it's a useful field skill to learn.","\n","ev",{"VAR?":"has_key"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Here's the key to the lockpicking practice room. The locksmith inside can teach you the basics.","\n","ev",true,"/ev",{"VAR=":"lockpicking_key_received","re":true},"#","^give_item:key","/#","#","^unlock_aim:learn_lockpicking","/#","#","^unlock_task:talk_to_locksmith","/#","^Good luck! It's a valuable skill to have.","\n",{"->":".^.^.^.11"},null]}],[{"->":".^.b"},{"b":["\n","^I see you already have the key. Feel free to explore the lockpicking practice room if you're interested.","\n","ev",{"VAR?":"lockpicking_key_received"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","ev",true,"/ev",{"VAR=":"lockpicking_key_received","re":true},"#","^unlock_aim:learn_lockpicking","/#","#","^unlock_task:talk_to_locksmith","/#",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":".^.^.^.11"},null]}],"nop","\n",{"->":"flags_completed_followup"},{"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"flags_completed_followup":[["ev","str","^Tell me more about lockpicking","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Back to main menu","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^That's all I need","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Lockpicking is a physical security skill. In the field, you'll encounter locked doors, safes, and containers. Being able to pick locks gives you access without keys or forced entry.","\n","^The locksmith in the practice room can teach you the fundamentals: applying tension with a wrench, and picking pins in binding order. It takes practice, but it's a skill worth learning.","\n",{"->":".^.^.^"},null],"c-1":["\n",{"->":"linux_training_hub"},null],"c-2":["\n",{"->":"end_session"},null]}],null],"global decl":["ev",false,{"VAR=":"linux_basics_discussed"},false,{"VAR=":"command_line_skills_discussed"},false,{"VAR=":"vi_editor_discussed"},false,{"VAR=":"piping_discussed"},false,{"VAR=":"redirection_discussed"},false,{"VAR=":"networking_discussed"},false,{"VAR=":"ssh_discussed"},false,{"VAR=":"hydra_discussed"},false,{"VAR=":"kali_intro_discussed"},false,{"VAR=":"pwd_ls_discussed"},false,{"VAR=":"file_manipulation_discussed"},false,{"VAR=":"man_pages_discussed"},false,{"VAR=":"piping_examples_discussed"},false,{"VAR=":"redirection_examples_discussed"},false,{"VAR=":"ifconfig_discussed"},false,{"VAR=":"ssh_basics_discussed"},false,{"VAR=":"ssh_x_forwarding_discussed"},false,{"VAR=":"bruteforce_basics_discussed"},false,{"VAR=":"completed_vi_challenge"},false,{"VAR=":"completed_piping_challenge"},false,{"VAR=":"completed_ssh_challenge"},false,{"VAR=":"completed_hydra_challenge"},0,{"VAR=":"instructor_rapport"},0,{"VAR=":"deep_dives_completed"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},false,{"VAR=":"lockpicking_key_received"},false,{"VAR=":"has_key"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file +{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["ev",0,"/ev",{"VAR=":"instructor_rapport","re":true},"^Welcome back, ","ev",{"VAR?":"player_name"},"out","/ev","^. What would you like to discuss?","\n",{"->":"linux_training_hub"},null],"intro_timed":["ev",0,"/ev",{"VAR=":"instructor_rapport","re":true},"^Welcome to Linux Fundamentals and Security, ","ev",{"VAR?":"player_name"},"out","/ev","^. I'm your technical instructor for this session.","\n","^This lab covers essential Linux command-line skills, remote administration via SSH, and basic penetration testing techniques. All crucial skills for field operations.","\n","^Let me explain how this lab works. You'll find three key resources here:","\n","^First, there's a Lab Sheet Workstation in this room. This gives you access to detailed written instructions and exercises that complement our conversation. Use it to follow along with the material.","\n","^Second, in the VM lab room to the north, you'll find terminals to launch virtual machines. You'll work with both a Kali Linux attacker machine and a vulnerable desktop system for hands-on practice.","\n","^Finally, there's a Flag Submission Terminal where you'll submit flags you capture during the exercises. These flags demonstrate that you've successfully completed the challenges.","\n","^You can talk to me anytime to explore Linux concepts, get tips, or ask questions about the material. I'm here to help guide your learning.","\n","^Ready to get started? Feel free to ask me about any topic, or head to the lab sheet workstation and VM room when you're ready to begin the practical exercises.","\n",{"->":"linux_training_hub"},null],"linux_training_hub":[["^What would you like to cover?","\n","ev","str","^Learn about Linux basics and why it matters","/str",{"VAR?":"linux_basics_discussed"},"!","/ev",{"*":".^.c-0","flg":5},"ev","str","^Essential command-line skills","/str",{"VAR?":"command_line_skills_discussed"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^Learn the vi editor","/str",{"VAR?":"vi_editor_discussed"},"!","/ev",{"*":".^.c-2","flg":5},"ev","str","^Piping between programs","/str",{"VAR?":"piping_discussed"},"!","/ev",{"*":".^.c-3","flg":5},"ev","str","^Redirecting input and output","/str",{"VAR?":"redirection_discussed"},"!","/ev",{"*":".^.c-4","flg":5},"ev","str","^Basic Linux networking","/str",{"VAR?":"networking_discussed"},"!","/ev",{"*":".^.c-5","flg":5},"ev","str","^Introduction to Kali Linux","/str",{"VAR?":"kali_intro_discussed"},"!","/ev",{"*":".^.c-6","flg":5},"ev","str","^Remote shell access with SSH","/str",{"VAR?":"ssh_discussed"},"!","/ev",{"*":".^.c-7","flg":5},"ev","str","^Attacking SSH with Hydra","/str",{"VAR?":"hydra_discussed"},"!","/ev",{"*":".^.c-8","flg":5},"ev","str","^Show me the essential commands reference","/str",{"VAR?":"linux_basics_discussed"},{"VAR?":"command_line_skills_discussed"},"&&","/ev",{"*":".^.c-9","flg":5},"ev","str","^Tips for the hands-on challenges","/str",{"VAR?":"ssh_discussed"},{"VAR?":"hydra_discussed"},"||","/ev",{"*":".^.c-10","flg":5},"ev","str","^I'm ready to start the practical exercises","/str","/ev",{"*":".^.c-11","flg":4},"ev","str","^That's all I need for now","/str","/ev",{"*":".^.c-12","flg":4},{"c-0":["\n",{"->":"linux_basics_intro"},null],"c-1":["\n",{"->":"command_line_skills"},null],"c-2":["\n",{"->":"vi_editor_intro"},null],"c-3":["\n",{"->":"piping_intro"},null],"c-4":["\n",{"->":"redirection_intro"},null],"c-5":["\n",{"->":"networking_basics"},null],"c-6":["\n",{"->":"kali_intro"},null],"c-7":["\n",{"->":"ssh_intro"},null],"c-8":["\n",{"->":"hydra_intro"},null],"c-9":["\n",{"->":"commands_reference"},null],"c-10":["\n",{"->":"challenge_tips"},null],"c-11":["\n",{"->":"ready_for_practice"},null],"c-12":["\n",{"->":"end_session"},null]}],null],"linux_basics_intro":[["ev",true,"/ev",{"VAR=":"linux_basics_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Excellent starting point. Let me explain why Linux matters for security work.","\n","^Linux is the backbone of modern internet infrastructure. Google, Facebook, Amazon—they all run Linux servers at massive scale. When you're conducting penetration tests or investigating security incidents, you'll encounter Linux systems constantly.","\n","^More importantly for us, the best security tools are Linux-native. Kali Linux contains hundreds of specialized tools for penetration testing, forensics, and security analysis. Mastering Linux means mastering your toolkit.","\n","^Linux comes in many \"distributions\"—different flavors packaged for different purposes. Ubuntu for ease of use, Debian for stability, Kali for security testing. They all share the same core commands and concepts, so learning one helps you understand them all.","\n","ev","str","^Why not just use Windows?","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What makes Kali special?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Got it, let's move on","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"VAR?":"deep_dives_completed"},1,"+",{"VAR=":"deep_dives_completed","re":true},"/ev","^You: Why can't we just use Windows for security work?","\n",{"->":"windows_comparison"},{"#f":5}],"c-1":["\n","ev",{"VAR?":"deep_dives_completed"},1,"+",{"VAR=":"deep_dives_completed","re":true},"/ev","^You: What specifically makes Kali Linux the industry standard?","\n",{"->":"kali_explanation"},{"#f":5}],"c-2":["\n","^You: Understood. Linux is essential for security work.","\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"windows_comparison":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Fair question. Windows absolutely has its place—many enterprise environments are Windows-heavy, and you'll need those skills too.","\n","^But for offensive security work, Linux has three major advantages:","\n","^First, the tools. Most cutting-edge security research happens in the open-source community, and those tools are Linux-first. Sure, some get ported to Windows eventually, but you'll always be behind the curve.","\n","^Second, the control. Linux gives you deep system access and transparency. You can see exactly what's happening, modify anything, and automate everything. That level of control is crucial when you're trying to exploit systems or analyze malware.","\n","^Third, the culture. The security community lives in Linux. Understanding Linux means understanding how other security professionals work, communicate, and share knowledge.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"kali_explanation":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Kali is essentially a curated arsenal of security tools, all pre-configured and ready to use.","\n","^Offensive Security—the company behind Kali—maintains hundreds of tools across every category: information gathering, vulnerability analysis, wireless attacks, exploitation, post-exploitation, forensics, you name it.","\n","^What makes Kali special isn't just the tools, though. It's the integration. Everything works together. The tools are kept up-to-date. Documentation is solid. And it's become the lingua franca of penetration testing—when security professionals share techniques, they assume you're using Kali.","\n","^Think of it like this: you *could* build your own toolkit from scratch, hunting down each tool individually and figuring out dependencies. Or you could use Kali and get straight to the actual security work.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"command_line_skills":[["ev",true,"/ev",{"VAR=":"command_line_skills_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Right, let's build your command-line fundamentals. These are skills you'll use every single day in the field.","\n","^The command line might seem archaic compared to graphical interfaces, but it's exponentially more powerful. You can automate tasks, chain commands together, work on remote systems, and handle massive datasets—all from a simple text interface.","\n","^I'll cover the essential commands: navigating the filesystem, manipulating files and directories, viewing content, and getting help when you're stuck.","\n","ev","str","^Show me the navigation commands","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How do I work with files?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^How do I get help when stuck?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^I want to see the full command reference","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"pwd_ls_discussed","re":true},"^You: How do I navigate the filesystem?","\n",{"->":"navigation_commands"},{"#f":5}],"c-1":["\n","ev",true,"/ev",{"VAR=":"file_manipulation_discussed","re":true},"^You: What about creating and editing files?","\n",{"->":"file_manipulation"},{"#f":5}],"c-2":["\n","ev",true,"/ev",{"VAR=":"man_pages_discussed","re":true},"^You: What if I don't know what a command does?","\n",{"->":"man_pages"},{"#f":5}],"c-3":["\n","^You: Can I see a complete list of essential commands?","\n",{"->":"commands_reference"},{"#f":5}]}],null],"navigation_commands":[["ev",{"VAR?":"instructor_rapport"},3,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Navigation is your foundation. Here are the essentials:","\n","^pwd - \"print working directory\". Shows exactly where you are in the filesystem. Lost? Run pwd.","\n","^ls - lists files in your current directory. Add \"-la\" for detailed information including hidden files and permissions. You'll use \"ls -la\" constantly.","\n","^cd - \"change directory\". Moves you around the filesystem. \"cd ..\" goes up one level, \"cd\" alone takes you home.","\n","^Pro tip: pressing Tab autocompletes filenames and commands. Type a few letters, hit Tab, save yourself endless typing. And use the up arrow to cycle through previous commands.","\n","ev","str","^Tell me more about ls flags","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What about hidden files?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Got it","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: What other useful flags does ls have?","\n","^Great question. \"ls -lt\" sorts by modification time, newest first. \"ls -lh\" shows human-readable file sizes. \"ls -lR\" recursively lists subdirectories. You can combine them: \"ls -lhta\" shows all files, human-readable sizes, sorted by time.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"command_line_followup"},{"#f":5}],"c-1":["\n","^You: What are hidden files?","\n","^In Linux, files starting with \".\" are hidden—they don't show up in normal ls output. Configuration files are typically hidden. Use \"ls -a\" to see them. You'll frequently need to examine hidden config files during security assessments.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"command_line_followup"},{"#f":5}],"c-2":["\n",{"->":"command_line_followup"},{"#f":5}]}],null],"command_line_followup":[["ev","str","^Show me file manipulation commands","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^How do I get help when stuck?","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^Back to the main menu","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n",{"->":"file_manipulation"},null],"c-1":["\n",{"->":"man_pages"},null],"c-2":["\n",{"->":"linux_training_hub"},null]}],null],"file_manipulation":[["ev",{"VAR?":"instructor_rapport"},3,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Creating, copying, moving, and viewing files. Bread and butter stuff.","\n","^mkdir - creates directories. \"mkdir mydir\" creates a new folder.","\n","^cp - copies files. \"cp source destination\" copies a file. Add \"-r\" for recursive directory copying.","\n","^mv - moves or renames files. \"mv oldname newname\" renames. \"mv file /path/to/destination/\" moves it.","\n","^cat - dumps file contents to the screen. \"cat filename\" shows the whole file.","\n","^echo - prints text. \"echo 'hello world'\" displays text. Useful for testing and scripting.","\n","ev","str","^Tell me more about viewing files","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What about creating files?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Understood","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: Cat seems limited for large files...","\n","^Exactly right. For large files, use less. \"less filename\" lets you scroll through, search with \"/\", quit with \"q\". Much more practical than cat for big files.","\n","ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"command_line_followup"},{"#f":5}],"c-1":["\n","^You: How do I create a new empty file?","\n","^Several ways. \"touch filename\" creates an empty file. Or redirect output: \"echo 'content' > filename\" creates a file with content. We'll cover redirection shortly.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"command_line_followup"},{"#f":5}],"c-2":["\n",{"->":"command_line_followup"},{"#f":5}]}],null],"man_pages":[["ev",true,"/ev",{"VAR=":"man_pages_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^This is possibly the most important skill: learning to teach yourself.","\n","^man - the manual pages. \"man command\" shows comprehensive documentation for any command. Navigation: space to page down, \"b\" to page up, \"/\" to search, \"q\" to quit.","\n","^Example: \"man ls\" shows every flag and option for ls. The man pages are detailed, sometimes overwhelming, but they're authoritative.","\n","^Alternative: info command provides similar documentation, sometimes more detailed.","\n","^Pro tip: if you're really stuck, try \"command --help\" for a quick summary. Many tools also have online documentation, but man pages are always available, even when you're offline on a compromised system with no internet.","\n","ev","str","^How do I search man pages?","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What if man pages are too dense?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Makes sense","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: Can I search across all man pages for a topic?","\n","^Yes. \"man -k keyword\" searches all man page descriptions. \"apropos keyword\" does the same thing. Useful when you know what you want to do but not which command does it.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"command_line_followup"},{"#f":5}],"c-1":["\n","^You: Man pages can be pretty technical...","\n","^True. For beginner-friendly explanations, try \"tldr command\"—it shows simplified examples. Or search online for \"command examples\". But learning to parse man pages is a skill worth developing. They're accurate, complete, and always available.","\n","ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"command_line_followup"},{"#f":5}],"c-2":["\n",{"->":"command_line_followup"},{"#f":5}]}],null],"vi_editor_intro":[["ev",true,"/ev",{"VAR=":"vi_editor_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Ah, vi. The editor that's been causing both frustration and devotion since 1976.","\n","^Here's why you need to know vi: it's on *every* Unix and Linux system. When you SSH into a compromised server with minimal tools, vi will be there. Other editors might not be.","\n","^Vi is modal. Two main modes: normal mode for commands, insert mode for typing text.","\n","^The essentials:","\n",["^\"vi filename\" opens or creates a file","\n",["^Press \"i\" to enter insert mode (now you can type)","\n",["^Press Esc to return to normal mode","\n",["^In normal mode: \":wq\" writes and quits, \":q!\" quits without saving","\n","^That's literally everything you need to survive vi.","\n","ev","str","^Tell me more about normal mode commands","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Why not use nano or another editor?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^I'll learn the basics","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",{"VAR?":"deep_dives_completed"},1,"+",{"VAR=":"deep_dives_completed","re":true},"/ev","^You: What else can I do in normal mode?","\n",{"->":"vi_advanced_commands"},{"#f":5}],"c-1":["\n","^You: Why not just use nano? It seems simpler.","\n","^Nano is fine for quick edits. But vi is universal and powerful. On hardened systems or embedded devices, vi might be your only option. Plus, once you learn it, vi is dramatically faster. Your call, but I recommend at least learning vi basics.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"vi_editor_followup"},{"#f":5}],"c-2":["\n","ev",true,"/ev",{"VAR=":"completed_vi_challenge","re":true},"^You: Got it. I'll practice the essential commands.","\n",{"->":"vi_editor_followup"},{"#f":5}],"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"vi_advanced_commands":[["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Want to unlock vi's power? Here are some favorites:","\n","^Navigation in normal mode:","\n",["^\"h\" \"j\" \"k\" \"l\" move cursor left, down, up, right","\n",["^\"w\" jumps forward by word, \"b\" jumps back","\n",["^\"gg\" jumps to start of file, \"G\" jumps to end","\n","^Editing in normal mode:","\n",["^\"dd\" deletes current line","\n",["^\"30dd\" deletes 30 lines","\n",["^\"yy\" copies (yanks) current line","\n",["^\"p\" pastes","\n",["^\"u\" undo","\n",["^\"/\" searches, \"n\" finds next match","\n","^You can combine commands: \"d10j\" deletes 10 lines down. \"c3w\" changes next 3 words.","\n","^Ten minutes with a vi tutorial will make you look like a wizard. It's worth it.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"vi_editor_followup"},{"#n":"g-8"}],{"#n":"g-7"}],{"#n":"g-6"}],{"#n":"g-5"}],{"#n":"g-4"}],{"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"vi_editor_followup":[["ev","str","^Back to main menu","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"linux_training_hub"},null]}],null],"piping_intro":[["ev",true,"/ev",{"VAR=":"piping_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Piping is where Linux becomes genuinely powerful. You can chain simple commands together to accomplish complex tasks.","\n","^The pipe operator sends the output of one command to the input of another.","\n","^Example command: cat /etc/passwd, then pipe to grep /home/","\n","^This reads the passwd file and filters it to only lines containing \"/home/\". Two simple commands, combined to do something useful.","\n","^You can chain multiple pipes: cat /etc/passwd, pipe to grep /home/, then pipe to sort -r. Now it's filtered *and* sorted in reverse.","\n","ev","str","^Show me more examples","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What commands work well with pipes?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^I've got the concept","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"piping_examples_discussed","re":true},"^You: What are some practical piping examples?","\n",{"->":"piping_examples"},{"#f":5}],"c-1":["\n","^You: Which commands are commonly piped together?","\n",{"->":"piping_common_commands"},{"#f":5}],"c-2":["\n","ev",true,"/ev",{"VAR=":"completed_piping_challenge","re":true},{"->":"linux_training_hub"},{"#f":5}]}],null],"piping_examples":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Here are real-world examples you'll use constantly:","\n","^Finding running processes: Command: ps aux, pipe to grep ssh. This lists all processes and filters for SSH-related ones.","\n","^Analyzing logs: Command: cat logfile, pipe to grep ERROR, pipe to sort, pipe to uniq -c, pipe to sort -nr. This finds errors, sorts them, counts unique occurrences, sorts by frequency. One line, powerful analysis.","\n","^Network analysis: Command: netstat -an, pipe to grep ESTABLISHED. This shows active network connections.","\n","^Counting things: Command: ls, pipe to wc -l. This counts files in current directory.","\n","^The Unix philosophy: small tools that do one thing well, combined creatively. Piping is how you combine them.","\n","ev",true,"/ev",{"VAR=":"completed_piping_challenge","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"piping_common_commands":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Commands that work brilliantly in pipes:","\n","^grep - filters lines matching a pattern. Your most-used pipe command.","\n","^sort - sorts lines alphabetically. \"-n\" for numeric sort, \"-r\" for reverse.","\n","^uniq - removes duplicate adjacent lines. Usually used after sort. \"-c\" counts occurrences.","\n","^head and tail - show first or last N lines. \"head -20\" shows first 20 lines.","\n","^wc - word count. \"-l\" counts lines, \"-w\" counts words, \"-c\" counts characters.","\n","^cut - extracts columns from text. \"cut -d: -f1\" splits on colons, takes first field.","\n","^awk and sed - powerful text processing. More advanced, but incredibly useful.","\n","^Learn these, and you can process massive datasets from the command line.","\n","ev",true,"/ev",{"VAR=":"completed_piping_challenge","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"redirection_intro":[["ev",true,"/ev",{"VAR=":"redirection_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Redirection lets you send command output to files or read input from files.","\n","^Three key operators:","\n","^greater than > - redirects output to a file, overwriting it. \"ls > filelist.txt\" saves directory listing to a file.","\n","^append >> - redirects output to a file, appending. \"echo 'new line' >> file.txt\" adds to the end.","\n","^less than < - reads input from a file. \"wc -l < file.txt\" counts lines in the file.","\n","^Practical example: \"ps aux > processes.txt\" saves a snapshot of running processes for analysis.","\n","ev","str","^Show me more redirection examples","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What about error messages?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Understood","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"redirection_examples_discussed","re":true},"^You: What are some practical redirection scenarios?","\n",{"->":"redirection_examples"},{"#f":5}],"c-1":["\n","^You: Can I redirect error messages too?","\n",{"->":"stderr_redirection"},{"#f":5}],"c-2":["\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"redirection_examples":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Practical redirection scenarios:","\n","^Saving command output for later:","\n","^\"ifconfig > network_config.txt\" - captures network configuration.","\n","^Building logs:","\n","^\"echo '$(date): Scan completed' >> scan_log.txt\" - appends timestamped entries.","\n","^Combining with pipes:","\n","^Command: cat /etc/passwd, pipe to grep /home/, redirect to users.txt. This filters and saves results.","\n","^Quick file creation:","\n","^\"echo 'test content' > test.txt\" - creates a file with content in one command.","\n","^During security assessments, you'll constantly redirect command output to files for documentation and later analysis.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"stderr_redirection":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Good catch. There are actually two output streams: stdout (standard output) and stderr (standard error).","\n","^By default, \">\" only redirects stdout. Error messages still appear on screen.","\n","^To redirect stderr: \"command 2> errors.txt\"","\n","^To redirect both: \"command > output.txt 2>&1\" - sends stderr to stdout, which goes to the file.","\n","^Or in modern Bash: \"command &> output.txt\" does the same thing more simply.","\n","^To discard output entirely: \"command > /dev/null 2>&1\" - sends everything to the void.","\n","^This is advanced stuff, but incredibly useful when scripting or when you want clean output.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"networking_basics":[["ev",true,"/ev",{"VAR=":"networking_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Linux networking commands. Essential for understanding network configurations and troubleshooting connectivity.","\n","^ifconfig - the classic command to view network interfaces and IP addresses. Shows all your network adapters.","\n","^ip - the modern replacement. \"ip a s\" (ip address show) does the same thing. You'll see both used in the field.","\n","^hostname -I - quick way to display just your IP address.","\n","^In our environment, your IP typically starts with \"172.22\" or \"10\" - those are private network ranges.","\n","ev","str","^Tell me more about network interfaces","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How do I troubleshoot network issues?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^What about finding other machines?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^Got it","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"ifconfig_discussed","re":true},"^You: What are network interfaces exactly?","\n",{"->":"network_interfaces"},{"#f":5}],"c-1":["\n","^You: What if my network isn't working?","\n",{"->":"network_troubleshooting"},{"#f":5}],"c-2":["\n","^You: How do I discover other systems on the network?","\n","^Good question, but that's scanning territory. We'll cover tools like nmap in the scanning module. For now, focus on understanding your own network configuration.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},{"#f":5}],"c-3":["\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"network_interfaces":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Network interfaces are how your computer connects to networks. Think of them as connection points.","\n","^eth0, eth1 - Ethernet interfaces. Physical network ports.","\n","^wlan0 - Wireless interface. WiFi adapter.","\n","^lo - Loopback interface, always 127.0.0.1. Your computer talking to itself. Useful for testing.","\n","^Virtual interfaces - VPNs and containers create virtual interfaces like tun0, tap0, docker0.","\n","^When you run ifconfig, you see all interfaces, their IP addresses, MAC addresses, and traffic statistics. Essential information for network security assessments.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"network_troubleshooting":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Basic network troubleshooting steps:","\n","^Step 1: Check interface status with \"ifconfig\" or \"ip a s\". Is the interface up? Does it have an IP?","\n","^Step 2: If no IP, try \"dhclient eth0\" to request one from DHCP server.","\n","^Step 3: Test local connectivity: \"ping 127.0.0.1\" tests your network stack.","\n","^Step 4: Test gateway: \"ping your_gateway_ip\" tests local network.","\n","^Step 5: Test DNS: \"ping google.com\" tests name resolution and external connectivity.","\n","^In our lab environment, if you're having issues, usually dhclient fixes it. In the field, troubleshooting can be much more complex.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"kali_intro":[["ev",true,"/ev",{"VAR=":"kali_intro_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Kali Linux. Your primary offensive security platform.","\n","^Released by Offensive Security in 2013 as the successor to BackTrack Linux. It's specifically designed for penetration testing, security auditing, and digital forensics.","\n","^Kali includes hundreds of pre-installed tools organized by category: information gathering, vulnerability analysis, wireless attacks, web applications, exploitation tools, password attacks, forensics, and more.","\n","^Default credentials: username \"kali\", password \"kali\". Never use Kali as your primary OS—it's designed for security testing, not everyday computing.","\n","ev","str","^Show me what tools are available","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How is Kali organized?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^Sounds powerful","/str","/ev",{"*":".^.c-2","flg":20},{"c-0":["\n","^You: What kinds of tools are we talking about?","\n",{"->":"kali_tools_overview"},{"#f":5}],"c-1":["\n","^You: How do I find the right tool for a task?","\n",{"->":"kali_organization"},{"#f":5}],"c-2":["\n",{"->":"linux_training_hub"},{"#f":5}]}],null],"kali_tools_overview":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Let me give you a taste of what's available:","\n","^Information Gathering: nmap, dnsenum, whois, recon-ng. Tools for mapping networks and gathering intelligence.","\n","^Vulnerability Analysis: Nessus, OpenVAS, nikto. Automated scanners that identify security weaknesses.","\n","^Exploitation: Metasploit Framework, BeEF, sqlmap. Tools for actively exploiting vulnerabilities.","\n","^Password Attacks: Hydra, John the Ripper, hashcat. Cracking and bruteforcing credentials.","\n","^Wireless Attacks: Aircrack-ng, Reaver, Wifite. WiFi security testing.","\n","^Forensics: Autopsy, Sleuth Kit, Volatility. Analyzing systems and recovering data.","\n","^And those are just highlights. Run \"ls /usr/bin\" to see hundreds more. It's an arsenal.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"kali_organization":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Kali organizes tools by the penetration testing lifecycle:","\n","^Phase 1 - Information Gathering: Passive and active reconnaissance. Learning about your target.","\n","^Phase 2 - Vulnerability Analysis: Identifying weaknesses in systems and applications.","\n","^Phase 3 - Exploitation: Actually compromising systems using identified vulnerabilities.","\n","^Phase 4 - Post-Exploitation: What you do after gaining access. Maintaining access, pivoting, data exfiltration.","\n","^The Applications menu mirrors this structure. When you need a tool, think about which phase you're in, and browse that category.","\n","^You'll also quickly learn the handful of tools you use constantly. Nmap, Metasploit, Burp Suite, Wireshark—these become second nature.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"ssh_intro":[["ev",true,"/ev",{"VAR=":"ssh_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^SSH - Secure Shell. Encrypted remote access to systems. One of your most critical tools.","\n","^SSH lets you securely connect to remote Linux systems and execute commands as if you were sitting at that machine. All traffic is encrypted, protecting against eavesdropping.","\n","^Basic usage: \"ssh username@ip_address\"","\n","^The server typically listens on port 22. When you connect, you authenticate (usually with password or key), and then you have a remote shell.","\n","^SSH replaced older, insecure protocols like Telnet and rlogin, which transmitted passwords in cleartext. Never use those—always use SSH.","\n","ev","str","^Tell me about SSH keys","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^What's X11 forwarding?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^How do I verify I'm connecting to the right server?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^Let's talk about attacking SSH","/str","/ev",{"*":".^.c-3","flg":20},"ev","str","^Got the basics","/str","/ev",{"*":".^.c-4","flg":20},{"c-0":["\n","^You: What about SSH key authentication?","\n",{"->":"ssh_keys"},{"#f":5}],"c-1":["\n","ev",true,"/ev",{"VAR=":"ssh_x_forwarding_discussed","re":true},"^You: I saw something about -X flag for forwarding?","\n",{"->":"ssh_x_forwarding"},{"#f":5}],"c-2":["\n","^You: How do I know I'm not being man-in-the-middled?","\n",{"->":"ssh_fingerprints"},{"#f":5}],"c-3":["\n","^You: How do we test SSH security?","\n",{"->":"ssh_to_hydra_transition"},{"#f":5}],"c-4":["\n","ev",true,"/ev",{"VAR=":"completed_ssh_challenge","re":true},{"->":"linux_training_hub"},{"#f":5}]}],null],"ssh_keys":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^SSH keys are asymmetric cryptography for authentication. Much more secure than passwords.","\n","^You generate a key pair: a private key (keep secret) and public key (share freely).","\n","^Generate keys: \"ssh-keygen -t rsa -b 4096\"","\n","^Copy public key to server: \"ssh-copy-id user@server\"","\n","^Now you can SSH without typing passwords. The private key proves your identity.","\n","^Benefits: stronger than passwords, can't be bruteforced, can be passphrase-protected, can be revoked per-server.","\n","^Many organizations require key-based auth and disable password authentication entirely. Learn this workflow.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"ssh_intro"},null],"ssh_x_forwarding":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^X11 forwarding is clever. Linux graphical applications use the X Window System. SSH can tunnel X11 traffic.","\n","^Connect with: \"ssh -X user@server\"","\n","^Now you can run graphical programs on the remote server, but see them on your local screen. The program runs remotely, but displays locally.","\n","^Example: \"kate\" opens the text editor, running on the remote system but displaying on yours. Useful for accessing GUI tools remotely.","\n","^Warning: some latency over networks. And it does expose some security risks—only use on trusted connections.","\n","ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"ssh_intro"},null],"ssh_fingerprints":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Excellent security awareness. SSH uses host key fingerprints to prevent man-in-the-middle attacks.","\n","^When you first connect, SSH shows the server's fingerprint. You should verify this matches the real server before accepting.","\n","^On the server, check fingerprint: \"ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub\"","\n","^If the fingerprint matches what SSH showed you, type \"yes\". SSH remembers this and will warn if it changes later.","\n","^If the fingerprint changes unexpectedly, that's a warning sign. Could be a man-in-the-middle attack, or could be the server was rebuilt. Investigate before proceeding.","\n","^Most people skip this check. Don't be most people. Especially in adversarial security contexts.","\n","ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"ssh_intro"},null],"ssh_to_hydra_transition":["^Now you're thinking like a penetration tester. Let's talk about attacking SSH.","\n",{"->":"hydra_intro"},null],"hydra_intro":[["ev",true,"/ev",{"VAR=":"hydra_discussed","re":true},"ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Hydra. THC-Hydra, to be specific. A parallelized login cracker supporting numerous protocols.","\n","^Hydra performs online bruteforce attacks—it actually tries to log in with username/password combinations. Different from offline attacks where you crack hashed passwords.","\n","^Basic usage: \"hydra -l username -p password target ssh\"","\n","^Tests a single username/password combo. But Hydra's power is testing many combinations from wordlists.","\n","^Supports dozens of protocols: SSH, FTP, HTTP, RDP, SMB, databases, and more. If it accepts login credentials, Hydra can probably attack it.","\n","ev","str","^How do I use wordlists?","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^How fast is Hydra?","/str","/ev",{"*":".^.c-1","flg":20},"ev","str","^What are the legal/ethical considerations?","/str","/ev",{"*":".^.c-2","flg":20},"ev","str","^I'm ready to try it","/str","/ev",{"*":".^.c-3","flg":20},{"c-0":["\n","ev",true,"/ev",{"VAR=":"bruteforce_basics_discussed","re":true},"^You: How do I test multiple passwords?","\n",{"->":"hydra_wordlists"},{"#f":5}],"c-1":["\n","^You: How quickly can it crack passwords?","\n",{"->":"hydra_speed"},{"#f":5}],"c-2":["\n","^You: Is this legal to use?","\n",{"->":"hydra_ethics"},{"#f":5}],"c-3":["\n","ev",true,"/ev",{"VAR=":"completed_hydra_challenge","re":true},{"->":"linux_training_hub"},{"#f":5}]}],null],"hydra_wordlists":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Wordlists are the fuel for Hydra. Collections of common passwords to test.","\n","^Usage: \"hydra -l username -P /path/to/wordlist.txt target ssh\"","\n","^Capital -P for password list, lowercase -l for single username. Or use -L for username list too.","\n","^Kali includes wordlists: \"ls /usr/share/wordlists/seclists/Passwords/\"","\n","^Choosing the right wordlist is critical. A wordlist with 10 million passwords might take days for online attacks. Start with smaller, curated lists of common passwords.","\n","^For SSH specifically, \"Common-Credentials\" lists work well. They contain default passwords and common weak passwords.","\n","^Real-world advice: online attacks are slow and noisy. They generate logs. They trigger intrusion detection. Use them strategically, not as your first approach.","\n","ev",true,"/ev",{"VAR=":"completed_hydra_challenge","re":true},"ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"hydra_speed":["ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Speed depends on many factors: network latency, server response time, number of parallel connections.","\n","^Hydra's \"-t\" flag controls parallel tasks. \"hydra -t 4\" uses 4 parallel connections.","\n","^More isn't always better. Too many parallel connections can crash services or trigger rate limiting. For SSH, 4-16 threads is usually reasonable.","\n","^Realistic expectations: online SSH bruteforce might test 10-50 passwords per second. Against a wordlist with 10,000 passwords, that's several minutes at best.","\n","^Compare to offline cracking (like hashcat on GPUs), which can test billions of passwords per second. Online attacks are fundamentally slower.","\n","^Strategic implication: online attacks work best when you have good intelligence. If you know username is \"admin\" and password is probably from a short list of defaults, Hydra excels. Blind bruteforce against random accounts? Impractical.","\n","ev",{"VAR?":"instructor_rapport"},8,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"hydra_ethics":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Critical question. Shows good judgment.","\n","^Legal status: Hydra itself is legal to possess and use in authorized security testing. Unauthorized use against systems you don't own or have explicit permission to test? That's computer fraud. Felony-level crime in most jurisdictions.","\n","^In this training: You're attacking lab systems we control, with explicit permission. This is legal and ethical training.","\n","^In SAFETYNET operations: You'll have authorization for your targets. Still legally gray area, but covered by classified operational authorities.","\n","^In the real world: Never, ever use these tools against systems without written authorization. Penetration testers get contracts. Bug bounty hunters follow program rules. Hobbyists practice in their own isolated labs.","\n","^The skills you're learning are powerful. Use them responsibly. With authorization. Within the law. That's not optional—it's core to professional security work.","\n","ev",{"VAR?":"instructor_rapport"},15,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#",{"->":"linux_training_hub"},null],"commands_reference":[["ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Here's your essential commands quick reference:","\n","^Navigation:","\n",["^pwd (print working directory)","\n",["^ls, ls -la (list files, detailed)","\n",["^cd directory (change directory)","\n",["^cd .. (up one level), cd (home)","\n","^File Operations:","\n",["^mkdir (make directory)","\n",["^cp source dest (copy), cp -r (recursive)","\n",["^mv old new (move/rename)","\n",["^cat filename (display file)","\n",["^less filename (scrollable view)","\n",["^echo \"text\" (print text)","\n","^Getting Help:","\n",["^man command (manual page)","\n",["^info command (info page)","\n",["^command --help (quick help)","\n","^Text Processing:","\n",["^grep pattern (filter lines)","\n",["^sort (sort lines)","\n",["^uniq (remove duplicates)","\n",["^head, tail (first/last lines)","\n",["^wc -l (count lines)","\n","^Networking:","\n",["^ifconfig, ip a s (show interfaces)","\n",["^hostname -I (show IP)","\n",["^ssh user@host (remote shell)","\n",["^ssh -X user@host (X11 forwarding)","\n","^Security Tools:","\n",["^hydra -l user -p pass target ssh (test SSH login)","\n",["^hydra -l user -P wordlist target ssh (bruteforce SSH)","\n","ev","str","^Back to main menu","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"linux_training_hub"},null],"#n":"g-23"}],{"#n":"g-22"}],{"#n":"g-21"}],{"#n":"g-20"}],{"#n":"g-19"}],{"#n":"g-18"}],{"#n":"g-17"}],{"#n":"g-16"}],{"#n":"g-15"}],{"#n":"g-14"}],{"#n":"g-13"}],{"#n":"g-12"}],{"#n":"g-11"}],{"#n":"g-10"}],{"#n":"g-9"}],{"#n":"g-8"}],{"#n":"g-7"}],{"#n":"g-6"}],{"#n":"g-5"}],{"#n":"g-4"}],{"#n":"g-3"}],{"#n":"g-2"}],{"#n":"g-1"}],{"#n":"g-0"}],null],null],"challenge_tips":[["ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Practical tips for the hands-on challenges:","\n","^For SSH practice, verify fingerprints before accepting, try both regular SSH and the -X flag for X forwarding, use \"exit\" or Ctrl-D to disconnect, and check the \"who\" command to see who else is connected.","\n","^For Hydra attacks, start with small, targeted wordlists from /usr/share/wordlists/seclists/Passwords/Common-Credentials/. Use -t 4 for reasonable parallel connections. Be patient—online attacks are slow. Watch for successful login messages and remember to actually SSH in once you crack credentials.","\n","^For finding flags, navigate to user home directories, use \"cat\" to read files, remember \"sudo\" lets you act as root if you have permission, and check file permissions with \"ls -la\".","\n","^General advice: use Tab completion to save typing, use the up arrow to recall previous commands, check man pages if stuck, and take notes on what works.","\n","ev","str","^Back to main menu","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["\n",{"->":"linux_training_hub"},null]}],null],"ready_for_practice":["ev",{"VAR?":"instructor_rapport"},5,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Excellent. You've covered the fundamentals.","\n","ev",{"VAR?":"command_line_skills_discussed"},{"VAR?":"piping_discussed"},"&&",{"VAR?":"redirection_discussed"},"&&",{"VAR?":"ssh_discussed"},"&&",{"VAR?":"hydra_discussed"},"&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^You've reviewed all the core material. You should be well-prepared for the practical exercises.","\n",{"->":".^.^.^.24"},null]}],[{"->":".^.b"},{"b":["\n","^You might want to review the topics you haven't covered yet, but you've got enough to start.","\n",{"->":".^.^.^.24"},null]}],"nop","\n","^Remember: the best way to learn Linux is by doing. Read the challenges, try commands, make mistakes, figure out fixes. That's how you build real competence.","\n","^Practical objectives:","\n","^1. Practice basic command-line navigation and file manipulation","\n","^2. Edit files with vi","\n","^3. Use piping and redirection","\n","^4. SSH between systems","\n","^5. Use Hydra to crack weak SSH credentials","\n","^6. Capture flags from compromised accounts","\n","^The lab environment is yours to experiment in. Break things. It's a safe space for learning.","\n","ev",{"VAR?":"instructor_rapport"},50,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^You've asked great questions and engaged deeply with the material. That's exactly the right approach. You're going to do well.","\n",{"->":".^.^.^.50"},null]}],"nop","\n","^Good luck, Agent. You've got this.","\n",{"->":"end_session"},null],"end_session":["ev",{"VAR?":"instructor_rapport"},40,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^You've demonstrated solid understanding and good security awareness. See you in the field, Agent.","\n",{"->":".^.^.^.7"},null]}],[{"->":".^.b"},{"b":["\n","^See you in the field, Agent.","\n",{"->":".^.^.^.7"},null]}],"nop","\n","#","^exit_conversation","/#",{"->":"linux_training_hub"},null],"flags_completed_congrats":["ev",{"VAR?":"instructor_rapport"},10,"+",{"VAR=":"instructor_rapport","re":true},"/ev","#","^influence_increased","/#","^Excellent work, ","ev",{"VAR?":"player_name"},"out","/ev","^! You've successfully completed all the VM lab exercises and captured all the flags. That demonstrates real competence with Linux security fundamentals.","\n","^You've shown you can navigate Linux systems effectively, use SSH for remote access, perform security testing with tools like Hydra, and escalate privileges when needed. These are essential skills for field operations.","\n","^I have an optional challenge for you, if you're interested. There's a lockpicking practice room. It's completely optional, but it's a useful field skill to learn.","\n","ev",{"VAR?":"has_key"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Here's the key to the lockpicking practice room. The locksmith inside can teach you the basics.","\n","ev",true,"/ev",{"VAR=":"lockpicking_key_received","re":true},"#","^give_item:key","/#","#","^unlock_aim:learn_lockpicking","/#","#","^unlock_task:talk_to_locksmith","/#","^Good luck! It's a valuable skill to have.","\n",{"->":".^.^.^.25"},null]}],[{"->":".^.b"},{"b":["\n","^I see you already have the key. Feel free to explore the lockpicking practice room if you're interested.","\n","ev",{"VAR?":"lockpicking_key_received"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","ev",true,"/ev",{"VAR=":"lockpicking_key_received","re":true},"#","^unlock_aim:learn_lockpicking","/#","#","^unlock_task:talk_to_locksmith","/#",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":".^.^.^.25"},null]}],"nop","\n",{"->":"flags_completed_followup"},null],"flags_completed_followup":[["ev","str","^Tell me more about lockpicking","/str","/ev",{"*":".^.c-0","flg":4},"ev","str","^Back to main menu","/str","/ev",{"*":".^.c-1","flg":4},"ev","str","^That's all I need","/str","/ev",{"*":".^.c-2","flg":4},{"c-0":["\n","^Lockpicking is a physical security skill. In the field, you'll encounter locked doors, safes, and containers. Being able to pick locks gives you access without keys or forced entry.","\n","^The locksmith in the practice room can teach you the fundamentals: applying tension with a wrench, and picking pins in binding order. It takes practice, but it's a skill worth learning.","\n",{"->":".^.^.^"},null],"c-1":["\n",{"->":"linux_training_hub"},null],"c-2":["\n",{"->":"end_session"},null]}],null],"global decl":["ev",false,{"VAR=":"linux_basics_discussed"},false,{"VAR=":"command_line_skills_discussed"},false,{"VAR=":"vi_editor_discussed"},false,{"VAR=":"piping_discussed"},false,{"VAR=":"redirection_discussed"},false,{"VAR=":"networking_discussed"},false,{"VAR=":"ssh_discussed"},false,{"VAR=":"hydra_discussed"},false,{"VAR=":"kali_intro_discussed"},false,{"VAR=":"pwd_ls_discussed"},false,{"VAR=":"file_manipulation_discussed"},false,{"VAR=":"man_pages_discussed"},false,{"VAR=":"piping_examples_discussed"},false,{"VAR=":"redirection_examples_discussed"},false,{"VAR=":"ifconfig_discussed"},false,{"VAR=":"ssh_basics_discussed"},false,{"VAR=":"ssh_x_forwarding_discussed"},false,{"VAR=":"bruteforce_basics_discussed"},false,{"VAR=":"completed_vi_challenge"},false,{"VAR=":"completed_piping_challenge"},false,{"VAR=":"completed_ssh_challenge"},false,{"VAR=":"completed_hydra_challenge"},0,{"VAR=":"instructor_rapport"},0,{"VAR=":"deep_dives_completed"},"str","^Agent 0x00","/str",{"VAR=":"player_name"},false,{"VAR=":"lockpicking_key_received"},false,{"VAR=":"has_key"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file diff --git a/scenarios/lab_intro_linux/scenario.json.erb b/scenarios/lab_intro_linux/scenario.json.erb index d270be8..db492fa 100644 --- a/scenarios/lab_intro_linux/scenario.json.erb +++ b/scenarios/lab_intro_linux/scenario.json.erb @@ -206,7 +206,7 @@ "lockpicking_room": { "type": "room_office", "connections": { - "west": "instruction_room" + "south": "instruction_room" }, "locked": true, "lockType": "key",