<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CTF on RORO's blog</title><link>https://blog.rodolpheg.xyz/fr/tags/ctf/</link><description>Recent content in CTF on RORO's blog</description><generator>Hugo</generator><language>fr</language><managingEditor>contact@rodolpheg.xyz (0xRo)</managingEditor><webMaster>contact@rodolpheg.xyz (0xRo)</webMaster><lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.rodolpheg.xyz/fr/tags/ctf/index.xml" rel="self" type="application/rss+xml"/><item><title>Une nuit pour hacker 2026: Thread of Doom</title><link>https://blog.rodolpheg.xyz/fr/posts/threadofdoom/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/threadofdoom/</guid><description>&lt;h2 id="synthese">Synthese&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Challenge&lt;/strong> : Thread of Doom&lt;/li>
&lt;li>&lt;strong>Categorie&lt;/strong> : Reverse Engineering&lt;/li>
&lt;li>&lt;strong>Flag&lt;/strong> : &lt;code>NHK26{VirtualProtect_Overwritten}&lt;/code>&lt;/li>
&lt;li>&lt;strong>Binaire :&lt;/strong> &lt;code>NHK_CrackMe_V3.exe&lt;/code> (PE32, x86, 43520 octets)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="vue-densemble">Vue d&amp;rsquo;ensemble&lt;/h2>
&lt;p>Thread of Doom est un crackme Windows qui affiche une boite de dialogue avec un bouton &amp;ldquo;Demo&amp;rdquo;. Cliquer sur ce bouton affiche une erreur : &lt;em>&amp;ldquo;Tu n&amp;rsquo;es pas premium ! Prix : 2 BTC&amp;rdquo;&lt;/em>. L&amp;rsquo;objectif est de comprendre les mecanismes de protection du binaire et d&amp;rsquo;extraire le flag cache.&lt;/p></description></item><item><title>Amazon AppSec CTF : HalCrypto</title><link>https://blog.rodolpheg.xyz/fr/posts/halcrypto/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/halcrypto/</guid><description>&lt;h2 id="synthese">Synthese&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Challenge&lt;/strong> : HalCrypto&lt;/li>
&lt;li>&lt;strong>Categorie&lt;/strong> : Securite Web&lt;/li>
&lt;li>&lt;strong>Vulnerabilite&lt;/strong> : Contournement de la validation JWT via confusion d&amp;rsquo;URL avec le symbole @&lt;/li>
&lt;li>&lt;strong>Impact&lt;/strong> : Contournement de l&amp;rsquo;authentification menant a un acces administrateur&lt;/li>
&lt;li>&lt;strong>Flag&lt;/strong> : &lt;code>HTB{r3d1r3c73d_70_my_s3cr37s}&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="vue-densemble-de-la-vulnerabilite">Vue d&amp;rsquo;ensemble de la vulnerabilite&lt;/h2>
&lt;h3 id="diagramme-du-flux-dattaque">Diagramme du flux d&amp;rsquo;attaque&lt;/h3>
&lt;pre tabindex="0">&lt;code class="language-mermaid" data-lang="mermaid">graph TD
 A[User Login + Attacker JWT] --&amp;gt; B[AuthMiddleware]
 B --&amp;gt; C[Extract JKU URL from Header]
 C --&amp;gt; D{Validate JKU URL&amp;lt;br/&amp;gt;lastIndexOf check}
 D --&amp;gt;|&amp;#34;URL starts with AUTH_PROVIDER&amp;lt;br/&amp;gt;string-based comparison&amp;#34;| E[PASSES]
 D --&amp;gt;|&amp;#34;Does not start with AUTH_PROVIDER&amp;#34;| R[Rejected]

 E --&amp;gt; F[&amp;#34;Fetch JWKS from JKU URL&amp;#34;]
 F --&amp;gt; G[&amp;#34;JWT Verification with&amp;lt;br/&amp;gt;attacker&amp;#39;s public key&amp;#34;]
 G --&amp;gt; H[Auth Bypass]
 H --&amp;gt; I[Flag]

 subgraph &amp;#34;URL Confusion&amp;#34;
 J[&amp;#34;Validator sees:&amp;lt;br/&amp;gt;http://127.0.0.1:1337@attacker.com/...&amp;lt;br/&amp;gt;starts with AUTH_PROVIDER ✓&amp;#34;]
 K[&amp;#34;HTTP client connects to:&amp;lt;br/&amp;gt;attacker.com&amp;lt;br/&amp;gt;treats 127.0.0.1:1337 as credentials&amp;#34;]
 end

 D -.-&amp;gt; J
 F -.-&amp;gt; K
&lt;/code>&lt;/pre>&lt;h2 id="analyse-source-to-sink">Analyse source-to-sink&lt;/h2>
&lt;h3 id="1-point-dentree---authentification-jwt-source">1. Point d&amp;rsquo;entree - Authentification JWT (Source)&lt;/h3>
&lt;p>La vulnerabilite commence lorsque le AuthMiddleware traite les tokens JWT :&lt;/p></description></item><item><title>Amazon AppSec CTF : PageOneHTML</title><link>https://blog.rodolpheg.xyz/fr/posts/pageronehtlm/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/pageronehtlm/</guid><description>&lt;h2 id="résumé-exécutif">Résumé exécutif&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Défi&lt;/strong> : PageOneHTML&lt;/li>
&lt;li>&lt;strong>Catégorie&lt;/strong> : Sécurité Web&lt;/li>
&lt;li>&lt;strong>Vulnérabilité&lt;/strong> : Server-Side Request Forgery (SSRF) via le protocole gopher://&lt;/li>
&lt;li>&lt;strong>Impact&lt;/strong> : Accès à un endpoint d&amp;rsquo;API interne menant à la divulgation du flag&lt;/li>
&lt;li>&lt;strong>Flags&lt;/strong> :
&lt;ul>
&lt;li>Local : &lt;code>HTB{f4k3_fl4g_f0r_t3st1ng}&lt;/code>&lt;/li>
&lt;li>Distant : &lt;code>HTB{l1bcurL_pla7h0r4_0f_pr0tocOl5}&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="analyse-source-to-sink">Analyse Source-to-Sink&lt;/h2>
&lt;h3 id="1-point-dentrée---entrée-utilisateur-source">1. Point d&amp;rsquo;entrée - Entrée utilisateur (Source)&lt;/h3>
&lt;p>La vulnérabilité commence au endpoint &lt;code>/api/convert&lt;/code> qui accepte du contenu markdown contrôlé par l&amp;rsquo;utilisateur :&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// routes/index.js:15-28
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/api/convert&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">markdown_content&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">port_images&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// User input
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">markdown_content&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">html&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">MDHelper&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">makeHtml&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">markdown_content&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Convert MD to HTML
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">port_images&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="c1">// If port_images is true
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nx">ImageConverter&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">PortImages&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">html&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// Process images
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">then&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">newHTML&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">newHTML&lt;/span> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">html&lt;/span> &lt;span class="p">}));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">html&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">403&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing parameters!&amp;#39;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-traitement-des-images---confusion-de-protocole">2. Traitement des images - Confusion de protocole&lt;/h3>
&lt;p>Le module &lt;code>ImageConverter&lt;/code> extrait toutes les balises &lt;code>&amp;lt;img&amp;gt;&lt;/code> et traite leurs attributs &lt;code>src&lt;/code> :&lt;/p></description></item></channel></rss>