<?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>CSCBE 2026 Finals on CTF Writeups</title><link>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/</link><description>Recent content in CSCBE 2026 Finals on CTF Writeups</description><generator>Hugo -- 0.156.0</generator><language>en-us</language><lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/index.xml" rel="self" type="application/rss+xml"/><item><title>MyOwnPrint</title><link>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/my-own-print/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/my-own-print/</guid><description>&lt;p&gt;Category: Pwn&lt;/p&gt;
&lt;p&gt;Difficulty: Hard (85 points)&lt;/p&gt;
&lt;p&gt;Author: azerloc&lt;/p&gt;
&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve made a small guessing game with my own print function. Can you exploit it?&lt;/p&gt;
&lt;h2 id="note"&gt;Note&lt;/h2&gt;
&lt;p&gt;Unfortunately I didn&amp;rsquo;t manage to finish this challenge during the event itself, since I realized a crucial part
about how to set the &lt;code&gt;rax&lt;/code&gt; register 5 minutes before the end of the event, so I didn&amp;rsquo;t have enough time to edit
my exploit during the event itself.&lt;/p&gt;</description></item><item><title>Repeating Mistakes</title><link>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/repeating-mistakes/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/repeating-mistakes/</guid><description>&lt;p&gt;Category: Web (felt more like a cryptography challenge)&lt;/p&gt;
&lt;p&gt;Difficulty: Easy (40 points)&lt;/p&gt;
&lt;p&gt;Author: Romain Fontaine&lt;/p&gt;
&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;p&gt;Our cryptography researcher got hit by a nasty ransomware during his work on some advance encryption standardization.
Can you help him recover his encrypted files so he doesn&amp;rsquo;t lose all his progress?&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;This challenge gave us an encryption script, as well as some encrypted files (flag.txt.enc, encarta.txt.enc, Block_diagram.png.enc, &amp;hellip;).
This is the encryption function in encrypt.py.&lt;/p&gt;</description></item><item><title>Spelunk</title><link>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/spelunk/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/spelunk/</guid><description>&lt;p&gt;Category: Pwn&lt;/p&gt;
&lt;p&gt;Difficulty: Easy (30 points)&lt;/p&gt;
&lt;p&gt;Author: Théo Davreux&lt;/p&gt;
&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;p&gt;Hello adventurer! I&amp;rsquo;ve found a secret cave, but I&amp;rsquo;ve lost my light. I&amp;rsquo;ve opened the map (flag file) but I can&amp;rsquo;t read it anymore. Can you help me?&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;We get this source file, which pretty much already tells us how the exploit should be structured.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; * Spelunk: A baby&amp;#39;s first pwn challenge.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; * Instructions:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; * - Compiled as 32-bit x86.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; * - No stack protection, no PIE, executable stack.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; * - The flag is opened at the start of the program and its FD is kept open.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; * - The goal is to inject shellcode that reads from the flag&amp;#39;s FD and writes to
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; * stdout.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;vuln&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; client_fd) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; buf[&lt;span style="color:#ae81ff"&gt;128&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Redirect stdin and stdout to the client socket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;dup2&lt;/span&gt;(client_fd, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;dup2&lt;/span&gt;(client_fd, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Leak the buffer address to make it easy to jump to shellcode
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Hello adventurer! I&amp;#39;ve found a secret cave, but I&amp;#39;ve lost my light.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;I can see my map at: %p&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;, (&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;)buf);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Can you help me? What did you find? &amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fflush&lt;/span&gt;(stdout);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// The vulnerability: gets() reads until newline, allowing buffer overflow.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;gets&lt;/span&gt;(buf);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;You found: %s&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;, buf);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;That doesn&amp;#39;t seem to help... goodbye!&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fflush&lt;/span&gt;(stdout);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 1. Open flag file. This will likely be FD 3.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// The entrypoint script will write this file and then delete it after 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// second.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; flag_fd &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;open&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;/tmp/flag.txt&amp;#34;&lt;/span&gt;, O_RDONLY);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (flag_fd &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;perror&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Error opening flag&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;exit&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 2. Setup socket server on port 1337
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since the stack is executable, we will just write some shellcode to the stack, and then jump to this shell code
by using the buffer overflow to overwrite the return address on the stack. This is possible since the code
leaks the address of the buffer, which is the address we will jump to.&lt;/p&gt;</description></item><item><title>Summoned Skull</title><link>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/summoned-skull/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://ctf-writeups.dediamondpro.dev/cscbe-2026-finals/summoned-skull/</guid><description>&lt;p&gt;Category: Reverse Engineering&lt;/p&gt;
&lt;p&gt;Difficulty: Medium (30 points)&lt;/p&gt;
&lt;p&gt;Author: Summoned Skull&lt;/p&gt;
&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;p&gt;You already beat Yugi&amp;rsquo;s weakest monster? That&amp;rsquo;s impressive.
However, you will not be able to knock out the next one.
This time, the battle will occur in a more native environment! Your fate is sealed.&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;This challenge gives us an Android app (.apk file), extracting it with apkfile, in assets/private.tar
we find some .pyc files, decompiling main.pyc gives us this result.&lt;/p&gt;</description></item></channel></rss>