<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Web on Anthrace | CTF Writeups</title><link>https://anthr4ce.github.io/tags/web/</link><description>Recent content in Web on Anthrace | CTF Writeups</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 11 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://anthr4ce.github.io/tags/web/index.xml" rel="self" type="application/rss+xml"/><item><title>UofTCTF 2026 - WEB Pasteboard</title><link>https://anthr4ce.github.io/ctf-writeups/uoftctf-2026/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/uoftctf-2026/</guid><description>&lt;hr&gt;&#10;&lt;h1 id="web-challenge-----dom-clobbering--csp-bypass--rce-of-seleniums-webdriver-bidi-protocol"&gt;&#10; Web Challenge - - DOM clobbering + CSP bypass + RCE of Selenium&amp;rsquo;s WebDriver BiDi protocol&#10; &lt;a class="heading-link" href="#web-challenge-----dom-clobbering--csp-bypass--rce-of-seleniums-webdriver-bidi-protocol"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h1&gt;&#10;&lt;p&gt;It&amp;rsquo;s been a while since I had that much fun with a client-side challenge.&lt;/p&gt;&#10;&lt;p&gt;Pasteboard is a note-sharing web application where users can create and view notes. The challenge includes an admin bot that visits reported notes, so right off the bat I knew we were dealing with some client-side shenanigans.&lt;/p&gt;</description></item><item><title>BrunnerCTF 2025 - WEB Recipe for Disaster</title><link>https://anthr4ce.github.io/ctf-writeups/brunnerctf-2025/web/</link><pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/brunnerctf-2025/web/</guid><description>&lt;hr&gt;&#10;&lt;p&gt;This challenge demonstrates a classic prototype pollution vulnerability that leads to remote code execution through PATH hijacking. We exploit a dangerous &lt;code&gt;deepMerge&lt;/code&gt; function to pollute &lt;code&gt;Object.prototype.env&lt;/code&gt;, hijack the system&amp;rsquo;s PATH variable, and execute a malicious binary disguised as the legitimate &lt;code&gt;zip&lt;/code&gt; command.&lt;/p&gt;&#10;&lt;h2 id="overview--attribution"&gt;&#10; Overview &amp;amp; Attribution&#10; &lt;a class="heading-link" href="#overview--attribution"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;When I first tackled this challenge, I had a gut feeling we were dealing with prototype pollution. But the real “enlightment” moment came when I found an epic writeup &lt;strong&gt;Mizu&lt;/strong&gt; at &lt;a href="https://mizu.re/post/infinite-mario" class="external-link" target="_blank" rel="noopener"&gt;mizu.re&lt;/a&gt;. This absolute legend in the web security game, and his breakdown of a similar exploit was like finding the perfect recipe for this challenge. If you’re into this stuff, you have to check out Mizu’s work. His DOMPurify research is really insane.&#10;Huge props to them for sharing knowledge that helps us all level up!&lt;/p&gt;</description></item><item><title>HackDay - Web</title><link>https://anthr4ce.github.io/ctf-writeups/hackday/web/internal-blog/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/hackday/web/internal-blog/</guid><description>&lt;h3 id="exploiting-an-xss-vulnerability-in-a-blog-with-moderator-visit"&gt;&#10; &lt;strong&gt;Exploiting an XSS Vulnerability in a Blog with Moderator Visit&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#exploiting-an-xss-vulnerability-in-a-blog-with-moderator-visit"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;&lt;img src="images/blog_chall.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;p&gt;In this challenge, we have a blog with a user registration and login system.&lt;br&gt;&#10;We know that the &lt;strong&gt;admin (or the moderator bot) will visit our profile&lt;/strong&gt; when we register and when we post an article.&lt;/p&gt;&#10;&lt;p&gt;A &lt;strong&gt;source code leak&lt;/strong&gt; is also available.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/blog_leak.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="step-1-analyzing-the-source-code"&gt;&#10; &lt;strong&gt;Step 1: Analyzing the Source Code&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#step-1-analyzing-the-source-code"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;Looking at the leaked source code, we notice an &lt;strong&gt;attempt at sanitization&lt;/strong&gt; of the fields, but it is performed &lt;strong&gt;after the .save()&lt;/strong&gt;, meaning that &lt;strong&gt;even if an error is displayed, the data is already stored in the database&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>HackDay - Web</title><link>https://anthr4ce.github.io/ctf-writeups/hackday/web/open-the-door/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/hackday/web/open-the-door/</guid><description>&lt;h3 id="flask-web-challenge---template-injection-analysis"&gt;&#10; &lt;strong&gt;Flask Web Challenge - Template Injection Analysis&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#flask-web-challenge---template-injection-analysis"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;In this challenge, we have a downloadable folder containing several files.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/door_files.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="step-1-identifying-the-web-framework"&gt;&#10; &lt;strong&gt;Step 1: Identifying the Web Framework&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#step-1-identifying-the-web-framework"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;By examining the &lt;code&gt;requirements.txt&lt;/code&gt; and &lt;code&gt;app.py&lt;/code&gt; files, we confirm that the application is built using &lt;strong&gt;Flask&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/door_flask_infos.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="step-2-examining-the-docker-configuration"&gt;&#10; &lt;strong&gt;Step 2: Examining the Docker Configuration&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#step-2-examining-the-docker-configuration"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;Looking into the &lt;code&gt;docker-compose.yaml&lt;/code&gt; file, we notice that the application is using &lt;strong&gt;templates&lt;/strong&gt; as an environment variable, which could be a potential security risk.&lt;/p&gt;</description></item><item><title>HackDay - Web</title><link>https://anthr4ce.github.io/ctf-writeups/hackday/web/the-analytical-engine-leak/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/hackday/web/the-analytical-engine-leak/</guid><description>&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;SQL Injection and Sensitive Data Retrieval&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;In this challenge, we are given a form with two fields: &lt;code&gt;username&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt;. Our goal is to exploit a SQL Injection vulnerability to extract sensitive data from the database.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/web_chall_description.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h4 id="step-1-testing-basic-injection"&gt;&#10; &lt;strong&gt;Step 1: Testing Basic Injection&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#step-1-testing-basic-injection"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;I started by testing a simple SQL injection in the &lt;code&gt;password&lt;/code&gt; field. Here&amp;rsquo;s the payload I used:&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;username=admin&amp;amp;password='OR''='&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&#10;The server returns a list of users present in the database:&lt;/p&gt;</description></item><item><title>E-CTF-2025 - Web</title><link>https://anthr4ce.github.io/ctf-writeups/e-ctf-2025/web/chatroom/</link><pubDate>Tue, 01 Jul 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/e-ctf-2025/web/chatroom/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="chatroom"&gt;&#10; &lt;strong&gt;Chatroom&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#chatroom"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="images/chatroom_1.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;p&gt;In this challenge, we are provided with access to a &lt;strong&gt;chatroom&lt;/strong&gt;, where a message indicates that the &lt;strong&gt;admin will read our message in 30 seconds&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Upon seeing this, I immediately suspect a possible &lt;strong&gt;XSS (Cross-Site Scripting) vulnerability&lt;/strong&gt;, as if the message is stored and executed in the admin’s browser, we could potentially &lt;strong&gt;inject malicious JavaScript&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="step-1---testing-for-xss-injection"&gt;&#10; &lt;strong&gt;Step 1 - Testing for XSS Injection&lt;/strong&gt;&#10; &lt;a class="heading-link" href="#step-1---testing-for-xss-injection"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;To verify if the input is vulnerable to &lt;strong&gt;XSS&lt;/strong&gt;, I test a &lt;strong&gt;simple payload&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>DVCTF 2025 - WEB LouvreArchives</title><link>https://anthr4ce.github.io/ctf-writeups/dvctf-2025/web-louvrearchives/</link><pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/dvctf-2025/web-louvrearchives/</guid><description>&lt;hr&gt;&#10;&lt;p&gt;&lt;img src="images/img1.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;p&gt;In this challenge, the goal is to access &lt;code&gt;flag.webp&lt;/code&gt; as indicated in the source code.&lt;/p&gt;&#10;&lt;p&gt;While exploring the page, I noticed a long base64-encoded string. Once decoded and reorganized, it contained several &lt;code&gt;.webp&lt;/code&gt; images with unusual names like &lt;code&gt;1991781613.webp&lt;/code&gt;, &lt;code&gt;1273827392.webp&lt;/code&gt;, etc.&lt;/p&gt;&#10;&lt;p&gt;Checking the source code:&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/img2.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;p&gt;We understand that filenames are generated using Python&amp;rsquo;s &lt;code&gt;getrandbits(32)&lt;/code&gt;, which produces 32 random bits via the &lt;code&gt;random.getrandbits&lt;/code&gt; function.&lt;/p&gt;&#10;&lt;p&gt;The interesting point here is that this function uses the &lt;strong&gt;Mersenne Twister&lt;/strong&gt; generator, a PRNG (Pseudo-Random Number Generator) that is &lt;strong&gt;not cryptographically secure&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>RootMeCTF-20K - WEB-TraineeTrainee</title><link>https://anthr4ce.github.io/ctf-writeups/rootmectf-20k/web-traineetrainee/</link><pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/rootmectf-20k/web-traineetrainee/</guid><description>&lt;p&gt;Description:&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/trainee-desc.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;p&gt;The trainee made a weird commit that’s flooding the server with requests—and eventually blocking connections. We’re hinted that something strange is lurking in their Nginx setup.&lt;/p&gt;&#10;&lt;p&gt;As soon as we connect we have a file reader form.&#10;I stared with a whatweb&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/trainee-whatweb.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;p&gt;With this we know the backend runs a Nginx 1.24.0.&#10;I tried to research for a file like a file.txt, example.txt localhost and /etc/nginx because of what could be a nginx misconfiguration.&lt;/p&gt;</description></item><item><title>LA-CTF - Lucky flag</title><link>https://anthr4ce.github.io/ctf-writeups/la-ctf/web/lucky-flag/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/la-ctf/web/lucky-flag/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="challenge-description"&gt;&#10; Challenge Description&#10; &lt;a class="heading-link" href="#challenge-description"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;In this challenge, I was presented with a &lt;strong&gt;web page filled with thousands of buttons&lt;/strong&gt;, all labeled &amp;ldquo;flag&amp;rdquo;.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="images/flag1.png" alt="Screenshot"&gt;&lt;/p&gt;&#10;&lt;p&gt;The goal was to &lt;strong&gt;find the correct button that reveals the flag&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="step-1-inspecting-the-source-code"&gt;&#10; Step 1: Inspecting the Source Code&#10; &lt;a class="heading-link" href="#step-1-inspecting-the-source-code"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;Instead of clicking every single button, I looked into the &lt;code&gt;main.js&lt;/code&gt; file which controls the behavior of the buttons.&lt;/p&gt;</description></item><item><title>Nullcon-Goa-HackIM-2025 - Web</title><link>https://anthr4ce.github.io/ctf-writeups/nullcon-goa-hackim-2025/web/crahp/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://anthr4ce.github.io/ctf-writeups/nullcon-goa-hackim-2025/web/crahp/</guid><description>&lt;hr&gt;&#10;&lt;h1 id="web-challenge---crc-hash-collision-exploit"&gt;&#10; Web Challenge - CRC Hash Collision Exploit&#10; &lt;a class="heading-link" href="#web-challenge---crc-hash-collision-exploit"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h1&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="challenge-description"&gt;&#10; Challenge Description&#10; &lt;a class="heading-link" href="#challenge-description"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;In this challenge, we are provided with the source code of a PHP script along with two hints:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Hint 1&lt;/strong&gt;: &lt;a href="https://www.php.net/manual/en/function.crc32.php#28012" class="external-link" target="_blank" rel="noopener"&gt;PHP documentation link for crc32()&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Hint 2&lt;/strong&gt;: &lt;a href="https://stackoverflow.com/questions/507041/crc8-check-in-php/73305496#73305496" class="external-link" target="_blank" rel="noopener"&gt;A PHP CRC8 implementation&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The goal is to retrieve the &lt;strong&gt;flag&lt;/strong&gt; by bypassing an authentication mechanism based on &lt;strong&gt;CRC hashes&lt;/strong&gt;.&lt;/p&gt;</description></item></channel></rss>