<?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>CTF Write-up: Cloudsek CTF 2025 on Break · Build · Repeat</title><link>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/</link><description>Recent content in CTF Write-up: Cloudsek CTF 2025 on Break · Build · Repeat</description><image><title>Break · Build · Repeat</title><url>http://ashishji.is-a.dev/blog/og-default-200.png</url><link>http://ashishji.is-a.dev/blog/og-default-200.png</link></image><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Tue, 16 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/index.xml" rel="self" type="application/rss+xml"/><item><title>Bad Feedback</title><link>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/bad-feedback/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/bad-feedback/</guid><description>&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Web Security / Injection&lt;br&gt;
&lt;strong&gt;Vulnerability:&lt;/strong&gt; XML External Entity (XXE) Injection&lt;/p&gt;
&lt;h2 id="1-challenge-description"&gt;1. Challenge Description&lt;/h2&gt;
&lt;p&gt;The challenge features a customer feedback form that claims to accept feedback &amp;ldquo;at face value.&amp;rdquo; The goal is to read a flag file stored on the server&amp;rsquo;s root directory.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Description: &amp;ldquo;Every feedback is accepted at face value, no questions asked. What can go wrong? Flag is in the root.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="2-reconnaissance"&gt;2. Reconnaissance&lt;/h2&gt;
&lt;p&gt;Inspecting the HTML source code revealed how the frontend processes the form data. A script intercepts the form submission and manually constructs an XML payload string before sending it to the &lt;code&gt;/feedback&lt;/code&gt; endpoint via &lt;code&gt;fetch&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Nitro</title><link>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/nitro/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/nitro/</guid><description>&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Scripting / Automation&lt;br&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A race-against-time challenge where the user must process data and submit a response faster than humanly possible.&lt;/p&gt;
&lt;h2 id="1-challenge-description"&gt;1. Challenge Description&lt;/h2&gt;
&lt;p&gt;The challenge provides a landing page with a clear directive: &lt;strong&gt;&amp;ldquo;Manual attempts miss the window—only code will do.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The workflow requires the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GET&lt;/strong&gt; a random string from &lt;code&gt;/task&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reverse&lt;/strong&gt; the string.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Base64 encode&lt;/strong&gt; the reversed string.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Format&lt;/strong&gt; the result into a specific template: &lt;code&gt;CSK__{{payload}}__2025&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;POST&lt;/strong&gt; the final string to &lt;code&gt;/submit&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Any attempt to perform these steps manually results in a generic &amp;ldquo;Too slow!&amp;rdquo; error, confirming that the server enforces a strict timeout (likely under 1 second).&lt;/p&gt;</description></item><item><title>Orbital Boot Sequence</title><link>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/orbital-boot-sequence/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/orbital-boot-sequence/</guid><description>&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Web Exploitation&lt;br&gt;
&lt;strong&gt;Vulnerability:&lt;/strong&gt; Hardcoded Credentials, Weak JWT Secret, Server-Side Template Injection (SSTI)&lt;/p&gt;
&lt;h2 id="1-challenge-description"&gt;1. Challenge Description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; &amp;ldquo;The Orbital Boot Sequence has stalled mid-launch. Can you restart the relay and seize control before the fleet drifts off-course? Submit the &lt;code&gt;root&lt;/code&gt; flag for the win.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="2-reconnaissance"&gt;2. Reconnaissance&lt;/h2&gt;
&lt;p&gt;Upon accessing the main page, I inspected the source code and noticed a reference to a JavaScript file named &lt;code&gt;/static/js/secrets.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Analyzing &lt;code&gt;secrets.js&lt;/code&gt; revealed hardcoded credentials in the &lt;code&gt;operatorLedger&lt;/code&gt; array:&lt;/p&gt;</description></item><item><title>Ticket</title><link>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/ticket/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/ticket/</guid><description>&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Mobile / Web Security&lt;br&gt;
&lt;strong&gt;Vulnerability:&lt;/strong&gt; Hardcoded Secrets &amp;amp; JWT Forgery&lt;/p&gt;
&lt;h2 id="1-challenge-description"&gt;1. Challenge Description&lt;/h2&gt;
&lt;p&gt;Strike Bank detected unusual activity in their customer portal. The objective is to investigate their Android application (&lt;code&gt;com.strikebank.netbanking&lt;/code&gt;) using public OSINT tools, uncover hidden secrets, and use them to compromise the web portal to retrieve the flag.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Hint: &amp;ldquo;Everything you need is already out there! Connect the dots&amp;hellip;&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="2-reconnaissance-mobile-analysis"&gt;2. Reconnaissance (Mobile Analysis)&lt;/h2&gt;
&lt;p&gt;The challenge explicitly pointed to &lt;code&gt;bevigil.com&lt;/code&gt;, a search engine for mobile applications. By searching for the package name &lt;code&gt;com.strikebank.netbanking&lt;/code&gt;, we accessed the automated security report.&lt;/p&gt;</description></item><item><title>Triangle</title><link>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/triangle/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>http://ashishji.is-a.dev/blog/posts/cloudsek-ctf-2025/triangle/</guid><description>&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Web Security / Source Code Review&lt;br&gt;
&lt;strong&gt;Vulnerability:&lt;/strong&gt; PHP Type Juggling (Loose Comparison) &amp;amp; Backup File Disclosure&lt;/p&gt;
&lt;h2 id="1-challenge-description"&gt;1. Challenge Description&lt;/h2&gt;
&lt;p&gt;The challenge presents a login interface protected by a &amp;ldquo;Trinity&amp;rdquo; of security layers: a username, a password, and three sequential One-Time Password (OTP) verification steps. The goal is to bypass these layers to retrieve the flag.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Description: &amp;ldquo;The system guards its secrets behind a username, a password, and three sequential verification steps. Only those who truly understand how the application works will pass all three. Break the Trinity and claim the flag.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>